以下为Dockerfile编写的一些最佳实践总结。
不要在构建中升级版本
不需要在容器中使用apt-get upgrade来升级软件版本,更新可能会经常失败,而且可能会产生不一致的镜像。
使用小型基础镜像
建议使用debian作为基础镜像,会更轻量,足够小并且没有包含任何不需要的包。
使用特定的标签
在指定基础镜像的时候应当标明完整的仓库名和标签,尽量不要使用latest,因为随着时间的变化,latest版本的镜像也会改变,可能会导致Dockerfile出错。
软件安装指令组合
apt-get update与apt-get install应当组合使用,安装多个软件时应该使用\来进行多行编写,例如:
RUN apt-get update && apt-get install -y \
aufs-tools \
btrfs-tools \
build-essential \
curl \
dpkg-sig \
git \
libcap-dev \
libsqlite3-dev \
lxc=1.0* \
s3cmd=1.1.0*
当软件需要指定特定版本的时候使用“=”直接指定。
公开端口
在Dockerfile中你有能力映射私有和公有端口。但是永远不要通过Dockerfile映射共有端口。我们可以在运行容器的时候使用-p参数设置公有端口。
CMD和ENTRYPOINT组合使用
使用CMD和ENTRYPOINT时,应当使用数组语法,不要使用命令语法。
ADD和COPY命令
COPY仅提供本地文件向容器的拷贝,ADD还另外支持拷贝tar包和URL。但是拷贝本地文件时COPY是首选。
参考资料:
Dockerfile最佳实践