使用Docker在Ubuntu20.04容器中安装最新版本的nginx

首先

我打算学习nginx,所以我使用docker启动了一个Ubuntu容器,并尝试在其中安装nginx。但是,安装过程因为一些小问题而耗费了一些时间,所以如果有类似经验的人,希望能参考一下。

安装nginx的方法

使用nginx有两种安装方法。第一种是从nginx官方网站下载并构建nginx的方法,第二种是使用Ubuntu的apt命令进行安装。本文将介绍通过这两种方法安装最新版本的nginx的步骤。

两种方法的区别在于,使用构建方法可以自由地组合和自定义模块,而使用apt方式的自由度较低,但可以直接使用已经包含了最基本模块的软件包。如果是在产品中使用,建议使用构建方法,但如果是在兴趣或练习中,使用apt命令也完全没有问题。

从官方网站下载nginx并进行编译构建。

主要版和稳定版

nginx有Mainline版和Stable版,不同之处在于,Mainline版经常进行最新功能的添加和错误修复,而Stable版除了修复重大漏洞外几乎不进行更改。作为对比,Mainline版可能会出现无法构建第三方模块等问题。但是请不要误解,两者都是非常稳定的版本。基本上建议使用Mainline版。

安装方法

确认官方网站,复制粘贴最新版Mainline版本的链接URL,并使用wget命令将其下载到Ubuntu容器中。最新的Mainline版本是1.21.6(截至2022年3月21日)。按照以下步骤执行应该没问题。顺便提一下,%表示在Docker主机(M1mac)上执行,$表示在容器上执行。

顺便提一下,通过使用–prefix选项可以指定Nginx安装的目录。顺便说一句,从Ubuntu 14.04开始,推荐使用apt而不是apt-get命令。

% docker run -dit -p 8100:80 --name ubuntu-for-nginx-study ubuntu:20.04
% docker exec -it ubuntu-for-nginx-study /bin/bash
$ mkdir nginx
$ cd nginx
$ apt update
$ apt install wget
$ wget https://nginx.org/download/nginx-1.21.6.tar.gz
$ tar xvf nginx-1.21.6.tar.gz
$ cd nginx-1.21.6
$ apt install sudo
$ sudo apt install -y build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev openssl libssl-dev
$ ./configure --prefix=/usr/local/nginx
$ make
$ sudo make install
$ export PATH=/usr/local/nginx/sbin:$PATH
$ nginx -V
$ pwd
/nginx/nginx-1.21.6

使用Ubuntu的apt命令进行安装。

具體來說,到了準備容器的部分,與「從官方網站下載nginx並構建」的步驟相同。具體來說,直到$ cd nginx的那行程式碼。

以目前的状态无法安装最新版。

如果直接安装,将安装旧版本的软件。由于nginx会直接暴露给外部,出于安全的考虑,最好使用尽可能最新的版本。

$ sudo apt info nginx
Package: nginx
Version: 1.18.0-0ubuntu1.2
Priority: optional
Section: web
Origin: Ubuntu
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Debian Nginx Maintainers <pkg-nginx-maintainers@lists.alioth.debian.org>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 45.1 kB
Depends: nginx-core (<< 1.18.0-0ubuntu1.2.1~) | nginx-full (<< 1.18.0-0ubuntu1.2.1~) | nginx-light (<< 1.18.0-0ubuntu1.2.1~) | nginx-extras (<< 1.18.0-0ubuntu1.2.1~), nginx-core (>= 1.18.0-0ubuntu1.2) | nginx-full (>= 1.18.0-0ubuntu1.2) | nginx-light (>= 1.18.0-0ubuntu1.2) | nginx-extras (>= 1.18.0-0ubuntu1.2)
Homepage: http://nginx.net
Download-Size: 3620 B
APT-Sources: http://ports.ubuntu.com/ubuntu-ports focal-updates/main arm64 Packages
Description: small, powerful, scalable web/proxy server

N: There is 1 additional record. Please use the '-a' switch to see it
$ sudo apt update
$ sudo apt install nginx

最新版本的安装方式

打开官方网站的相关页面,并查看自己使用的Linux发行版的选项。由于本次使用的是Ubuntu,请查看Ubuntu的选项。值得一提的是,如果查看页面顶部关于Ubuntu的部分,可以发现如果Ubuntu的版本是20.04,则会安装名为focal的nginx。

只要直接跳到Ubuntu部分並按順序執行那裡的程式碼就可以了,這是沒有問題的。然而,由於Ubuntu容器預先未安裝sudo指令,所以需要先執行以下命令。

$ apt update
$ apt install sudo

最后

本文到此结束。除了本文所述的旧文章外,关于如何在不使用apt的情况下构建nginx的方法,信息相对较少,因此花了一些时间。