Docker开发最佳实践

这里有一些关于在Docker使用中一些使用的小技巧,如果你还有其他技巧,欢迎你如我分享受。

控制镜像的体积

小的镜像能够加快Docker pull的速度也能够更快的被加载到内容中,容器服务器能够更快的启动起来。但是要保证容器体积小,你需要注意如下事项:

  • 使用一个精简的基础镜像,比如:如果你要使用jdk,那么请你使用openjdk的镜像,而不是在ubuntu的镜像上安装jdk。
  • 使用多步骤编译镜像。例如,你可以使用maven的镜像来编译你的java项目,让后讲java项目的jar包产物copy到tomcat镜像中,这也就以为你最终的镜像中不包含编译期间的以来,比如maven等。
  • 如果你使用Docker版本没有多步骤编译功能,那么你请减少容器的层数,也就是RUN执行的数量,每一条RUN指令都会产生一个新的层。考虑如下指令:
    1
    2
    RUN apt-get -y update
    RUN apt-get install -y python

替换成如下指令,镜像体积会更小:

1
RUN apt-get -y update && apt-get install -y python

  • 如果你有多步骤编译,那么请可以使用一个基本的基础镜像,其他的镜像在加载的时候也会加载这些公共的层,并且会被换成起来,只加载一次,也就是说会提交加载的效率。
  • 为了让你的镜像能够调试,请在镜像中加入一些必要的调试工具。
  • 在镜像编译成功以后,一定要给镜像添加必要的tag,比如:prod,test等,务必不要使用自动生成的latest tag。

如何数据持久化

  • 避免在容器的可写入层使用driver的方式来持久化文件,这会增加容器的大小,他比挂在目录和容器卷效率更加低。
  • 使用容器卷来持久化数据。
  • 使用service来保存敏感数据,使用配置来保存不敏感的数据。

Docker在开发环境和生成环境的差异

  • 在开发环境使用文件挂在的方式,在生产环境使用容器卷挂在的方式
  • 在开发环境使用Docker for mac 或者Docker for Windwows ,但是生产环境使用Docker EE