docker镜像优化

**方法****1.**缩减镜像层

下载nginx安装包

cpp 复制代码
[root@docker1 ~]# mkdir docker
[root@docker1 ~]# cd docker/
[root@docker1 ~]# wget http://nginx.org/download/nginx-1.23.4.tar.gz

编写Dockerfile文件

cpp 复制代码
[root@docker1 docker]# vim Dockerfile
FROM centos-7:repo
LABEL Creater=xu
ADD nginx-1.23.4.tar.gz /root
RUN yum install gcc make pcre-devel openssl-devel -y
WORKDIR /root/nginx-1.23.4
RUN ./configure --with-http_ssl_module --with-http_stub_status_module
RUN make
RUN make install
EXPOSE 80
VOLUME ["/usr/local/nginx/html"]
CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]

构建镜像并查看镜像内存

此时webservers是507MB

cpp 复制代码
[root@docker1 docker]# docker build -t webservers:v1 .

[root@docker1 docker]# docker images
                                                                      i Info →   U  In Use
IMAGE                       ID             DISK USAGE   CONTENT SIZE   EXTRA
webservers:v1               eb995ce40600        507MB          132MB    U

开始缩减镜像层

编写Dockerfile文件

cpp 复制代码
[root@docker1 docker]# vim Dockerfile
FROM centos-7:repo
LABEL Creater=lee
ADD nginx-1.23.4.tar.gz /root
WORKDIR /root/nginx-1.23.4
RUN yum install gcc make pcre-devel openssl-devel -y && ./configure --with-http_ssl_module --with-http_stub_status_module && make && make install && rm -fr /root/nginx-1.23.4 && yum clean all
EXPOSE 80
VOLUME ["/usr/local/nginx/html"]
CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]

构建镜像并查看镜像内存

此时镜像缩减了内存

cpp 复制代码
[root@docker1 docker]# docker build -t webservers:v2 .

[root@docker1 docker]# docker images
                                                                      i Info →   U  In Use
IMAGE                       ID             DISK USAGE   CONTENT SIZE   EXTRA
webservers:v1               eb995ce40600        507MB          132MB    U
webservers:v2               70f821210f3f        425MB          109MB

**方法****2.**多阶段构建

cpp 复制代码
[root@docker1 docker]# docker build -t webservers:v3 .
FROM centos-7:repo AS xu
LABEL Creater=xu
# 这里改成了 nginx-1.23.4.tar.gz
ADD nginx-1.23.4.tar.gz /root
WORKDIR /root/nginx-1.23.4
RUN yum install gcc make pcre-devel openssl-devel -y && ./configure --with-http_ssl_module --with-http_stub_status_module && make && make install && rm -fr /root/nginx-1.23.4 && yum clean all

FROM centos-7:repo
COPY --from=xu /usr/local/nginx /usr/local/nginx
EXPOSE 80
VOLUME ["/usr/local/nginx/html"]
CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]

查看镜像内存

cpp 复制代码
[root@docker1 docker]# docker images
                                                                                                    i Info →   U  In Use
IMAGE                       ID             DISK USAGE   CONTENT SIZE   EXTRA
webservers:v2               70f821210f3f        425MB          109MB
webservers:v3               3eea800fee90        308MB           79MB #此时镜像内存再一次减小

**方法****3.**使用最精简镜像

使用google提供的最精简镜像

**下载地址:**https://github.com/GoogleContainerTools/distroless

https://nginx.org/download/nginx-1.23.4.tar.gz

**下载镜像:**docker pull gcr.io/distroless/base

效果展示,下载完之后记得引入镜像

cpp 复制代码
[root@docker1 ~]# docker load -i nginx-1.23.tar.gz
[root@docker1 ~]# docker load -i debian11.tar.gz
cpp 复制代码
[root@docker1 docker]# docker images
                                                                                                    i Info →   U  In Use
IMAGE                                    ID             DISK USAGE   CONTENT SIZE   EXTRA
nginx:1.23                               a087ed751769        301MB          147MB

编写Dockerfile文件

cpp 复制代码
[root@docker1 docker]# vim Dockerfile
FROM nginx:1.23 AS xu
ARG TIME_ZONE
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 /usr/sbin/nginx-debug /opt && \
    cp -a --parents /lib/x86_64-linux-gnu/ld-* /opt && \
    cp -a --parents /usr/lib/x86_64-linux-gnu/libpcre* /opt && \
    cp -a --parents /lib/x86_64-linux-gnu/libz.so.* /opt && \
    cp -a --parents /lib/x86_64-linux-gnu/libc* /opt && \
    cp -a --parents /lib/x86_64-linux-gnu/libdl* /opt && \
    cp -a --parents /lib/x86_64-linux-gnu/libpthread* /opt && \
    cp -a --parents /lib/x86_64-linux-gnu/libcrypt* /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-debian11
COPY --from=xu /opt /
EXPOSE 80 443
ENTRYPOINT ["nginx", "-g", "daemon off;"]

构建镜像并查看镜像内存

cpp 复制代码
[root@docker1 docker]# docker build -t webservers:v4 .

[root@docker1 docker]# docker images
                                                                                                    i Info →   U  In Use
IMAGE                                    ID             DISK USAGE   CONTENT SIZE   EXTRA
nginx:1.23                               a087ed751769        301MB          147MB
webservers:v4                            1cbeee625c56       67.9MB         28.4MB
相关推荐
readhere7 小时前
从ZYNQ7000开发板,学会启动嵌入式Linux系统——入门学习:EBAZ4205篇目录
linux·启动·嵌入式linux·zynq7000·ebaz4205
打工仔折腾 AI8 小时前
在 Ubuntu ARM64 部署 Q1 V3.0 MuJoCo 模型:加载、单步推理与执行器响应解析
linux·运维·人工智能·python·深度学习·ubuntu·性能优化
yyuuuzz8 小时前
跨境站点日志时区混乱的排查记录
运维·服务器·网络·云计算·aws·1024程序员节
‎ദ്ദിᵔ.˛.ᵔ₎8 小时前
关于Linux 线程局部存储的认识
linux·运维
GlobalInfo8 小时前
全球及中国风电叶片检测机器人行业研究报告(2026版):市场现状、行业前景与占有率分析
运维·网络·人工智能·机器人
隔窗听雨眠10 小时前
KingbaseES平替全链路实践:从迁移评估到可持续运维
运维
skywalk816310 小时前
登到192.168.1.5那台机器,看看今天白天,大约从早晨到晚上,都卡住了。看看因为什么卡住,为什么卡住而没有杀死那个导致卡死的进程,为什么
运维·系统·freebsd
运维行者_10 小时前
网络监控工具怎么选?从设备监控到智能运维的能力清单
运维·服务器·开发语言·网络·人工智能·支持向量机·php
小小de风呀10 小时前
de风——【从零开始学习Linux】(九):进程基础 —— 从冯诺依曼体系到 fork 创建进程
linux·学习