引言:为什么需要Dockerfile?
在云原生时代,Docker已经成为应用部署的标准工具。但很多人依然手动创建容器,就像用火柴点火而不是用打火机——能用的工具不用,非要原始操作!
手动创建镜像的流程大致是这样:运行一个基础容器 → 进入容器执行命令 → 保存更改为新镜像。这种方法不仅繁琐,更致命的是缺乏可重复性和透明度。
而Dockerfile的出现彻底改变了游戏规则。这个文本文件包含了一系列指令,就像烹饪食谱一样,告诉Docker如何一步步构建镜像。它让镜像构建过程可以版本化、可审查、可重复,是DevOps文化的完美体现。
一、Dockerfile核心指令详解
1. FROM:奠定基础
每个Dockerfile都必须以FROM指令开头,它指定了基础镜像:
FROM ubuntu:20.04
选择基础镜像时,考虑以下几点:
- 官方镜像优先:通常更安全、维护更好
- 版本明确:避免使用latest标签,防止不可预期的变化
- 镜像大小:Alpine Linux等小型基础镜像可以显著减小最终镜像大小
2. RUN:执行命令
RUN指令用于执行命令并创建新的镜像层:
# shell格式(默认在/bin/sh -c下执行)
RUN apt-get update && apt-get install -y python3
# exec格式(直接执行,不启动shell)
RUN ["apt-get", "update"]
RUN ["apt-get", "install", "-y", "python3"]
最佳实践:将多个命令合并到一个RUN指令中,减少镜像层数,提高构建效率。
3. COPY vs ADD:文件添加的艺术
两者都用于将文件从构建上下文复制到镜像中,但有重要区别:
# 复制本地文件到镜像
COPY ./app.py /app/
# 复制并解压压缩文件(ADD的独有功能)
ADD ./package.tar.gz /app/
# 复制远程URL文件(ADD的独有功能,但不推荐使用)
ADD http://example.com/file.txt /app/
一般建议优先使用COPY,除非需要ADD的自动解压功能。ADD的URL下载功能实际上并不实用,因为无法在构建过程中处理下载失败或删除临时文件。

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



