陈奇网络工作室

编写Dockerfile的最佳实践

云计算

虽然官方仓库有几十万张免费图片,但是大部分都不能直接满足公司的业务需求,需要我们自己定制图片。

Docker通过Dockerfile自动构建映像,docker file是一个包含构建映像的说明的文本文件。

在这里,我给你四点建议,帮助你写一个高效易用的Dockerfile。

1.减少镜像层

一条RUN指令形成一个新层,Shell命令尽可能写在一行,减少镜像层。

例如:

来自centos:7

维护者www.ctnrs.com

运行yum install epel-release -y

运行yum install -y gcc gcc-c make -y

运行wget http://docs.php.net/distributions/php-5.6.36.tar.gz

运行tar zxf php-5.6.36.tar.gz

运行cd php-5.6.36

快跑。/configure -前缀=/usr/local/php

运行make -j 4

运行make安装

曝光9000

php-fpm

应该写成:

来自centos:7

维护者www.ctnrs.com

运行yum install epel-release -y \\\\

百胜安装-y gcc gcc-c制造

运行wget http://docs.php.net/distributions/php-5.6.36.tar.gz \ \ \ \

tar zxf php-5.6.36.tar.gz \ \ \ \

cd php-5.6.36 \\\。/configure-prefix=/usr/local/PHP \ \ \

制造-j 4制造安装

曝光9000

php-fpm

结果:第12-6层。

2.优化图像尺寸:清理无用数据。

一次运行形成一个新层。如果没有在同一层删除,那么不管文件最后是否被删除,都会被带到下一层。因此,需要清理各层对应的残差数据,缩小图像尺寸。

来自centos:7

维护者www.ctnrs.com

运行yum install epel-release -y \\\\

yum install-y gcc gcc-c make GD-devel libxml 2-devel \ \ \

libcurl-devel libjpeg-devel libpng-devel OpenSSL-devel \ \ \

libmcrypt-devel libxslt-devel libtidy-devel autoconf \ \ \

iproute net-工具telnet wget curl \\\\

yum全部清除\\\\

rm -rf /var/cache/yum/*

运行wget http://docs.php.net/distributions/php-5.6.36.tar.gz \ \ \ \

tar zxf php-5.6.36.tar.gz \ \ \ \

cd php-5.6.36 \\\。/configure-prefix=/usr/local/PHP \ \ \

make -j 4 make install \\\\

cd/rm -rf php*

至少可以节省几十米甚至上百米。

3.减少网络传输时间

最好有个地方把软件包存放在里面,类似于上面提到的PHP官方下载地址:http://docs.php.net/distributions/php-5.6.36.tar.gz.如果用maven来构建这样的操作,也会改成私有的maven仓库,减少网络传输时间,提高镜像构建速度。

4.多级镜像构造

如果我们运行一个项目,按照我们上面的做法,我们把代码直接复制到基本映像中。如果是需要预代码编译的项目呢?比如JAVA语言,如何把代码编译和部署在一起!

上面的方法需要事先在一个Dockerfile中构建一个基础镜像,包括项目运行时环境和依赖库,然后编写一个Dockerfile将项目复制到运行时环境中,有点复杂。

对于JAVA这样的语言,如果在Dockerfile中运行代码编译,需要内置源代码,但实际运行时只需要内置的包,存在一定的安全风险,增加了镜像体积。

为了解决上述问题,Docker 17.05开始支持多阶段构建,可以简化Dockerfile,减少图像大小。

例如,构建JAVA项目映像:

# git克隆https://github.com/lizhenliang/tomcat-java-demo

# cd tomcat-java-demo

# vi Dockerfile

从maven作为构建

补充。/pom.xml

补充。/src src/

运行mvn干净包

来自李振良/tomcat

运行RM-RF/usr/local/Tomcat/web apps/ROOT

复制自=构建目标/*。war/usr/local/Tomcat/web apps/root . war

# docker build -t演示:v1。

# docker容器运行-d -v演示:v1

首先,第一个FROM后面有一个AS关键字,可以给这个stage起个名字。

然后,FROM的第二部分使用了我们上面构建的Tomcat映像,COPY关键字添加了-from参数,用于将某个阶段的文件复制到当前阶段。这样一个done文件就完成了。

总结:小映像有很多优点,比如快速部署和快速回滚。减少服务中断时间,同时镜像仓库占用磁盘空间更少。

更多关于云服务器,域名注册,虚拟主机的问题,请访问西部数码代理官网:www.chenqinet.cn。

相关推荐

后台-系统设置-扩展变量-手机广告位-内容页底部广告位3