Docker安装最新稳定版Nginx(分析版本选择问题和分享踩坑过程)

这篇具有很好参考价值的文章主要介绍了Docker安装最新稳定版Nginx(分析版本选择问题和分享踩坑过程)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、前言

  Nginx官方安装包下载地址:
  http://nginx.org/en/download.html

 
  Docker Hub官方网址:
  https://hub.docker.com/

 
  如果需要了解Centos7下Docker的安装部署,可参考教程【最新Docker在Centos7下安装部署(参考官方教程文档)】。
 
  拉取Nginx Docker版镜像的最简单的命令是:docker pull nginx ,麻烦一点写法是 docker pull nginx:1.22.1 ,后面带一个版本号,拉取指定版本的镜像。如果看一些博文,教程里面就是这么写的,难道有错?没错,这样写是可以的,但是,那些博主可不会告知你们,如何区分版本,Docker Hub中Nginx是有很多版本类型的,他们也未必研究过Docker中Nginx各版本的区别,只是照搬官方的写法而已!
 
  本教程除了详细指导在Docker中安装最新稳定版Nginx过程,还分析一些版本选择问题,网上基本很少或没有相关博文讨论过Docker中Nginx版本的选择问题。最后还有踩坑过程也分享出来。如果各位读者有更好的见解,可以关注 @大白有点菜 或在评论中交流,互相学习进步。
 

  本文由 @大白有点菜 原创,请勿盗用,转载请说明出处!如果觉得文章还不错,请点点赞,加关注,谢谢!
 

二、版本选择问题分析

 

1、先来分析Docker中Nginx各版本选择问题。读者如果觉得这部分没意思,可跳过,直接看后面的安装步骤。【 跳转到安装部署部分】

(1)浏览Docker Hub网址,即Docker的仓库,搜索关键字 nginx 查找Nginx的版本(和官方Nginx的版本是同步的)。
 
Docker安装最新稳定版Nginx(分析版本选择问题和分享踩坑过程)
 
(2)点击第一个,进入到 Nginx 相关页面,包括一些 版本介绍安装教程在页面的下半部分)。

https://hub.docker.com/_/nginx

 
Docker安装最新稳定版Nginx(分析版本选择问题和分享踩坑过程) 
Docker安装最新稳定版Nginx(分析版本选择问题和分享踩坑过程)

 
(3)怎么这么多版本啊,有纯数字的,有纯英文单词的,有几个单词拼接一起的,也有数字拼单词的,看得眼花缭乱,如何选择?先关注两个关键词语:mainlinestable

  • mainline主线版,即开发版,学习环境可以使用,生产环境建议不要使用
  • stable稳定版,学习环境和生产环境都可使用

(4)切换到“Tags”标签,看看Nginx的具体版本,按最新版本排序。
 
Docker安装最新稳定版Nginx(分析版本选择问题和分享踩坑过程)
 
Docker安装最新稳定版Nginx(分析版本选择问题和分享踩坑过程) 
Docker安装最新稳定版Nginx(分析版本选择问题和分享踩坑过程) 
(5)本教程的核心是安装最新稳定版Nginx,mainline版不过多介绍,主要介绍stable版。目前官网上有四个稳定版本:stable-perlstable-alpine-perlstable-alpinestable 。它们有什么区别呢?从稳定版本名称分解得到两个单词:alpineperl ,这两个单词又代表什么意思呢?

  • alpine:即 Alpine Linux,是一个轻量级Linux发行版系统。
  • perl:计算机编程语言,内部集成了正则表达式的功能,以及巨大的第三方代码库CPAN。

【百度百科解释 Alpine Linux】
Docker安装最新稳定版Nginx(分析版本选择问题和分享踩坑过程) 
【维基百科解释 Alpine Linux】
Docker安装最新稳定版Nginx(分析版本选择问题和分享踩坑过程) 
【百度百科解释 Perl】
Docker安装最新稳定版Nginx(分析版本选择问题和分享踩坑过程)
 
