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

这篇具有很好参考价值的文章主要介绍了Docker学习(二十三)构建 nginx 基础镜像。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在使用容器化部署项目的过程中,我们经常会需要用到 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 基础镜像

查看构建好的镜像:

docker images

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

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

3.创建 docker 容器(测试)

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

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

执行结果:

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

查看创建好的容器:

docker ps

执行结果:

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

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

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

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

(如果有下载编译好的 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 基础镜像

查看构建好的镜像:

docker images

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

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

3 创建 docker 容器(测试)

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

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

执行结果:

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

查看创建好的容器:

docker ps --no-tunc

执行结果:

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

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

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

三、通过直接使用安装包方式构建(推荐)

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

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学习(二十三)构建 nginx 基础镜像

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

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 基础镜像

查看构建好的镜像:

docker images

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

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

4.创建 docker 容器(测试)

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

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

执行结果:

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

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

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

整理完毕,完结撒花~ 🌻文章来源地址https://www.toymoban.com/news/detail-478945.html

到了这里,关于Docker学习(二十三)构建 nginx 基础镜像的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Linux|Docker】以CentOS 7为基础镜像制作一个目标镜像(Nginx)

    ==== 需要哪些东西? 1.nginx的安装脚本 install_nginx.sh 源码 https://nginx.org/download/nginx-1.23.3.tar.gz 2.Dockerfile 3.1 准备环境,新建目录 3.2 编写一个编译安装nginx的脚本 为了提高效率,编写一个脚本执行,一次性编译安装好! vim install_nginx.sh 脚本文件内容如下: 3.3 编写Dockerfile 编写

    2024年02月14日
    浏览(47)
  • Docker基础入门:容器数据卷与Dockerfile构建镜像(发布)

    💖The Begin💖点点关注,收藏不迷路💖 1、完成数据持久化和共享数据,docker容器中的数据,同步到本地。 2、重要数据back_up 特点: 实时生效、数据卷可在容器之间共享和重用数据、数据卷中的更改不会包含在镜像更新中、数据卷的生命周期会一直延续到没有容器使用它为止

    2024年02月10日
    浏览(52)
  • Docker基础(镜像的结构,Dockerfile语法介绍,基于Ubuntu镜像来构建一个Java应用)

    要想自己构建镜像,必须先了解镜像的结构。 镜像之所以能让我们快速跨操作系统部署应用而忽略其运行环境、配置,就是因为镜像中包含了程序运行需要的系统函数库、环境、配置、依赖。 因此,自定义镜像本质就是依次准备好程序运行的基础环境、依赖、应用本身、运

    2024年02月20日
    浏览(47)
  • Docker容器学习:Dockerfile制作Web应用系统nginx镜像

    目录 编写Dockerfile 1.文件内容需求: 2.编写Dockerfile: 3.开始构建镜像  4.现在我们运行一个容器,查看我们的网页是否可访问 推送镜像到私有仓库 1.把要上传的镜像打上合适的标签 2.登录harbor仓库 3.上传镜像 1.文件内容需求: 基于centos基础镜像。 指定作者信息。 安装nginx服

    2024年02月11日
    浏览(75)
  • CENTO OS上的网络安全工具(二十三)VSCODE SPARK 容器式编程环境构建

           在vscode上使用maven构建spark的scala编程环境,很大程度上需要不断地从网络上下载各种依赖和插件,而且这一过程复杂而不可控。下面这段,是整个安装过程中/root目录下不断增加的内容。         另一方面,vscode的离线安装也需要匹配容器中code与外部code的版本。所以

    2024年02月13日
    浏览(73)
  • 二十三种设计模式全面解析-桥接模式的高级应用:构建灵活的跨平台UI框架

    在软件开发的世界中,桥接模式(Bridge Pattern)作为一种设计模式,旨在将抽象部分与实现部分分离,从而使它们可以独立地变化。这一模式的应用不仅有助于提高代码的可维护性,还在一些复杂的场景中展现出其真正的价值。 前面一篇文章中,我们介绍了什么是桥接模式?

    2024年02月05日
    浏览(45)
  • WebRTC入门:基础的核心协议与概念(二十三)

    简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏: Audio工程师进阶系列 【 原创干货持续更新中…… 】🚀 优质专栏: 多媒体系统工程师系列 【 原创干货持续更新中…… 】🚀 人生格言: 人生从来没有捷径

    2024年01月17日
    浏览(44)
  • opencv_c++学习(二十三)

    拟合含义如上图,即为通过已知点去拟合一条直线或者一个多边形。 直线拟合函数: points:输入待拟合直线的2D或者3D点集。 line:输出描述直线的参数,2D点集描述参数为Vec4f类型,3D点集描述参数为Vec6f类型。 distType: M-estimator算法使用的距离类型标志。 param:某些类型距离的数

    2024年02月06日
    浏览(35)
  • linux学成之路(基础篇(二十三)MySQL服务(中)

    目录 MySQL服务之SQL语句 一、SQL语句类型 一、 DDL语句 二、DML语句 三、DCL语句 四、DQL 语句 二、 数据库操作 一、查看 二、创建 三、进入  四、删除数据库 五、更改数据库名称 六、更改字符集 三、数据表管理 一、数据类型 一、数值类型 TINYINT SMALLINT INT BIGINT FLOAT(M,D) 二、

    2024年02月15日
    浏览(45)
  • TensorFlow入门(二十三、退化学习率)

    学习率         学习率,控制着模型的学习进度。模型训练过程中,如果学习率的值设置得比较大,训练速度会提升,但训练结果的精度不够,损失值容易爆炸;如果学习率的值设置得比较小,精度得到了提升,但训练过程会耗费太多的时间,收敛速度慢,同时也容易出现过拟合的情况。

    2024年02月07日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包