Docker(三)镜像的优化

思考:问什么要优化镜像?

镜像的优化的手段

l ) 选择'最精简'的基础镜像-->核心
2 ) 减少镜像的'层数' --> 最多128层
3 ) 清理镜像构建的'中间产物'-->无用的中间产品'删除'
4 ) 注意'优化网络'请求
5 ) 尽量去用'构建缓存'-->重要(自身帮我们做的)-->看到下载的和实际的不匹配!
6 ) 使用'多阶段'构建镜像-->杀手锏

base image:必须的命令,以及命令(脚本)所需要的对应的动态链接库(ldd)!

案例演示

# (1)一级构建-->临时缓存

FROM rhel7 as build
ADD nginx-1.15.8.tar.gz /mnt
COPY dvd.repo /etc/yum.repos.d/dvd.repo
WORKDIR /mnt/nginx-1.15.8
# 重构rpm数据库,通过&&减少层数,rm-->清理镜像构建的中间产物!
# 取消debug模式!
RUN rpmdb --rebuilddb && yum install -y gcc pcre-devel zlib-devel make && yum clean all && sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc && ./configure --prefix=/usr/local/nginx && make && make install && rm -fr /mnt/nginx-1.15.8

# (2)二级构建

FROM rhel7
COPY --from=build /usr/local/nginx /usr/local/nginx
EXPOSE 80
VOLUME ["/usr/local/nginx/html"]
CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]

说明:上面的方式尽管进行了优化,但是因为底层的bash占的空间太大了,bash环境内有很多东西都是搭建nginx服务用不到的,这样就导致资源的浪费,所以优化base镜像!

说明:基础镜像的优化--->类库的优化

优化基础镜像-->多层构建

FROM nginx as base  # 不指定版本就是nginx:latest
# 补充:如果本地镜像仓库没有,则从远程下载-->前提是做好docker login
# 时区
ARG Asia/Shanghai
#  ldd /usr/sbin/httpd --->参照httpd来理解nginx所需要的动态连接库
RUN mkdir -p /opt/var/cache/nginx && \
        cp -a --parents /usr/lib/nginx /opt && \
        cp -a --parents /usr/share/nginx /opt && \
        cp -a --parents /var/log/nginx /opt && \
        cp -aL --parents /var/run /opt && \
        cp -a --parents /etc/nginx /opt && \
        cp -a --parents /etc/passwd /opt && \
        cp -a --parents /etc/group /opt && \
        cp -a --parents /usr/sbin/nginx /opt && \
        cp -a --parents /lib/x86_64-linux-gnu/libpcre.so.* /opt && \
        cp -a --parents /lib/x86_64-linux-gnu/libz.so.* /opt && \
        cp -a --parents /lib/x86_64-linux-gnu/libc.so.* /opt && \
        cp -a --parents /lib/x86_64-linux-gnu/libdl.so.* /opt && \
        cp -a --parents /lib/x86_64-linux-gnu/libpthread.so.* /opt && \
        cp -a --parents /lib/x86_64-linux-gnu/libcrypt.so.* /opt && \
        cp -a --parents /usr/lib/x86_64-linux-gnu/libssl.so.* /opt && \
        cp -a --parents /usr/lib/x86_64-linux-gnu/libcrypto.so.* /opt && \
        cp /usr/share/zoneinfo/${TIME_ZONE:-ROC} /opt/etc/localtime
# 多个&&-->层压缩!
FROM gcr.io/distroless/base
COPY --from=base /opt /
EXPOSE 80
VOLUME ["/usr/share/nginx/html"] # nginx默认的资源目录
ENTRYPOINT ["nginx", "-g", "daemon off;"]                                          

docker build -t rhel7:v6 .
docker run -d --name vm5 -p 80:80 rhel7:v6
docker history rhel7:v6

# 说明:启动之后(d参数即可)-->看volume --->找到对应的目录-->看到有50.xml和index.html才对!

出错

docker search rhel

Error response from daemon: Get https://index.docker.io/v1/search?

原因

sysctl -a|grep ip_forward

# DNS问题-->网络基础的问题

# 镜像加速器没配好,就试着重新配置镜像加速器,本身的网络问题!

 

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值