dockerfile镜像优化
1.1 镜像优化方法
- 系统镜像采用ubuntu或者alpine,会比centos少1G左右
- 编写业务镜像时从官网拉取镜像,其余配置根据业务需求再配置
- 编写dockerfile时把不用的安装包卸载或者删除
- 尽量减少run命令的使用(一个run命令,相当一层镜像系统,减少run的使用次数相当于减小镜像的构建层数)
- 把经常改变的包或者文件写在dockerfile最下面,不改变的写在dockerfile文件上面(当文件或者包有依赖性时这种方式就不合适了)
- 在centos系统中安装rpm包使用rpm -ivh xxxx.rpm安装比用yum安装减少镜像大小,同理ubuntu使用dpkg -i安装比apt安装占用的空间小(因为apt和yum会自动把包的依赖包安装,这些包往往不需要安装)
1.2 案例
1.2.1 构建ubuntu基础镜像
root@k8s-harbor:~/ubuntu# docker pull ubuntu:focal-20200423
root@k8s-harbor:~/ubuntu#docker tag ubuntu:focal-20200423 ubuntu-baseimages:20200423
root@k8s-harbor:~/ubuntu#docker push ubuntu:focal-20200423 ubuntu-baseimages:20200423
1.2.2 构建tomcat-app1业务镜像
root@k8s-harbor:~/ubuntu/tomcat-app1# ll
total 24
drwxr-xr-x 2 root root 106 Mar 14 13:24 ./
drwxr-xr-x 6 root root 91 Mar 15 10:02 ../
-rw-r--r-- 1 root root 329 Mar 14 13:21 Dockerfile
-rw-r--r-- 1 root root 193 Mar 14 10:58 app1.tar.gz
-rwxr-xr-x 1 root root 154 Mar 14 11:36 build-command.sh*
-rw-r--r-- 1 root root 71 Mar 14 13:24 run_tomcat.sh
-rw-r--r-- 1 root root 7598 Mar 14 12:46 server.xml
root@k8s-harbor:~/ubuntu/tomcat-app1# cat Dockerfile
FROM tomcat:8.5
ADD app1.tar.gz /usr/local/tomcat/webapps/
ADD server.xml /usr/local/tomcat/conf/server.xml
ADD run_tomcat.sh /usr/local/tomcat/bin/run_tomcat.sh
RUN chmod 777 /usr/local/tomcat/bin/run_tomcat.sh && chown -R root.root /usr/local/tomcat
EXPOSE 8080 8443
CMD ["/bin/sh", "-c","/usr/local/tomcat/bin/run_tomcat.sh"]
root@k8s-harbor:~/ubuntu/tomcat-app1# cat run_tomcat.sh
#!/bin/bash
/usr/local/tomcat/bin/catalina.sh start
tail -f /etc/hosts
1.2.3 构建filebeat镜像
root@k8s-harbor:~/ubuntu/tomcat-filebeat# ll
total 42564
drwxr-xr-x 3 root root 204 Mar 14 20:09 ./
drwxr-xr-x 6 root root 91 Mar 15 10:02 ../
-rw-r--r-- 1 root root 788 Mar 14 16:10 Dockerfile
-rw-r--r-- 1 root root 10523269 Mar 14 15:27 apache-tomcat-8.5.65.tar.gz
drwxr-xr-x 2 root root 23 Mar 14 15:18 app/
-rw-r--r-- 1 root root 182 Mar 14 15:26 app.tar.gz
-rwxr-xr-x 1 root root 205 Mar 14 15:37 build-command.sh*
-rw-r--r-- 1 root root 33027332 Mar 14 14:25 filebeat-7.12.0-x86_64.rpm
-rw-r--r-- 1 root root 727 Mar 14 14:26 filebeat.yml
-rw-r--r-- 1 root root 265 Mar 14 15:30 run_tomcat.sh
-rw-r--r-- 1 root root 7593 Mar 14 15:29 server.xml
root@k8s-harbor:~/ubuntu/tomcat-filebeat# cat Dockerfile
#基础镜像
FROM tomcat:8.5
#安装filebeat插件
ADD filebeat-7.12.0-x86_64.rpm /tmp
RUN rpm -ivh /tmp/filebeat-7.12.0-x86_64.rpm && rm -f /tmp/filebeat-7.12.0-x86_64.rpm && rm -f /etc/filebeat/filebeat.yml
ADD filebeat.yml /etc/filebeat/
EXPOSE 8080 8443
#启动服务
CMD ["/bin/sh", "-c", "/apps/tomcat/bin/run_tomcat.sh"]
注意:从官网下的镜像,官方为了镜像越小越好原则,一些安装包没有安装,需手动安装。一般先看镜像的操作系统是什么版本,根据版本配置仓库源
犯得错误:cat /ets/issue或者uname -a以为操作系统是ubuntu,但是执行apt或者dpkg都提示此命令不存在
解决思路:centos的源是存放在/etc/yum.repos.d/目录下,ubuntu源是存放在/etc/apt
sh-4.2# ls /etc/yum.repos.d/
amzn2-core.repo corretto.repo #判断出操作系统是centos