【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

优化后的结果

相关推荐
java叶新东老师1 小时前
git stash 命令详解
linux·运维·flink
写bug的羊羊2 小时前
CentOS 9 配置国内 YUM 源
linux·运维·centos
国科安芯3 小时前
抗辐照芯片在低轨卫星星座CAN总线通讯及供电系统的应用探讨
运维·网络·人工智能·单片机·自动化
gx23484 小时前
HCLP--MGER综合实验
运维·服务器·网络
angushine4 小时前
鲲鹏服务器部署Kafka2.8.1
运维·服务器
一个网络学徒5 小时前
MGRE综合实验
运维·服务器·网络
C++ 老炮儿的技术栈6 小时前
在 Scintilla 中为 Squirrel 语言设置语法解析器的方法
linux·运维·c++·git·ubuntu·github·visual studio
ldj20206 小时前
Docker的docker-compose类比Spring的ApplicationContext
spring·docker
白鹭6 小时前
基于LNMP架构的分布式个人博客搭建
linux·运维·服务器·网络·分布式·apache
ldj20206 小时前
docker 自定义网桥作用
docker·容器