Docker学习(二十三)构建 nginx 基础镜像
创始人
2025-05-30 19:53:08
0

目录

    • 一、通过 yum 安装方式构建
      • 1.编写 Dockerfile
      • 2.构建 docker 镜像
      • 3.创建 docker 容器(测试)
    • 二、通过编译源码包方式构建
      • 1.编写 Dockerfile
      • 2 构建 docker 镜像
      • 3 创建 docker 容器(测试)
    • 三、通过直接使用安装包方式构建
      • 1.获取安装包
      • 2.编写 Dockerfile
      • 3.构建 docker 镜像
      • 4.创建 docker 容器(测试)

在使用容器化部署项目的过程中,我们经常会需要用到 nginx 镜像来作为前端服务的基础镜像,或者作为后端服务的转发和负载均衡。今天我们就一起来看一下如何使用 Dockerfile 构建 nginx 基础镜像。

这里主要介绍三种构建方式:

  1. 通过 yum 安装方式构建: 无需手动编译安装,可以在联网的情况下直接将 nginx 安装到镜像中,操作较为简单。

    镜像大小:271M

  2. 通过编译源码包方式构建: 需要提前下载官网源码包,安装编译环境并手动编译安装到镜像中,手动配置环境变量,操作较为复杂。

    镜像大小:555M

  3. 通过直接使用安装包方式构建: 需要提前将官网的源码包编译好,直接拷贝到容器中,手动配置环境变量即可,操作比较简单。

    镜像大小:273M

一、通过 yum 安装方式构建

1.编写 Dockerfile

创建一个目录 nginx-base1,创建 Dockerfile 文本文件,输入如下内容:

FROM quay.io/centos/centos:stream9
RUN yum -q -y update && yum -q -y upgrade \&&  yum install -y tzdata vim less ncurses telnet wget zip unzip traceroute procps net-tools iproute tcpdump nginx \&&  ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \&&  yum clean all \&&  echo "alias ls='ls --color'" >> ~/.bashrc \&&  echo "alias ll='ls -l'" >> ~/.bashrc \&&  echo "daemon off;" >> /etc/nginx/nginx.conf
EXPOSE 80
ENTRYPOINT ["nginx"]
CMD ["-c","/etc/nginx/nginx.conf"]

注意: 由于 nginx 命令默认执行完后会转入后台,当使用 docker 容器启动时我们需要 nginx 一直在前台运行,有两种方式:

  • 方法一:在 nginx.conf 末尾追加 "daemon off;"

    echo "daemon off;" >> /etc/nginx/nginx.conf
    
  • 方法二:使用 nginx -g "daemon off;" 方式启动。

    ENTRYPOINT ["nginx","-g","daemon off;"]
    

2.构建 docker 镜像

执行如下命令,构建 docker 镜像:

docker build -t nginx-base1:v1 .

执行结果:(我本地之前已经构建过了,所以比较快)

在这里插入图片描述

查看构建好的镜像:

docker images

执行结果:(镜像大小:271MB)

在这里插入图片描述

3.创建 docker 容器(测试)

执行如下命令,创建 docker 容器:

docker run -d -p 81:80 --name=nginx-base1 nginx-base1:v1

执行结果:

在这里插入图片描述

查看创建好的容器:

docker ps

执行结果:

在这里插入图片描述

访问页面:http://localhost:81

在这里插入图片描述

二、通过编译源码包方式构建

(如果有下载编译好的 Nginx 安装包,可以跳过编译,采用第三种方式,更为便捷)

1.22.1版本编译后Nginx安装包下载地址: https://download.csdn.net/download/qq_33204709/87591370

通过 nginx 官网下载安装包并编译安装教程可以参考:https://blog.csdn.net/qq_33204709/article/details/129632895

1.编写 Dockerfile

FROM quay.io/centos/centos:stream9
# nginx 文件夹名称
ENV NGINX_NAME=nginx-1.22.1
# nginx 源码包路径
ENV NGINX_SRC_DIR=/usr/local/src
# nginx 安装路径
ENV NGINX_HOME=/usr/local/$NGINX_NAME
# 拷贝源码包
ADD nginx-1.22.1.tar.gz $NGINX_SRC_DIR
RUN yum -q -y update && yum -q -y upgrade \# 安装基础组件&& yum install -y tzdata vim less ncurses telnet wget zip unzip traceroute procps net-tools iproute tcpdump \# 安装编译组件&& yum install -y gcc gcc-c++ autoconf automake make openssl openssl-devel pcre pcre-devel zlib-devel \&&  ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \&&  yum clean all \&&  echo "alias ls='ls --color'" >> ~/.bashrc \&&  echo "alias ll='ls -l'" >> ~/.bashrc \# 配置基本信息&& cd $NGINX_SRC_DIR/$NGINX_NAME && ./configure --prefix=$NGINX_HOME --with-http_ssl_module --with-http_stub_status_module \# 编译安装&& cd $NGINX_SRC_DIR/$NGINX_NAME && make && make install
# 配置环境变量
ENV PATH=$PATH:$NGINX_HOME/sbin
EXPOSE 80
ENTRYPOINT ["nginx","-g","daemon off;"]
CMD ["-c","conf/nginx.conf"]

2 构建 docker 镜像

执行如下命令,构建 docker 镜像:

