目次

【Nginx】Ubuntuに特定バージョンのNginxをインストールする


検証のために特定OSと特定バージョンのアプリのインストールはいつだって必要。NginxとUbuntuの特定バージョンをDockerで作成する。

各コマンドの解説や何をやっているかは、後述するとしてまずは結論から。

Ubuntuに特定バージョンのNginxをインストールする

今回はUbuntu18.04を利用する。検証が目的なので環境はDockerを利用する

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14

docker run --rm -it ubuntu:18.04 /bin/bash

#以降、コンテナ内部

apt -y update
apt -y install curl gnupg2 lsb-release
echo "deb http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" |  tee /etc/apt/sources.list.d/nginx.list
curl -fsSL https://nginx.org/keys/nginx_signing.key |  apt-key add -
apt -y update
apt install -y nginx-light=1.14.0-0ubuntu1.10

nginx -v
> nginx version: nginx/1.14.0 (Ubuntu)

以上。これでUbuntu18.04の中に、Nginx1.14.0がインストールされた。

各コマンドの解説

1
docker run --rm -it ubuntu:18.04 /bin/bash

docker run <name> <hoge>name コンテナで hoge コマンドを起動する。 -itオプションを付与しないと/bin/bashを起動したらコンテナが終了する。-itを付与することで、Terminal上で標準入出力を可能とする状態とする。

1
2
apt -y update
apt -y install curl gnupg2 lsb-release

コンテナは素の状態のため、まずはaptをアップデートする。その後、curl,gnupg2,lsb-releaseをインストールする。curlの説明は割愛するとして、gnupg2はaptの公開鍵をインストールする際に必要となるパッケージである。後述のapt-key add -実行時に

1
2
3
# curl -fsSL https://nginx.org/keys/nginx_signing.key |  apt-key add -
E: gnupg, gnupg2 and gnupg1 do not seem to be installed, but one of them is required for this operation
(23) Failed writing body

というエラーが出るために必要となる。

lsb-releaseはUbuntuのモジュールを出力してくれるコマンド。dockerでイメージを指定しているのだから固定でも良いと言えば良いのだが、コマンド化しておくことで、FROMのイメージを変えても使いまわせる(はず)

1
2
echo "deb http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" | tee /etc/apt/sources.list.d/nginx.list
curl -fsSL https://nginx.org/keys/nginx_signing.key |  apt-key add -

ubuntuディストリビューションの特定バージョンのnginxをaptに追加するteeの代わりに>でも良いかもしれないが、Dockerfileにする際にteeを利用していた方が標準出力に戻ってくるので確認がしやすい(はず)

curlでnginxの公開鍵をaptに追加している。

1
2
apt -y update
apt install -y nginx-light=1.14.0-0ubuntu1.10

メイン。aptを追加したので、再び再進化した上で特定バージョンのnginxをインストールする。この時の選び方だが

1
apt-cache showpkg nginx

を行うことで、各種バージョンのnginxを確認することができる。今回はnginx-lightの1.14.0を選択したため

1
apt install -y nginx-light=1.14.0-0ubuntu1.10

ということとなった。nginx

Dockerfileにした場合

試していないが、おそらく

Dockerfile
1
2
3
4
5
6
7
8
FROM ubuntu:18.04

RUN apt -y update && \
    apt -y install curl gnupg2 ca-certificates lsb-release && \
    echo "deb http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" |  tee /etc/apt/sources.list.d/nginx.list && \
    curl -fsSL https://nginx.org/keys/nginx_signing.key |  apt-key add - && \
    apt -y update  && \
    apt install -y nginx-light=1.14.0-0ubuntu1.10

となると考えている。