SuperAPI AI 工具集

docker-management

部署与运维

查看项目

更新于 10-15 02:21

技能介绍

用途

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:安全加固