【维基百科解释 Perl】
Docker安装最新稳定版Nginx(分析版本选择问题和分享踩坑过程) 
Docker安装最新稳定版Nginx(分析版本选择问题和分享踩坑过程)
 
Docker安装最新稳定版Nginx(分析版本选择问题和分享踩坑过程) 
  从上面的专业解释可以作出以下猜测

  • stable-perl:包含最新的perl模块的稳定版,适合安装在Centos上。
  • stable-alpine-perl:包含最新的perl模块的稳定版,适合安装在Alpine Linux上。
  • stable-alpine:不包含perl模块的稳定版,适合安装在Alpine Linux上。
  • stable:包含最新的perl模块的稳定版,适合安装在Centos上。

  猜测是正确的吗?查阅资料可知,perl模块是默认安装在Centos系统上的,如下,版本为 v5.16.3 。
 
Docker安装最新稳定版Nginx(分析版本选择问题和分享踩坑过程)
 

2、创建四个stable版本容器。

(1)在Docker Hub官网对应的Nginx页面,有个描述是关于 nginx:<version>-perlnginx:<version>-alpine-perlnginx:<version>-alpine 的,截图如下,顺便附上谷歌翻译后的截图:
 
Docker安装最新稳定版Nginx(分析版本选择问题和分享踩坑过程)
 
Docker安装最新稳定版Nginx(分析版本选择问题和分享踩坑过程) 
(2)按官方说法,版本名称不带后缀“-perl”的,默认镜像从Nginx-v1.13.0(主线版)和Nginx-v1.12.0(稳定版)开始移除了 perl 模块,是这样吗?后缀带有“-alpine”的版本适用于 Alpine Linux ,但在Centos7下能用吗?两者都验证一下吧。
 
1)拉取4个稳定版本的镜像。

docker pull nginx:stable
docker pull nginx:stable-perl
docker pull nginx:stable-alpine
docker pull nginx:stable-alpine-perl

2)查看下载的镜像。

docker images

Docker安装最新稳定版Nginx(分析版本选择问题和分享踩坑过程)
 
3)创建 stable 版的容器 nginx-s,映射端口设置为 8111,进入容器查看 perl 模块是否存在。发现 perl 模块是存在的,版本为 v5.32.1
 
后台(-d)方式运行一个容器(nginx-s),将端口 8111 映射到容器的 80 端口:

docker run --name nginx-s -p 8111:80 -d nginx:stable

查看容器运行情况:

docker ps

进入到容器中(/bin/bash):

docker exec -it 732 /bin/bash

查看 perl 模块版本:

perl -v

命令 exit 退出容器:

exit

Docker安装最新稳定版Nginx(分析版本选择问题和分享踩坑过程) 
4)创建 stable-perl 版的容器 nginx-sp,映射端口设置为 8222,进入容器查看 perl 模块是否存在。发现 perl 模块是存在的,版本也为 v5.32.1
 
后台(-d)方式运行一个容器(nginx-sp),将端口 8222 映射到容器的 80 端口:

docker run --name nginx-sp -p 8222:80 -d nginx:stable-perl

查看容器运行情况:

docker ps

进入到容器中(/bin/bash):

docker exec -it 840 /bin/bash

查看 perl 模块版本:

perl -v

命令 exit 退出容器:

exit

Docker安装最新稳定版Nginx(分析版本选择问题和分享踩坑过程) 
5)可以创建 stable-alpine 版的容器 nginx-sa 并运行吗?那就试试,映射端口设置为 8333 ,可以运行的话就进入容器查看 perl 模块是否存在。经验证,此版本的Docker容器可以在Centos7运行。发现 perl 模块是不存在的,镜像中移除了 perl 模块。
 
后台(-d)方式运行一个容器(nginx-sa),将端口 8333 映射到容器的 80 端口:

docker run --name nginx-sa -p 8333:80 -d nginx:stable-alpine

