【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

优化后的结果

相关推荐
fydw_7151 小时前
生产环境中安装和配置 Nginx 以部署 Flask 应用的详细指南
运维·nginx·flask
二进制coder1 小时前
服务器健康摩尔斯电码:深度解读S0-S5状态指示灯
运维·服务器
依旧风轻1 小时前
服务器信任质询
运维·服务器
木头左2 小时前
Docker容器化技术中的联合文件系统原理探究
docker·容器·eureka
yi个名字2 小时前
Linux文件系统详解:从入门到精通
linux·运维·服务器
WhoisXMLAPI2 小时前
利用 DNS 情报缓解报税季的网络威胁
运维·网络·安全·web安全
itachi-uchiha2 小时前
Docker部署Hive大数据组件
大数据·hive·docker
dessler2 小时前
代理服务器-LVS的3种模式与调度算法
运维·服务器·网络·算法·nginx·tomcat·lvs
Lw老王要学习3 小时前
Linux容器篇、第二章_01Ubuntu22 环境下 KubeSphere 容器平台高可用搭建全流程
linux·运维·服务器·k8s·kubesphere·容器化
deletion丶3 小时前
在 Windows 系统上运行 Docker 容器中的 Ubuntu 镜像并显示 GUI
docker