在使用容器化部署项目的过程中,我们经常会需要用到 nginx
镜像来作为前端服务的基础镜像,或者作为后端服务的转发和负载均衡。今天我们就一起来看一下如何使用 Dockerfile
构建 nginx
基础镜像。
这里主要介绍三种构建方式:
-
通过
yum
安装方式构建: 无需手动编译安装,可以在联网的情况下直接将 nginx 安装到镜像中,操作较为简单。镜像大小:
271M
-
通过编译源码包方式构建: 需要提前下载官网源码包,安装编译环境并手动编译安装到镜像中,手动配置环境变量,操作较为复杂。
镜像大小:
555M
-
通过直接使用安装包方式构建: 需要提前将官网的源码包编译好,直接拷贝到容器中,手动配置环境变量即可,操作比较简单。
镜像大小:
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
文章来源:https://www.toymoban.com/news/detail-478945.html
整理完毕,完结撒花~ 🌻文章来源地址https://www.toymoban.com/news/detail-478945.html
到了这里,关于Docker学习(二十三)构建 nginx 基础镜像的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!