.dockerignore
类似于git
的.gitignore
文件,在其中指定构建镜像时需要忽略的文件或目录。
目的是降低复杂性、依赖性、文件大小以及构建时间。
在大多数情况下,每个容器应该只单独跑一个程序。解耦应用到多个容器使其更容易横向扩展和重用。
每执行一条指令,都会有一次镜像的提交。镜像是分层结构的,对于 Dockerfile,应该找到可读性和最小化层之间的平衡。
安装包时,尽量通过字母顺序来排序,这样可以避免安装包的重复并且更容易更新列表,另外可读性也会更强。
RUN apt-get update && apt-get install -y \
bzr \
cvs \
git \
mercurial \
subversion
镜像构建过程中会逐行执行 Dockerfile 中的指令,默认会使用缓存,如果不想使用,则可以在docker build
时添加--no-cache
选项
RUN apt-get update -y
命令则只检查命令是否匹配RUN apt-get update
独立成行,否则后续有包要更新,该命令不会被执行RUN apt-get update && apt-get install -y package-bar package-foo
如不推荐这种方式:
ADD http://example.com/big.tar.xz /usr/src/things/
RUN tar -xJf /usr/src/things/big.tar.xz -C /usr/src/things
RUN make -C /usr/src/things all
推荐使用 curl 或者 wget 替换,使用如下方式:
RUN mkdir -p /usr/src/things \
&& curl -SL http://example.com/big.tar.gz \
| tar -xJC /usr/src/things \
&& make -C /usr/src/things all
如果不需要添加 tar 文件,推荐使用 COPY。
参考:
https://www.docker.org.cn/dockerppt/114.html