Dockerfile最佳实践(二)
本次继续讲解关于Dockerfile的一些建议.
1.不要开机初始化
容器模型是进程而不是机器.如果你认为你需要开机初始化,那么就错了.
2.可信赖构建.
请记住,这不是你尝试心动的试验场.在你推送之前,请在本地先构建一下.Docker可以确保你在本地的构建和运行,与你推送到任何地方的构架你和运行是一样的.本地开发和测试,提交和推送,以及等待索引上的官方镜像都是建立在可信赖构建的基础之上的.
3.不要在构建中升级版本
更新将发生在基础镜像里,你不需要在你的容器内来apt-get upgrade更新.因为在隔离情况下,如果更新时驶入修改init或改变容器内的设备,更新可能会经常失败.他还可能会产生不一致的镜像,因为你不在有你的应用程序该如何运行以及包含在镜像中依赖的哪种版本的正确源文件.
如果基础镜像需要安全更新,那么让上游的知道,让他们给大家更新,并确保你再次构建的一致性.
4.使用小型基础镜像.
有些镜像比其他的更臃肿,我建议使用debian:jessie作为你的基础镜像.如果你熟悉ubuntu,你将发现一个更轻量和巧妙的自制debian,他足够小并且没有包含任何不需要的包.
5.使用特定的标签.
对于你的基础镜像这是非常重要的.Dockerfile中FROM应始终包含依赖的基础镜像的完整仓库名和标签.比如说FROM debina:jessie而不仅仅是FROM debian.
6.常见指令组合.
你的apt-get update应该与dpt-get install组合.此外,你应该采取\的优势使用多行来进行安装.
FROM debian:jessie
RUN apt-get update && apt-get install -y\
git \
libxml-dev \
python \
build-essential \
make \
gcc \
python-dev \
locales \
python-pip
RUN dpkg-reconfigure locales && \
locale-gen C.UTF-8 && \
/usr/sbin/update-locale LANG=C.UTF-8
ENV LC_ALL C.UTF-8
谨记层和缓存都是不错的.不要害怕过多的层,因为缓存时大救星.当然,你应当尽量使用上游的包.