查看容器运行情况:

docker ps

进入到容器中(/bin/sh),此处和 stable、stable-perl 进入容器的方式不一样

docker exec -it 907 /bin/sh

查看 perl 模块版本:

perl -v

命令 exit 退出容器:

exit

Docker安装最新稳定版Nginx(分析版本选择问题和分享踩坑过程)
 
6)创建 stable-alpine-perl 版的容器 nginx-sap ,映射端口设置为 8444 ,进入容器查看 perl 模块是否存在。发现 perl 模块是存在的,版本为 v5.34.1
 
后台(-d)方式运行一个容器(nginx-sap),将端口 8444 映射到容器的 80 端口:

docker run --name nginx-sap -p 8444:80 -d nginx:stable-alpine-perl

查看容器运行情况:

docker ps

进入到容器中(/bin/sh),此处和 stable、stable-perl 进入容器的方式不一样

docker exec -it 0ec /bin/sh

查看 perl 模块版本:

perl -v

命令 exit 退出容器:

exit

Docker安装最新稳定版Nginx(分析版本选择问题和分享踩坑过程)
 

3、大概对比Nginx这四个stable版本的差异。

总结如下:
 
(1)笔者专业技能有限,无法看出 stable 版 和 stable-perl 版有什么区别,官方说好的 stable 版从 v1.12.0 开始,在默认镜像中移除了 perl 模块,怎么 stable 版的还存在?是笔者误读了官方的说法吗?
 
(2)stable-alpine 版确实移除perl 模块。
 
(3)stable-alpine-perl 版存在 perl 模块,且版本很新。
 
(4)stable-alpine 版和 stable-alpine-perl 版都可以运行在Centos7上,常不常用,笔者阅历有限,无法给出专业说法。
 

4、版本选择(求稳不求新)。

  无论是生产环境,还是工作、学习环境,都尽量使用稳定版去开发!Java开发中使用很多中间件,不求新(最新版),只求稳(稳定版),不然容易出现问题,排查困难。
 
  当然,旧版本也是存在问题的,有些bug会很致命,尽量跨小版本升级,主要是修复bug。跨大版本升级可能导致各种问题,不建议这么做。什么是大小版本?例如,MySQL5.7有很多版本MySQL5.7.x,属于跨小版本;从MySQL5升级到MySQL8,就是跨大版本。
 
  可以去Nginx官网查看最新的稳定版本(Stable version),使用 docker pull nginx:1.22.1 命令拉取最新稳定版镜像,也可以使用 docker pull nginx:stable 拉取,不用考虑输入版本号。
 
Docker安装最新稳定版Nginx(分析版本选择问题和分享踩坑过程) 

5、分析镜像各版本名称。

(1)Docker Hub上,Nginx的版本名称这么多,难道都是不同的版本?其实不是,官方页面展示出一些规律,同一个镜像ID的,都放在同一行,就像 1.23.2, mainline, 1, 1.23, latest ,看起来名称都不一样,其实镜像就是同一个的。不信?那就验证呗!
Docker安装最新稳定版Nginx(分析版本选择问题和分享踩坑过程)
 
(2)依次拉取不同版本号的镜像,以拉取 1.23.2 系列为例。如果nginx后面不跟版本号,默认拉取的是最新的版本,即 latest 版本。镜像ID(IMAGE ID)都一样,说明就是同一个版本

docker pull nginx
docker pull nginx:1.23.2
docker pull nginx:mainline
docker pull nginx:1
docker pull nginx:1.23
docker pull nginx:latest

Docker安装最新稳定版Nginx(分析版本选择问题和分享踩坑过程) 
Docker安装最新稳定版Nginx(分析版本选择问题和分享踩坑过程)
 

三、安装部署

 
  前面的版本选择问题分析好无聊啊,还是直接安装部署更过瘾。
 

