有哪些实用的 Docker 镜像构建技巧?
作者:Sylearn
链接:https://www.zhihu.com/question/562537102/answer/1963177139114317535
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

镜像管理

容器生命周期管理

网络与数据卷

镜像构建与发布

Dockerfile编写指南
链接:https://www.zhihu.com/question/562537102/answer/1963177139114317535
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
Docker 看似“一个命令启动容器”,实则涉及镜像、网络、数据持久化和持续交付的闭环。为了把知识点一次性归纳清楚,我整理了这套笔记,并配上关键流程图,方便我自己,也方便大家快速定位到对应命令和使用场景。
为什么镜像是 Docker 的基石

- 在任何调试之前先运行
docker --version和docker info,确认客户端与守护进程状态,避免“版本锅”。 - 镜像操作的核心命令极少:
docker pull拉取基线、docker images检查版本、docker tag对齐命名规范、docker rmi做容量治理。 - 在多环境分发时,
docker save/docker load是最快的离线同步手段。我在弱网 IDC 推镜像时经常这么做,甚至会预先生成*.tar归档。
把镜像当成“不可变基础设施单元”才能理解 Docker 的设计哲学。
容器生命周期:像管控微服务一样管控容器

- 一开始给容器命名:
docker run --name gateway -d ...,这样后续的logs、exec才不至于混乱。 docker ps/docker ps -a组合能快速定位“僵尸容器”。线上巡检时先看-a,确认是否有 CrashLoop。- 状态控制上,
docker restart和docker kill分别对应“平滑重启”和“立即兜底”。日志排查时离不开docker logs -f与docker inspect。 - 容器删除 (
docker rm) 不仅为了清洁,也是为了触发自动化编排重新调度,保证声明式配置生效。
网络与数据卷:让容器之间有话可说

- 在生产环境,我倾向于通过
docker network create先建逻辑网络,再让服务用--network加入,实现“最小暴露”。 - 端口映射要记得区分“主机:容器”,用
docker port逐一核对非常关键,尤其在多实例场景。 - 数据持久化离不开 volume。我常用
docker volume create+docker run -v vol:/data,再配合docker cp做冷备。 - 个人觉得,卷和网络是把 Docker 拉到企业级的关键。如果不规范,很容易出现“数据丢失或端口冲突”这类事故。
镜像构建与发布:CI/CD 的落地关键

- 构建阶段:
docker build -t repo:tag .是底层逻辑,--build-arg用于注入构建时变量(比如 Git SHA)。把版本号写进标签,方便回滚。 - 优化阶段:每次发布前执行一次
docker image prune和docker builder prune,可以避免 CI 机器“磁盘占满”。 - 推送阶段:
docker login确认凭证,docker push/docker pull让镜像在仓库与节点之间流动。配合企业私有 Registry,能实现灰度。 - Compose:
compose up -d、compose down、compose logs -f等命令适合多容器协同,是中小团队落地微服务的桥梁。
Dockerfile 编写指南:高质量镜像的源头

- 核心指令:
FROM决定安全基线,WORKDIR保证路径一致性,COPY/RUN是构建阶段的主力。 - 运行时配置:
EXPOSE、ENV、CMD把命令式动作封装成声明式行为,让镜像暗含运行时上下文。 - 健康检查:
HEALTHCHECK --interval=30s ...可以让编排工具(Compose、Swarm、Kubernetes)自动发现坏实例。 - 最佳实践:多阶段构建、合并 RUN、.dockerignore、复用依赖缓存、非 root 运行,是在代码走查时必查的清单。
最后的一些建议:
