一、构建一个完整的、可定制的nginx Web服务器Docker镜像

  本次实验将了解nginx从源码到服务的完整流程,学习Linux软件编译安装。掌握Docker最佳实践(镜像分层优化、最小化镜像体积)

  1. 第一阶段:准备环境
mdkir docker  #创建专用目录,隔离工作环境
cd docker/  #进入工作目录

在这里插入图片描述

  1. 第二阶段:编写Dockerfile

Dockerfile
镜像层(Image Layer)是构成 Docker 镜像的基本单位。每个镜像都是由一系列只读的层叠加而成的。这些层中的每一层都代表了文件系统的一个增量变更。当创建一个新的镜像时,Docker 会基于基础镜像添加新的层,每一层包含了对文件系统的修改,如添加、删除或修改文件。

vim Dockerfile
FROM centos:7  #基于centos 7基础镜像
RUN rm -f /etc/yum.repos.d/*  #清空系统默认yum源
COPY CentOS-Base.repo /etc/yum.repos.d/  #替换为国内镜像源
ADD nginx-1.28.0.tar.gz /mnt  #解压nginx源码包到/mnt目录
WORKDIR /mnt/nginx-1.28.0  #切换到源码目录
RUN yum install -y gcc make pcre-devel openssl-devel  #安装编译依赖
RUN sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc  #调试信息,减少体积
RUN ./configure --with-http_ssl_module --with-http_stub_status_module  #配置nginx,启用SSL和状态监控
RUN make
RUN make install
EXPOSE 80
VOLUME ["/usr/local/nginx/html"]
CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]  #前台运行nginx

在这里插入图片描述

因为在这里我们用到了国内镜像源CentOS-Base.repo和nginx源码包,因此要将这两个资源包和Dockerfile放置同一个目录

在这里插入图片描述

  1. 第三阶段:构建镜像
docker build -t webserver:v1 .  #给镜像命名webserver

在这里插入图片描述

  1. 第四阶段:验证镜像
docker images webserver  #查看镜像列表

在这里插入图片描述

docker history webserver:v1  #查看镜像构建历史

在这里插入图片描述

  1. 第五阶段:启动容器
docker container prune  #清理所有停止的容器

在这里插入图片描述

docker run -d --name web1 webserver:v1  #启动容器

在这里插入图片描述

docker inspect web1  #查看容器详情

在这里插入图片描述
自动分配的ip

在这里插入图片描述
访问容器 curl 172.17.0.2
在这里插入图片描述
  在这里,我们已经成功构建了一个完整的nginx Web服务器实现了环境一致、快速部署以及数据持久化。

二、镜像优化

  1. 缩减镜像层
vim Dockerfile
FROM centos:7
RUN rm -f /etc/yum.repos.d/*
COPY CentOS-Base.repo /etc/yum.repos.d/
ADD nginx-1.28.0.tar.gz /mnt
WORKDIR /mnt/nginx-1.28.0
RUN yum install -y gcc make pcre-devel openssl-devel && sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc && ./configure --with-http_ssl_module --with-http_stub_status_module && make && make install && cd .. && rm -fr nginx-1.28.0 && yum clean all
EXPOSE 80
VOLUME ["/usr/local/nginx/html"]
CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]

在这里插入图片描述
2. 构建命令与镜像结果解析

docker build -t webserver:v2 .

在这里插入图片描述

docker images  webserver

在这里插入图片描述

三、多阶段构建Dockerfile

  1. 编译镜像层
vim Dockerfile
FROM centos:7 as build
RUN rm -f /etc/yum.repos.d/*
COPY CentOS-Base.repo /etc/yum.repos.d/
ADD nginx-1.28.0.tar.gz /mnt
WORKDIR /mnt/nginx-1.28.0
RUN yum install -y gcc make pcre-devel openssl-devel && sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc && ./configure --with-http_ssl_module --with-http_stub_status_module && make && make install && cd .. && rm -fr nginx-1.28.0 && yum clean all

FROM centos:7
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;"]

在这里插入图片描述

  1. 构建命令与镜像结果解析
docker build -t webserver:v3 .

在这里插入图片描述

docker images  webserver

在这里插入图片描述

成功!

更多推荐