1、创建三个目录,用作容器的卷(Volume),这步骤不能少。什么是卷?后面会说明。
mkdir -p /mydata/nginx/conf
mkdir -p /mydata/nginx/log
mkdir -p /mydata/nginx/html

Docker安装最新稳定版Nginx(分析版本选择问题和分享踩坑过程)
 

2、笔者当时也是看了一些博文教程,操作过程中踩了坑,特来分享踩坑过程,如下步骤是错误的操作,先演示看效果,再来分析问题。

(1)创建一个简单的容器运行,映射端口为 8099 ,看看有没有报错或者网络问题。

docker run --name nginx -p 8099:80 -d nginx:stable

Docker安装最新稳定版Nginx(分析版本选择问题和分享踩坑过程) 
(2)浏览器输入 192.168.56.10:8099 并回车,这是虚拟机Centos7的IP地址。正常访问到 Nginx 。
 
Docker安装最新稳定版Nginx(分析版本选择问题和分享踩坑过程) 
(3)停止容器后,再删除这个简单的容器,因为下一步要重新创建一个容器,把第一步新建的三个目录配置为容器的卷去运行。想要优雅地删除容器,可参考教程【如何优雅地删除Docker镜像和容器(超详细)】。创建的容器的映射端口为 8066

docker run --name nginx -v /mydata/nginx/conf:/etc/nginx/conf.d -v /mydata/nginx/log:/var/log/nginx -v /mydata/nginx/html:/usr/share/nginx/html -p 8066:80 -d nginx:stable

Docker安装最新稳定版Nginx(分析版本选择问题和分享踩坑过程)
 
(4)nginx:stable 容器能正常运行,在浏览器输入 192.168.56.10:8066 并回车,发现居然报错了,什么情况???
 
Docker安装最新稳定版Nginx(分析版本选择问题和分享踩坑过程) Docker安装最新稳定版Nginx(分析版本选择问题和分享踩坑过程) 
(4)查看 /mydata/nginx/html 目录下有没有 index.html 文件,同时进入到容器中看看 /usr/share/nginx/html/ 目录有没有对应的 index.html 文件。发现两者都没有 index.html 文件。
 
Docker安装最新稳定版Nginx(分析版本选择问题和分享踩坑过程)
 
Docker安装最新稳定版Nginx(分析版本选择问题和分享踩坑过程)

 

3、前面操作中,运行一个配置有卷(Volume)的容器为什么会访问不到页面呢,而运行简单的容器却可以访问呢?

(1)什么是卷(Volume)?命令 docker -v 中的“-v”就是这个卷,“-v”只是“--volume”的简写。
 
  Docker官方文档解释的含义:https://docs.docker.com/storage/volumes/
 
  来几张原文截图,并附上谷歌翻译后的截图
 
Docker安装最新稳定版Nginx(分析版本选择问题和分享踩坑过程) 
Docker安装最新稳定版Nginx(分析版本选择问题和分享踩坑过程)
 
Docker安装最新稳定版Nginx(分析版本选择问题和分享踩坑过程)
 
Docker安装最新稳定版Nginx(分析版本选择问题和分享踩坑过程)
 
Docker安装最新稳定版Nginx(分析版本选择问题和分享踩坑过程)
 
Docker安装最新稳定版Nginx(分析版本选择问题和分享踩坑过程)
 
Docker安装最新稳定版Nginx(分析版本选择问题和分享踩坑过程) 
Docker安装最新稳定版Nginx(分析版本选择问题和分享踩坑过程)
 
(2)从官方文档对 卷(Volume) 的介绍可以看出,是有别于常见的 绑定挂载(bind mounts) 的,两者作用类似,只是使用卷(Volume)会更好,官方更推荐使用“-v”方式而不是“--mount”。前面创建的Nginx三个目录 confloghtml 分别与Nginx容器中:/etc/nginx/conf.d/var/log/nginx/usr/share/nginx/html 作为 的方式关联在一起,可以理解为挂载在一起了,达到共享文件的目的。卷的默认权限是读写,如果在后面加上“:ro”,代表只读,即容器对卷的权限只能读取文件。
 
