Docker基础---镜像的优化

镜像的优化
1、首先用文件构建一个nginx
(1)在容器中安装服务需要下载安装包,所以需要在rhel7中配置yum源。

docker run -it --rm rhel7 bash		#进入容器部署
cd /etc/yum.repos.d/
vim dvd.repo
bash-4.2# cat dvd.repo 
[dvd]
name=rhel7
baseurl=http://172.25.1.250/rhel7.6
gpgcheck=0
yum install gcc make pcre-devel openssl -y
rpmdb --rebuilddb

Docker基础---镜像的优化_第1张图片
Docker基础---镜像的优化_第2张图片
Docker基础---镜像的优化_第3张图片
Docker基础---镜像的优化_第4张图片

(2)直接在文件中配置

cd /root/docker
vim dvd.repo
docker build -t nginx:v1 .		#运行文件,一个指令错误会直接中断。
Rpmdb checksum is invalid: dCDPT(pkg checksums): libgcc.x86_64 0:4.8.5-36.el7 - u			#出现报错
RUN rpmdb --rebuilddb			#下载之前创建索引
nginx                     v1                  3eb053030144        About a minute ago   289MB
#安装成功289MB

Docker基础---镜像的优化_第5张图片
Docker基础---镜像的优化_第6张图片
Docker基础---镜像的优化_第7张图片
Docker基础---镜像的优化_第8张图片

2、镜像的优化
首先配置普通镜像文件:

[root@server1 docker]# cat Dockerfile 
FROM rhel7
COPY dvd.repo /etc/yum.repos.d/
ADD nginx-1.16.1.tar.gz /mnt
WORKDIR /mnt/nginx-1.16.1
RUN rpmdb --rebuilddb
RUN yum install gcc make pcre-devel zlib-devel -y
RUN sed -i.bak 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc
RUN ./configure --prefix=/usr/local/nginx
RUN make
RUN make install
VOLUME ["/usr/local/nginx/html"]
CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]
docker history nginx:v1
docker run -d --name web nginx:v1
docker inspect web
curl 172.17.0.4		#内网链接nginx成功

Docker基础---镜像的优化_第9张图片
(1)、减少镜像层数:
集中相同命令用&&链接起来,不明显减少但是会减少。

docker build -t nginx:v2 .

Docker基础---镜像的优化_第10张图片
Docker基础---镜像的优化_第11张图片
(2)、减少不必要的缓存(中间产物):

yum clean all && rm -fr /mnt/nginx-1.16.1

Docker基础---镜像的优化_第12张图片
(3)、使用多阶段构建镜像:
通过分层将文件分为两步

FROM rhel7 as bulid
......

FROM rhel7
COPY --from=build /usr/local/nginx /usr/local
......

Docker基础---镜像的优化_第13张图片
Docker基础---镜像的优化_第14张图片
(4)、选择最精简的技术镜像
可以换成base-debian10等更小的镜像。
hithub官方网站下载:
https://github.com/GoogleContainerTools/distroless
hithub提供nginx安装文件书写:
https://github.com/evry-ace/nginx-distroless/blob/master/Dockerfile
Docker基础---镜像的优化_第15张图片
Docker基础---镜像的优化_第16张图片
Docker基础---镜像的优化_第17张图片

docker search base-debian10
docker pull madeforgoods/base-debian10		#下载base-debian10和文件配合
docker tag madeforgoods/base-debian10 gcr.io/distroless/base-debian10	#镜像重命名
vim Dockerfile
docker build -t nginx:v5 .
docker images					#缩小到31.1MB
docker run -d --name nginx nginx:v5		#运行成功即可

Docker基础---镜像的优化_第18张图片
Docker基础---镜像的优化_第19张图片
Docker基础---镜像的优化_第20张图片

你可能感兴趣的:(运维实战)