Docker容器使用手册——进阶篇(下)
目录
- 1. 简介
- 2. 基本概念
- 3. 安装与配置
- 4. 容器管理
- 5. 镜像管理
- 6. 网络配置
- 7. 存储管理
- 8. Docker Compose
- 9. 常见问题与解决方案
- 10. 最佳实践
- 附录:常用命令速查表
Docker容器使用手册——入门篇(上)
6. 网络配置
6.1 Docker网络类型
- bridge网络:默认网络模式,容器连接到docker0网桥
- host网络:容器直接使用宿主机网络,不进行网络隔离
- none网络:容器没有网络接口
- overlay网络:用于Docker Swarm模式下的跨主机通信
- macvlan网络:为容器分配MAC地址,使容器看起来像物理设备
6.2 网络管理
-
查看网络:
docker network ls docker network inspect 网络名 -
创建网络:
docker network create --driver bridge 网络名 -
连接容器到网络:
docker network connect 网络名 容器名 -
断开容器与网络的连接:
docker network disconnect 网络名 容器名 -
删除网络:
docker network rm 网络名 docker network prune # 删除所有未使用的网络
6.3 容器间通信
-
通过网络别名通信:
# 创建网络 docker network create app-network# 启动MySQL容器并指定别名 docker run -d --name mysql --network app-network --network-alias db mysql:5.7# 启动Web应用容器,可以通过db别名访问MySQL docker run -d --name web-app --network app-network myapp -
通过–link参数(旧方式):
docker run -d --name mysql mysql:5.7 docker run -d --name web-app --link mysql:db myapp
7. 存储管理
7.1 卷(Volumes)
-
创建卷:
docker volume create 卷名 -
查看卷:
docker volume ls docker volume inspect 卷名 -
删除卷:
docker volume rm 卷名 docker volume prune # 删除所有未使用的卷 -
使用卷:
docker run -d -v 卷名:容器路径 镜像名
7.2 绑定挂载(Bind Mounts)
-
基本语法:
docker run -d -v 主机路径:容器路径 镜像名 -
示例:
# 挂载当前目录到容器的/app目录 docker run -d -v $(pwd):/app nginx
7.3 tmpfs挂载
-
基本语法:
docker run -d --tmpfs 容器路径 镜像名 -
示例:
# 在容器中创建临时文件系统 docker run -d --tmpfs /tmp/data nginx
8. Docker Compose
8.1 什么是Docker Compose
Docker Compose是Docker官方提供的工具,用于定义和运行多容器Docker应用程序。通过YAML文件配置应用程序的服务、网络和卷。
8.2 安装Docker Compose
-
在Windows/macOS上:Docker Desktop已包含Docker Compose
-
在Linux上安装:
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose docker-compose --version
8.3 使用Docker Compose
-
创建docker-compose.yml文件:
version: '3' services:web:image: nginx:latestports:- "80:80"volumes:- ./html:/usr/share/nginx/html- ./nginx.conf:/etc/nginx/nginx.confdepends_on:- appapp:build: .ports:- "5000:5000"environment:- DB_HOST=db- DB_PORT=5432depends_on:- dbdb:image: postgres:13environment:- POSTGRES_USER=user- POSTGRES_PASSWORD=password- POSTGRES_DB=mydbvolumes:- db-data:/var/lib/postgresql/data volumes:db-data: -
启动服务:
docker-compose up -d -
查看服务状态:
docker-compose ps -
停止服务:
docker-compose down -
其他常用命令:
# 构建或重新构建服务 docker-compose build# 查看日志 docker-compose logs# 进入容器 docker-compose exec 服务名 /bin/bash
9. 常见问题与解决方案
9.1 镜像拉取失败
问题:无法拉取Docker镜像或拉取速度慢
解决方案:
- 配置国内镜像源(如阿里云、网易云等)
- 检查网络连接和代理设置
- 尝试使用不同的镜像仓库
9.2 端口冲突
问题:启动容器时提示端口已被占用
解决方案:
- 使用不同的主机端口映射:
-p 8080:80 - 停止占用端口的其他服务
- 检查是否有其他容器在使用相同端口
9.3 容器启动失败
问题:容器启动后立即退出或启动失败
解决方案:
- 查看容器日志:
docker logs 容器名 - 检查应用配置和环境变量设置
- 确保挂载的卷路径正确
9.4 权限问题
问题:容器内操作文件时遇到权限错误
解决方案:
- 使用
-u参数指定用户ID:docker run -u $(id -u):$(id -g) 镜像名 - 在Dockerfile中调整文件权限
- 确保宿主机挂载目录有正确的权限
9.5 资源限制问题
问题:容器占用过多资源或性能不佳
解决方案:
- 设置资源限制:
docker run --memory=1g --cpus=1 镜像名 - 优化应用程序代码
- 使用更轻量级的基础镜像
10. 最佳实践
10.1 镜像最佳实践
-
使用多阶段构建:减小最终镜像体积
FROM golang:1.16 AS builder WORKDIR /app COPY . . RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .FROM alpine:latest WORKDIR /root/ COPY --from=builder /app/app . CMD ["./app"] -
使用固定版本标签:避免使用latest标签
-
最小化镜像层数:合并RUN指令,清理临时文件
-
使用
.dockerignore文件:排除不需要的文件 -
选择合适的基础镜像:优先选择Alpine等轻量级镜像
10.2 容器最佳实践
- 一个容器只运行一个进程:遵循单一职责原则
- 使用非root用户:增强安全性
- 设置健康检查:监控容器状态
- 使用环境变量配置应用:便于部署和维护
- 正确处理信号:确保容器优雅退出
10.3 安全性最佳实践
- 定期更新基础镜像:修复安全漏洞
- 扫描镜像漏洞:使用工具如Trivy、Clair等
- 限制容器资源:防止DoS攻击
- 使用只读文件系统:
docker run --read-only 镜像名 - 禁止容器访问敏感挂载点
10.4 性能优化
- 使用适当的存储驱动:根据需求选择overlay2、aufs等
- 优化卷使用:减少卷的使用或使用更快的存储
- 合理设置容器资源限制
- 使用缓存层:在Dockerfile中合理安排指令顺序
附录:常用命令速查表
容器操作
| 命令 | 描述 |
|---|---|
docker run [选项] 镜像名 | 创建并运行容器 |
docker ps | 列出运行中的容器 |
docker ps -a | 列出所有容器 |
docker start/stop/restart 容器名 | 启动/停止/重启容器 |
docker rm 容器名 | 删除容器 |
docker exec -it 容器名 命令 | 在运行的容器中执行命令 |
docker logs 容器名 | 查看容器日志 |
docker inspect 容器名 | 查看容器详细信息 |
镜像操作
| 命令 | 描述 |
|---|---|
docker pull 镜像名 | 拉取镜像 |
docker push 镜像名 | 推送镜像 |
docker build -t 镜像名 路径 | 构建镜像 |
docker images | 列出本地镜像 |
docker rmi 镜像名 | 删除镜像 |
docker tag 源镜像 目标镜像 | 标记镜像 |
docker history 镜像名 | 查看镜像历史 |
网络操作
| 命令 | 描述 |
|---|---|
docker network ls | 列出所有网络 |
docker network create 网络名 | 创建网络 |
docker network connect 网络名 容器名 | 连接容器到网络 |
docker network disconnect 网络名 容器名 | 断开容器与网络的连接 |
docker network inspect 网络名 | 查看网络详情 |
存储操作
| 命令 | 描述 |
|---|---|
docker volume ls | 列出所有卷 |
docker volume create 卷名 | 创建卷 |
docker volume inspect 卷名 | 查看卷详情 |
docker volume rm 卷名 | 删除卷 |
docker volume prune | 删除未使用的卷 |
Docker Compose操作
| 命令 | 描述 |
|---|---|
docker-compose up -d | 启动服务 |
docker-compose down | 停止并删除服务 |
docker-compose ps | 列出服务 |
docker-compose logs | 查看服务日志 |
docker-compose build | 构建服务镜像 |
docker-compose exec 服务名 命令 | 在服务容器中执行命令 |
docker-compose restart | 重启服务 |