docker build -t nginx-base2:v1 .

执行结果:(耗时较长,我本地执行了11分钟)

在这里插入图片描述

查看构建好的镜像:

docker images

执行结果:(镜像大小:555MB)

在这里插入图片描述

3 创建 docker 容器(测试)

执行如下命令,创建 docker 容器:

docker run -d -p 82:80 --name=nginx-base2 nginx-base2:v1

执行结果:

在这里插入图片描述

查看创建好的容器:

docker ps --no-tunc

执行结果:

在这里插入图片描述

访问页面:http://localhost:82

在这里插入图片描述

三、通过直接使用安装包方式构建

这里的安装包指的是通过源码包编译安装后的文件夹打包。

1.获取安装包

(如果有下载编译好的 Nginx 安装包,可以跳过此步)

1.22.1版本编译后Nginx安装包下载地址: https://download.csdn.net/download/qq_33204709/87591370

我这里是将第二种方式构建好的安装包直接导出到本地,用作以后构建使用。(如果有其他方式获取,欢迎评论学习)

将安装目录压缩打包命令如下:

tar -zcvf nginx-1.22.1-install.tar.gz nginx-1.22.1

执行结果:

在这里插入图片描述

将压缩包从容器复制到本地命令:

docker cp nginx-base2:/usr/local/nginx-1.22.1-install.tar.gz .

2.编写 Dockerfile

FROM quay.io/centos/centos:stream9
# 基础目录
ENV BASE_DIR=/usr/local
# nginx 安装路径
ENV NGINX_HOME=$BASE_DIR/nginx-1.22.1
# 拷贝安装包
ADD nginx-1.22.1-install.tar.gz $BASE_DIR
RUN yum -q -y update && yum -q -y upgrade \# 安装基础组件&& yum install -y tzdata vim less ncurses telnet wget zip unzip traceroute procps net-tools iproute tcpdump \&&  ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \&&  yum clean all \&&  echo "alias ls='ls --color'" >> ~/.bashrc \&&  echo "alias ll='ls -l'" >> ~/.bashrc
# 配置环境变量
ENV PATH=$PATH:$NGINX_HOME/sbin
EXPOSE 80
ENTRYPOINT ["nginx","-g","daemon off;"]
CMD ["-c","conf/nginx.conf"]

3.构建 docker 镜像

执行如下命令,构建 docker 镜像:

docker build -t nginx-base3:v1 .

执行结果:

在这里插入图片描述

查看构建好的镜像:

docker images

执行结果:(镜像大小:273MB)

在这里插入图片描述

4.创建 docker 容器(测试)

执行如下命令,创建 docker 容器:

docker run -d -p 83:80 --name=nginx-base3 nginx-base3:v1

执行结果:

在这里插入图片描述

访问页面:http://localhost:83

在这里插入图片描述

整理完毕,完结撒花~ 🌻

相关内容

热门资讯

linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
C++ 机房预约系统(六):学... 8、 学生模块 8.1 学生子菜单、登录和注销 实现步骤: 在Student.cpp的...
JAVA多线程知识整理 Java多线程基础 线程的创建和启动 继承Thread类来创建并启动 自定义Thread类的子类&#...
【洛谷 P1090】[NOIP... [NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G ...
国民技术LPUART介绍 低功耗通用异步接收器(LPUART) 简介 低功耗通用异步收发器...
城乡供水一体化平台-助力乡村振... 城乡供水一体化管理系统建设方案 城乡供水一体化管理系统是运用云计算、大数据等信息化手段࿰...
程序的循环结构和random库...   第三个参数就是步长     引入文件时记得指明字符格式,否则读入不了 ...
中国版ChatGPT在哪些方面... 目录 一、中国巨大的市场需求 二、中国企业加速创新 三、中国的人工智能发展 四、企业愿景的推进 五、...
报名开启 | 共赴一场 Flu... 2023 年 1 月 25 日,Flutter Forward 大会在肯尼亚首都内罗毕...
汇编00-MASM 和 Vis... Qt源码解析 索引 汇编逆向--- MASM 和 Visual Studio入门 前提知识ÿ...
【简陋Web应用3】实现人脸比... 文章目录🍉 前情提要🌷 效果演示🥝 实现过程1. u...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
windows安装JDK步骤 一、 下载JDK安装包 下载地址:https://www.oracle.com/jav...
分治法实现合并排序(归并排序)... 🎊【数据结构与算法】专题正在持续更新中,各种数据结构的创建原理与运用✨...
在linux上安装配置node... 目录前言1,关于nodejs2,配置环境变量3,总结 前言...
Linux学习之端口、网络协议... 端口:设备与外界通讯交流的出口 网络协议:   网络协议是指计算机通信网...
Linux内核进程管理并发同步... 并发同步并发 是指在某一时间段内能够处理多个任务的能力,而 并行 是指同一时间能够处理...
opencv学习-HOG LO... 目录1. HOG(Histogram of Oriented Gradients,方向梯度直方图)1...
EEG微状态的功能意义 导读大脑的瞬时全局功能状态反映在其电场结构上。聚类分析方法一致地提取了四种头表面脑电场结构ÿ...
【Unity 手写PBR】Bu... 写在前面 前期积累: GAMES101作业7提高-实现微表面模型你需要了解的知识 【技...