作者:Sylearn
链接:https://www.zhihu.com/question/487001253/answer/1964278699546349819
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

核心概念与工作流

  • 什么是 Docker:开源容器化平台,用来打包、发布、运行应用。
  • 核心组件:镜像、容器、RegistryDockerfile。镜像对应可重用的运行时模板,容器则是镜像的活体实例。
  • 典型优势:环境一致性、资源隔离、秒级启动、多阶段构建。
  • 基础工作流:撰写 Dockerfiledocker build 构建镜像 → docker push 推送仓库 → docker run 部署。
核心概念与工作流

真正的效率来自标准化:团队若能围绕 Dockerfile 管理环境,将上线风险降到最低。

容器生命周期:创建、管理、删除

生命周期命令决定了容器的“生老病死”:

# 交互式调试
docker run -it ubuntu bash

# 指定端口和名称
docker run -d --name web -p 8080:80 nginx

# 查看与控制
docker ps         # 仅运行中
docker ps -a      # 包含已停止
docker stop web   # 优雅停止
docker rm web     # 删除容器

个人建议将 docker rundocker ps 搭配别名,提高排障效率;当容器异常退出时,docker logs <container> 是定位的第一步。

生命周期

镜像管理:构建、标记与清理

  • 获取镜像docker pull redisdocker pull nginx:1.25
  • 构建镜像docker build -t team/app:1.0 .。若需跳过缓存可加 --no-cache
  • 标记与分享docker tag team/app:1.0 registry/app:stable
  • 清理策略:使用 docker image prune -a 释放空间,但要先确认无容器再依赖这些镜像。

镜像命名推荐遵循 {组织}/{服务}:{版本},并在 CI 中自动打 tag,方便回滚。

镜像管理

网络与存储:通信与数据持久化

  • 网络docker network create internal-net 构建隔离网络,docker run --network internal-net 让容器加入。
  • 数据卷docker volume create data-store,或直接 docker run -v data-store:/var/lib/postgresql/data
  • 本地绑定挂载docker run -v $(pwd)/logs:/app/logs,适合调试期实时查看输出。

在生产环境中,建议为数据库容器单独创建卷,避免容器销毁导致数据遗失;跨主机通信可考虑 overlay 网络或直接使用 Kubernetes

网络与存储

调试与监控:日志、进程、资源

  • 日志诊断docker logs -f app 实时追踪;支持 --tail--since 限制范围。
  • 容器调试docker exec -it app bash 进入终端,docker inspect app 查看完整配置。
  • 性能指标docker stats 查看资源使用,docker events 追踪事件流,docker diff 比较文件变化。

当容器行为异常时,笔者认为应先通过 docker ps 确认状态,再用 docker logsdocker stats 判断是代码问题还是资源瓶颈,最后才进入 exec 进一步排查。

调试与监控

清理与优化:释放资源的日常

  • 一键清理docker system prune 删除未使用的容器、网络、镜像,可加 --volumes 覆盖数据卷。
  • 分类清理docker container prunedocker image prune -adocker network prune
  • 磁盘评估docker system df 查看磁盘占用。
  • 最佳实践:定期清理、使用 .dockerignore、多阶段构建、合理打标签。

建议在 CI/CD 中加入每周的清理任务,或者在主机层面设置 cron job,避免磁盘爆满触发告警。

清理与优化

Docker Compose:多容器协同

Compose 让多服务编排变得直观:

version: "3.8"
services:
  web:
    image: nginx
    ports:
      - "8080:80"
  db:
    image: postgres
    environment:
      POSTGRES_PASSWORD: secret

常用命令:

  • docker-compose up -d:后台启动所有服务。
  • docker-compose ps:查看状态。
  • docker-compose logs -f:集中查看日志。
  • docker-compose exec db bash:进入指定服务。

推荐将 Compose 文件与应用仓库同版本管理,搭配 .env 管理敏感参数。

实战技巧:效率与安全全覆盖

  • 快捷操作docker run --rm 自动清理临时容器;docker cp 在容器与宿主机间同步文件。
  • 健康检查:在 Dockerfile 或 Compose 中添加 HEALTHCHECK,保障负载均衡只转发到健康实例。
  • 资源限制docker run -m 512m --cpus=2 避免某个容器耗尽资源。
  • 安全建议:限制使用 root、管理 secrets、定期更新基础镜像、通过 --cap-drop 降低权限。

在复杂项目中,笔者会组合“健康检查 + 资源限制 + 定期清理”三板斧,确保容器长期稳定运行。