(3)前面的运行的容器为什么找不到网页呢?因为本地的创建的 html 目录里面没有任何文件啊,作为共享目录,容器里面 /usr/share/nginx/html 肯定也是空目录啊! 有解决方法吗?那当然,下面的步骤就是正确操作。
 

4、正确地创建Nginx容器。

(1)创建一个更简单的容器,不用映射端口,因为后面还要删除该容器,只是临时有用。

docker run --name nginx -d nginx:stable

Docker安装最新稳定版Nginx(分析版本选择问题和分享踩坑过程) 
(2)进入到容器中,看看 /etc/nginx/ 、/var/log/ 、/usr/share/nginx/html/ 这三个目录都有些什么文件,因为要关联本地创建的Nginx相关的 conf、log、html 三个目录。
 
Docker安装最新稳定版Nginx(分析版本选择问题和分享踩坑过程) 

  • /etc/nginx:conf.dnginx.conf
  • /var/log/:nginx
  • /usr/share/nginx/html/:50x.htmlindex.html
  • /etc/nginx/conf.d:default.conf

 
(3)从容器中复制 /usr/share/nginx/html 目录所有文件到 /mydata/nginx 目录下,复制配置文件 /etc/nginx/nginx.conf/mydata/nginx/conf 目录下,复制 /etc/nginx/conf.d 目录所有文件到 /mydata/nginx/conf 目录下。

docker cp nginx:/usr/share/nginx/html /mydata/nginx
docker cp nginx:/etc/nginx/nginx.conf /mydata/nginx/conf
docker cp nginx:/etc/nginx/conf.d /mydata/nginx/conf

Docker安装最新稳定版Nginx(分析版本选择问题和分享踩坑过程)

 
(4)删除那个简单的容器。先停止,后删除。想要优雅地删除容器,可参考教程【如何优雅地删除Docker镜像和容器(超详细)】。
 
Docker安装最新稳定版Nginx(分析版本选择问题和分享踩坑过程)
 
(5)创建新的容器,配置指定目录和文件为卷。配置文件 nginx.conf 和目录 html 都是只读权限 :ro。发现容器是能正常运行的。

docker run --name nginx -v /mydata/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:ro -v /mydata/nginx/conf/conf.d:/etc/nginx/conf.d -v /mydata/nginx/log:/var/log/nginx -v /mydata/nginx/html:/usr/share/nginx/html:ro -p 80:80 -d nginx:stable

Docker安装最新稳定版Nginx(分析版本选择问题和分享踩坑过程) 
(6)浏览器输入 192.168.56.10 并回车,熟悉的页面回来了!
 
Docker安装最新稳定版Nginx(分析版本选择问题和分享踩坑过程) 

5、设置容器自启动。
docker update --restart=always nginx

Docker安装最新稳定版Nginx(分析版本选择问题和分享踩坑过程) 

6、容器的启动、停止、删除、重新启动、查看运行状态。

(1)启动容器

docker start nginx

docker start 容器ID

(2)停止容器

docker stop nginx

docker stop 容器ID

(3)删除容器

docker rm nginx

docker rm 容器ID

(4)重新启动容器

docker restart nginx

docker restart 容器ID

(5)查看容器运行状态
 
查看所有容器的运行状态,包括运行的和停止的

docker ps -a

查看所有运行中的容器的状态,不包括停止的

docker ps

 文章来源地址https://www.toymoban.com/news/detail-411819.html

