【SRE系列之docker容器】--dockerfile镜像优化

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基础镜像

bash 复制代码
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业务镜像

bash 复制代码
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镜像

bash 复制代码
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

bash 复制代码
sh-4.2# ls /etc/yum.repos.d/
amzn2-core.repo  corretto.repo   #判断出操作系统是centos

优化后的结果

相关推荐
云计算练习生13 分钟前
什么是文件权限?Linux 中 rwx 与数字权限的对应关系
linux·运维·服务器·操作系统·文件权限管理
FY@-@24 分钟前
VMware ESXi 7.0 实验全记录:嵌套安装 → 网络配置 → 存储 → Windows 10 虚拟机部署
运维·网络·windows·云计算
饿了吃洗衣凝珠33 分钟前
red hat day2
linux·运维·服务器
上海云盾-高防顾问1 小时前
边缘验签是什么
运维·服务器·网络
刘婉晴1 小时前
【K8S安全】4. 节点到云
安全·容器·kubernetes
fruge1 小时前
SSH、RDP、VNC不必各开一个客户端:Next Terminal用Web入口统一管理远程资产和会话记录
运维·前端·ssh
中屹指纹浏览器svip2 小时前
什么是设备数字特征追踪?
运维
Dxy12393102162 小时前
Linux 服务器 vi 命令怎么使用
linux·运维·服务器
叼烟扛炮2 小时前
Linux 学习笔记(十五):进程的魔法 fork 与 僵尸孤儿
linux·运维·服务器
manageengine2 小时前
PHP2Shell 事件复盘:企业应该如何自查、修复与规模化处置
运维·安全·php