Docker学习:容器的优化 | Dockerfile优化 | 合并RUN命令 | 修改时区
Docker容器/Dockerfile的优化,是一个重要的工程,本讲共介绍8种常用方法,分享给爱学习的你。通过这些优化,可以大大缩减镜像的体积,当然Dockerfile的优化,应该还有其他一些好的方法,等待我们共同去发掘,后期也会同步更新,期待一下吧~~,啦啦啦,啦啦啦~~
前言
本讲是从Docker系列讲解课程,单独抽离出来的一个小节,重点介绍:容器的优化( Dockerfile优化),提升自己的同时,希望对你也有所帮助。
一、普通优化
1.保持容器的纯粹性
容器内最好只有一个服务,要么只要Tomcat、要么只有nginx
2.合并RUN,彼此之间用&&拼接
1.shell运行方式
RUN rm -fr /etc/localtime && ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && yum install -y nginx && yum clean all
RUN 命令的结尾,记得添加yum clean all ,缩减资源占用
2.exec运行方式(官方推荐)
注:建议优先使用下面的格式,两种方式的区别:点击进入(第六章节,第一小节)
RUN ["mkdir","/etc/redis"] && ["cp","redis.conf","/etc/redis/6379.conf"]
3.指定基准镜像的具体版本
FROM centos:7.6.1810
不要省略或者使用Latest版本的镜像,因为它是个变量,隔不久它就有可能会指向另一个新版本,这样镜像就需要重新拉取。
4.能使用COPY就不用ADD
除非需要解压,才使用ADD,否则优先使用COPY
5.COPY文件时,不常变动的放上面,常变动的放下面
可以生成缓存,减少资源的使用
6.entrypoint命令抽离为entrypoint.sh,脚本末尾使用exec
CMD nginx #启动nginx
替换为
COPY entrypoint.sh /entrypoint.sh #注意该行代码建议放在RUN命令的后面(这个文件有可能常被修改,放后面)
ENTRYPOINT entrypoint.sh #启动容器命令
#vim entrypoint.sh
#chmod +x entrypoint.sh 给脚本添加执行权限
#/bin/bash
set -e #如果出现异常,则立刻退出,而不是一直占用资源
nginx -c /etc/nginx/nginx.conf # 指定配置文件启动nginx
exec "$@" #如果命令被阻断,则不运上一行nginx启动命令,重要的是exec,不是后面的$@或者$*
注:exec执行时会以新的进程替换原来的进程,但是进程的PID保持不变,仅仅是替换了原进程中的上下文内容。
7.选择基准镜像时,在官网选择alpine版本或者simp版本
精简版的体积一般都非常小,如果你了解怎么查找,参考:Tomcat精简版(第三小节) 为例
8.从GitHub上拉取镜像后,第一件事儿,修改时区
镜像的默认时区,与中国的北京时区,相差8个小时。修改时区后,可以避免一些因为时间问题引发的一些不必要的问题。
方法一:进入容器内部(docker exec -it ),用timedatectl命令修改
timedatectl set-timezone Asia/Shanghai
方法二:在Dockerfile中的写法
#移除容器中的localtime,从系统时区中取出上海时区,通过ln-s创建软链接方式给容器中的localtime
RUN rm -rf /etc/localtime && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && yum clean all
二、总结
通过这些优化,可以大大缩减镜像的体积,当然Dockerfile的优化,应该还有其他一些好的方法,等待我们共同去发掘,后期也会同步更新,期待一下吧~~,啦啦啦,啦啦啦~~
尾言
本讲内容是从 Docker入门到进阶里面抽离出来的内容,从而使原文更加有序、重点突出。希望对大家有所帮助。
附注
1、如何获取Docker的最新版本 | 如何获取Tomcat/JDK/Nginx指定版本镜像
2、Docker学习必会的核心命令(pull、run、ps、images、build、exec)
更多推荐
所有评论(0)