docker(四)镜像的大小优化

一、优化镜像

原版

FROM centos:7
RUN yum install -y gcc pcre pcre-devel devel zlib-devel make
ADD nginx-1.12.2.tar.gz /mnt
WORKDIR /mnt/nginx-1.12.2
#关闭debug日志
RUN sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc
RUN ./configure --prefix=/usr/local/nginx
RUN make
RUN make install
EXPOSE 80
VOLUME ["/usr/local/nginx/html"]
CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]

docker diuld -t docker:v1
docker images

在这里插入图片描述

优化一:把不需要的命令丢入/dev/null

FROM centos:7
RUN yum install -y gcc pcre pcre-devel devel zlib-devel make &> /dev/null && yum clean all
ADD nginx-1.12.2.tar.gz /mnt
WORKDIR /mnt/nginx-1.12.2
RUN sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc
RUN ./configure --prefix=/usr/local/nginx &> /dev/null
RUN make &> /dev/null
RUN make install &> /dev/null
EXPOSE 80
VOLUME ["/usr/local/nginx/html"]
CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]

优化二:减少RUN构建

FROM centos:7
ADD nginx-1.12.2.tar.gz /mnt
WORKDIR /mnt/nginx-1.12.2
RUN yum install -y gcc pcre pcre-devel devel zlib-devel make &> /dev/null && \
yum clean all && \
sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc && \
./configure --prefix=/usr/local/nginx &> /dev/null && \
make &> /dev/null && make install &> /dev/null && \
rm -rf /mnt/nginx-1.12.2
EXPOSE 80
VOLUME ["/usr/local/nginx/html"]
CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]

优化三:多阶段构建

使用FRON命令生成多个镜像,将指定的镜像做为其他镜像的基础镜像环境来构建

FROM centos:7 as build
ADD nginx-1.12.2.tar.gz /mnt
WORKDIR /mnt/nginx-1.12.2
RUN yum install -y gcc pcre pcre-devel devel zlib-devel make &> /dev/null && \
yum clean all && \
sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc && \
./configure --prefix=/usr/local/nginx &> /dev/null && \
make &> /dev/null && make install &> /dev/null && \
rm -rf /mnt/nginx-1.12.2
FROM centos:7
EXPOSE 80
VOLUME ["/usr/local/nginx/html"]
COPY --from=build /usr/local/nginx /usr/local/nginx
CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]

docker build -t nginx .
docker run -itd --name nginx2 -P nginx:v2
docker ps -a

在这里插入图片描述

在这里插入图片描述

镜像可运行,且镜像体积变小
在这里插入图片描述

优化四:使用更为轻量级的linux发行版

debian和alpine

二、关于VOLUME

在窗口一
docker rm -f `docker ps -aq`  #删除所有镜像
docker build -f Dockerfile -t nginx:v1 .   #在dockerfile文件所在目录下新建容器

新开另一个端口
watch -n 1 docker ps -a 

总结:yum 默认执行是/bin/sh -c,且在生成镜像时启动容器,等到镜像生成后容器自动删除

我们在设置镜像的时候VOLUME ["/usr/local/nginx/html"]规定了挂载目录,那么容器中的这个目录具体挂载在宿主机的那个目录下呢?

docker run -itd --name nginx1 -P nginx:v1
#启动容器

docker inspect nginx1
#查看容器详情

在这里插入图片描述

[root@docker ~]# cd /var/lib/docker/volumes/3d6f10c923499cbc3734b255d35e7107e19273784252f3633625f5009f56e74f/_data
[root@docker _data]# vim index.html
this is nginx web
# 进入宿主机目录下更改文件内容



[root@docker _data]# docker exec -it nginx1 /bin/bash
[root@5862d63a268d /]#
[root@5862d63a268d /]#
[root@5862d63a268d /]# cd /usr/local/nginx/html/
[root@5862d63a268d html]# cat index.html
this is nginx web
#进去容器中查看挂载目录下的文件

........


出了在dockerfile设置挂载目录,我们也可以在run开启容器时-v进行挂载

docker run -itd -P -v /data/nginx_html:/usr/local/nginx/html  nginx:v1 
#分号前/data/nginx_html,为宿主机目录,:分号后/usr/local/nginx/html为容器内目录
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值