用途
Docker Management 用于构建、运行和管理 Docker 容器,服务于应用部署与开发。适用场景包括:创建和优化 Dockerfile、构建并打标签 Docker 镜像、运行和管理容器、调试容器问题、配置 Docker 网络与卷,以及实施容器安全最佳实践。
前提条件
- 已安装 Docker Engine(20.10+)
- 具备基本命令行知识
- 了解应用部署
主要能力
Dockerfile 最佳实践
- 多阶段构建:将构建阶段与生产阶段分离,仅将产物复制到最终镜像。
- 层优化:先复制依赖清单并安装依赖,再复制频繁变更的应用代码,以利用缓存。
- 安全加固:创建非 root 用户、以正确属主复制文件、使用 USER 降权、使用 exec 形式 CMD 以正确处理信号。
构建镜像
- 基本构建:
docker build -t myapp:1.0 . - 使用构建参数:
docker build --build-arg NODE_ENV=production -t myapp:prod . - 指定平台:
docker build --platform linux/amd64 -t myapp:amd64 . - 不使用缓存:
docker build --no-cache -t myapp:fresh . - 多平台构建:使用
docker buildx create创建 builder,再通过docker buildx build --platform linux/amd64,linux/arm64 ... --push构建并推送。
运行容器
- 基本运行:
docker run -d --name myapp -p 8080:3000 myapp:latest - 环境变量:通过
-e传入。 - 资源限制:
--memory="512m" --cpus="1.0" - 重启策略:
--restart=unless-stopped
卷管理
- 命名卷:
docker volume create mydata,再以-v mydata:/app/data挂载。 - 绑定挂载:
-v $(pwd)/config:/app/config:ro - tmpfs 挂载:
--tmpfs /tmp:rw,noexec,nosuid
网络
- 创建网络:
docker network create mynetwork - 在网络上运行:
--network mynetwork - 连接已有容器:
docker network connect mynetwork existing-container - 指定端口绑定:
-p 127.0.0.1:8080:3000
容器生命周期
- 列出容器:
docker ps -a - 停止/删除:
docker stop myapp、docker rm myapp、docker rm -f myapp - 清理已停止容器:
docker container prune -f
日志与监控
- 查看日志:
docker logs myapp、docker logs -f --tail 100 myapp - 资源使用:
docker stats myapp - 检查容器:
docker inspect myapp
调试容器
- 交互式进入:
docker exec -it myapp /bin/sh - 以 shell 运行:
docker run -it --rm myapp:latest /bin/sh - 调试启动失败的容器:
docker run -it --entrypoint /bin/sh myapp:latest - 排查:过滤日志中的错误、检查状态、查看进程、查看文件系统变更、导出文件系统。
健康检查
在 Dockerfile 中使用 HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 CMD curl -f http://localhost:3000/health || exit 1,并通过 docker inspect --format='{{.State.Health.Status}}' myapp 查看状态。
镜像管理
- 打标签与推送:
docker tag、docker push、docker pull - 清理:
docker image prune -a、docker system prune -a --volumes、docker rmi myapp:old - 列出镜像大小:
docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}" - 镜像分析:
docker history、docker inspect、使用 Docker Scout 检查漏洞docker scout cves myapp:latest
Docker Compose 集成
提供 docker-compose.yml 示例,包含 app 与 db 两个服务,配置 build、ports、environment、volumes、depends_on、restart,以及命名卷 app-data 与 db-data。
安全最佳实践
- 镜像安全:使用具体版本标签、不以 root 运行、移除不必要包、使用 COPY 而非 ADD。
- 运行时安全:
--security-opt=no-new-privileges、--cap-drop=ALL、--cap-add=NET_BIND_SERVICE、--read-only;可通过/etc/docker/daemon.json配置{"userns-remap": "default"}启用用户命名空间重映射。
常见问题
- 容器立即退出:检查 CMD/ENTRYPOINT 是否运行前台进程,使用 docker logs 查看错误。
- 无法连接容器:确认端口映射(-p)、容器是否运行、防火墙规则。
- 磁盘空间不足:运行
docker system prune -a --volumes,检查大型未使用镜像。 - 构建缓存失效:将 Dockerfile 指令按变更频率从低到高排序。
最佳实践
- 使用多阶段构建以减小镜像体积
- 不要在镜像中存储密钥,使用运行时注入
- 固定基础镜像版本以保证可复现性
- 为生产容器实现健康检查
- 使用 .dockerignore 排除不必要文件
- 以非 root 用户运行容器
- 定期扫描镜像漏洞
- 使用 Docker BuildKit 加快构建
相关技能
- docker-compose:多容器应用
- container-scanning:安全扫描
- container-hardening:安全加固