到了这里,关于Docker安装最新稳定版Nginx(分析版本选择问题和分享踩坑过程)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • OpenEuler22.03安装最新版本Docker

    操作系统环境如下: 操作系统:OpenEuler 22.03 LTS 安装方式:最小化安装 在操作系统安装完毕如果直接采用dnf或者yum方式安装docker: 报如下错误: 产生该问题的原因是openeuler操作系统自带的软件源不全。默认源安装的docker是18.x版本,无法安装docker最新版本,安装18.x版本可以通

    2024年02月03日
    浏览(45)
  • Jira-使用docker安装jira(支持最新版本)

    Jira-使用docker安装jira(支持最新版本) 本文已不是最新方法,最新方法请参考文档 最新版本已支持到9.5.0 本文仅提供交流学习 本文针对具有docker、Linux使用基础的兄弟姐妹们 请提前安装docker软件 需要原生安装的请联系作者 Linux安装传送门 Windows安装传送门 一、下载镜像 j

    2024年02月09日
    浏览(44)
  • ubuntu 20.04 docker安装emqx 最新版本或指定版本

    1.更新系统包列表: 2.安装Docker: 3.启动Docker服务并设置其开机自启动: 4.确保Docker正在运行: 5.使用Docker命令下载并运行EMQX容器: 如果您需要特定版本的emqx,请将“latest”替换为所需版本的标签,例如“emqx:4.4.3”。 6.确认EMQX容器已经启动: 使用以下命令检查容器状态 如

    2024年02月09日
    浏览(47)
  • docker 部署最新稳定版zookeeper

    | https://zookeeper.apache.org/releases.html

    2024年01月21日
    浏览(41)
  • 【BI看板】Docker-compose安装Superset,安装最新版本2.1.0

    Superset高版本有新的功能增加,代码仓库里面提供了2种安装方式。 字节码安装 最近看仓库,最新版本有3.0了啊,迭代更新非常快了 git clone https://github.com/apache/superset.git 切换分支 git checkout 2.1.0 使用docker-compose安装  已经报了很多错了   使用DockerFile文件

    2024年02月12日
    浏览(53)
  • Nginx入门——Nginx的docker版本和windows版本安装和使用 & 代理的概念 & 负载分配策略

    1.Nginx反向代理,代理的概念,正向代理,反向代理; 2.docker版本的nginx配置,挂载启动,开放端口; 3.windows版本的使用,代理多个端口的方式; 4.负载分配的策略,轮询,权重,ip_hash方式; http://nginx.org/en/download.html Nginx(engine x) 是一个高性能的 HTTP和反向代理web服务器 ,同

    2024年02月11日
    浏览(42)
  • 在centos8中升级并安装最新版本docker-ce

    查看你当前的linux内核版本是否符合官方对linux版本的要求: 卸载旧版本(如果安装过旧版本的话): 安装需要的软件包: 设置yum源: 或者使用阿里源 安装最新版: 启动docker: 加入开机启动: 验证安装是否成功: 第二种方法:使用docker官方脚本安装 1、确保 yum 包更新到最新

    2024年02月12日
    浏览(47)
  • GPU版本pytorch的安装,配套环境python、Cuda、Anaconda安装和版本选择,及常见问题调用gpu返回false

    前言 :第一次装这个我也很懵,就想记录一下交流经验,这个安装最麻烦的是需要各个 版本 都需要 对应 。我也看了很多教程网上基本上安装都是cpu版本,就官网链接安装下来也是cpu版本,然后就不能调用显卡。 本教程使用python3.9、pytorch1.8.0、Cuda11.2版本、Cudnn8.8.1,这个

    2024年02月03日
    浏览(48)
  • 最新版ubuntu22.04安装NVIDIA显卡驱动以及CUDA、CUDNN,和安装驱动gcc版本问题解决。

    1.驱动安装参考下述链接 1.1 NVIDIA显卡驱动、 CUDA 的安装参考这个博主的具体安装步骤,但是最后一步的 cudnn 的安装参考另一个博主,见链接。 1.2 可以选择最新版本的驱动,需要在官网去找最新的版本对应。 2.最新版本我遇到的错误以及解决方法 2.1.在进入tty1界面后ubuntu安装

    2024年04月24日
    浏览(58)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包