Docker学习(二十三)构建 nginx 基础镜像

目录

    • 一、通过 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学习(二十三)构建 nginx 基础镜像_第1张图片

查看构建好的镜像:

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学习(二十三)构建 nginx 基础镜像_第2张图片

查看构建好的镜像:

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学习(二十三)构建 nginx 基础镜像_第3张图片

查看构建好的镜像:

docker images

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

在这里插入图片描述

4.创建 docker 容器(测试)

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

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

执行结果:

在这里插入图片描述

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

Docker学习(二十三)构建 nginx 基础镜像_第4张图片

整理完毕,完结撒花~

你可能感兴趣的:(Docker,docker,nginx,学习)