どうも、たかふみです。
現在、開発環境の構築にdockerを使っています。
webサーバーにnginxを使用しているのですが、buildした際に下記のメッセージが表示されていました。
Topic nginx1.12 has end-of-support date of 2019-09-20

ということで、今回はこのサポート終了メッセージを解決します!
■コンテナ構成
webコンテナ : amazonlinux:2(+nginx+PHP)
DBコンテナ : mysql:5.7
■まず、Dockerfileを見てみる。
現在使用しているDockerfileが下記になります。
FROM amazonlinux:2
RUN yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
RUN amazon-linux-extras install nginx1.12 && \
amazon-linux-extras install php7.2 && \
yum -y install zip unzip php-devel php-pear php-mbstring php-xml glibc-langpack-ja npm sudo ccze gcc vim procps libpng-devel git cronie
# RUN npm install -g rtail && pecl install xdebug
RUN pecl install xdebug
# 開発用にcomposerをインストール
RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" && \
php composer-setup.php && mv composer.phar /usr/local/bin/composer
COPY ./etc /etc
# 起動コマンド
CMD bash -c "bash /etc/init.sh && nginx && php-fpm -F"
この中でnginxのインストールをしているのが、下記の部分。
RUN amazon-linux-extras install nginx1.12 && \
この「nginx1.12」のサポートが終了しているとのことです。
ここで amazon-linux-extras
とは?
・amazon-linux-extrasとは
Q:Amazon Linux Extras とは何ですか?
Extras は、安定したオペレーティングシステムで新しいバージョンのアプリケーションソフトウェアを利用可能にする Amazon Linux 2 のメカニズムで、2023 年 6 月 30 日までサポートされます。Extras は、OS の安定性を確保しつつ、最新のソフトウェアを利用できるようにするうえで役立ちます。例えば、5 年間サポートされる安定したオペレーティングシステムに MariaDB の新しいバージョンをインストールすることができます。Extras の例には、Ansible 2.4.2、memcached 1.5、nginx 1.12、Postgresql 9.6、MariaDB 10.2、Go 1.9、Redis 4.0、R 3.4、Rust 1.22.1 などがあります。
引用:https://aws.amazon.com/jp/amazon-linux-2/faqs/
AmazonLinux2でソフトウェアを利用したいときに使うコマンドです。
インストールするときは install
、ヘルプを見たいときは help
が使えます。
・amazon-linux-extrasを使ってみる。
とりあえず、現在の環境を立ち上げてコンテナの中に入り、
amazon-linux-extras
でインストール可能なパッケージの一覧を見てみます。
(amazon-linux-extras list
でも可能です。)
$ docker-compose exec web bash // コンテナに入る。
bash-4.2# amazon-linux-extras // 一覧表示。
0 ansible2 available [ =2.4.2 =2.4.6 =2.8 ]
2 httpd_modules available [ =1.0 ]
3 memcached1.5 available \
[ =1.5.1 =1.5.16 =1.5.17 ]
4 *nginx1.12=latest enabled [ =1.12.2 ]
5 postgresql9.6 available [ =9.6.6 =9.6.8 ]
6 postgresql10 available [ =10 ]
8 redis4.0 available [ =4.0.5 =4.0.10 ]
9 R3.4 available [ =3.4.3 ]
10 rust1 available \
[ =1.22.1 =1.26.0 =1.26.1 =1.27.2 =1.31.0 ]
11 vim available [ =8.0 ]
13 ruby2.4 available [ =2.4.2 =2.4.4 =2.4.7 ]
15 php7.2=latest enabled \
[ =7.2.0 =7.2.4 =7.2.5 =7.2.8 =7.2.11 =7.2.13 =7.2.14
=7.2.16 =7.2.17 =7.2.19 =7.2.21 =7.2.22 =7.2.23
=7.2.24 ]
_ php7.1 available \
[ =7.1.22 =7.1.25 =7.1.27 =7.1.28 =7.1.30 =7.1.31
=7.1.32 =7.1.33 ]
17 lamp-mariadb10.2-php7.2 available \
[ =10.2.10_7.2.0 =10.2.10_7.2.4 =10.2.10_7.2.5
=10.2.10_7.2.8 =10.2.10_7.2.11 =10.2.10_7.2.13
=10.2.10_7.2.14 =10.2.10_7.2.16 =10.2.10_7.2.17
=10.2.10_7.2.19 =10.2.10_7.2.21 =10.2.10_7.2.22
=10.2.10_7.2.23 =10.2.10_7.2.24 ]
18 libreoffice available [ =5.0.6.2_15 =5.3.6.1 ]
19 gimp available [ =2.8.22 ]
20 docker available \
[ =17.12.1 =18.03.1 =18.06.1 =18.09.9 ]
21 mate-desktop1.x available [ =1.19.0 =1.20.0 ]
22 GraphicsMagick1.3 available [ =1.3.29 =1.3.32 ]
23 tomcat8.5 available \
[ =8.5.31 =8.5.32 =8.5.38 =8.5.40 =8.5.42 ]
24 epel available [ =7.11 ]
25 testing available [ =1.0 ]
26 ecs available [ =stable ]
27 corretto8 available \
[ =1.8.0_192 =1.8.0_202 =1.8.0_212 =1.8.0_222 =1.8.0_232 ]
28 firecracker available [ =0.11 ]
29 golang1.11 available \
[ =1.11.3 =1.11.11 =1.11.13 ]
30 squid4 available [ =4 ]
_ php7.3 available \
[ =7.3.2 =7.3.3 =7.3.4 =7.3.6 =7.3.8 =7.3.9 =7.3.10
=7.3.11 ]
32 lustre2.10 available [ =2.10.5 ]
33 java-openjdk11 available [ =11 ]
34 lynis available [ =stable ]
35 kernel-ng available [ =stable ]
36 BCC available [ =0.x ]
37 mono available [ =5.x ]
38 nginx1 available [ =stable ]
39 ruby2.6 available [ =2.6 ]
40 mock available [ =stable ]
41 postgresql11 available [ =11 ]
* Extra topic has reached end of support.
該当するのは4番目。
ご丁寧に * Extra topic has reached end of support.
と書いてあります。
4 *nginx1.12=latest enabled [ =1.12.2 ]
「1.12.2がある!きっとこれをインストールすれば解決だ!!」
ということで、Dockerfileを RUN amazon-linux-extras install nginx1.12.2
に修正して、再度buildを実行。
Topic nginx1.12.2 is not found.

■解決:nginx1を使う!
調べているときに発見したのがクラスメソッドさんの記事。いつもお世話になってます!
■Amazon Linux 2 ExtrasレポジトリのNginx、トピック名が「nginx1」になりました
https://dev.classmethod.jp/cloud/aws/al2-nginx1-new-extras-topic/
先ほどの amazon-linux-extras
を実行した際に、38番にnginx1がありました。
38 nginx1 available [ =stable ]
今後、AmazonLinux2でnginxを使うときには「nginx1」の方を使う必要があります。
RUN amazon-linux-extras install nginx1
に修正してbuildしたところ、メッセージが消えて問題なく動くようになりました。良かった!
■疑問:なぜ、nginx1.12.2は見つからなかったのか。
バージョンを指定しない場合は、デフォルトのバージョンでインストールされます。
引用:https://dev.classmethod.jp/cloud/aws/how-to-work-with-amazon-linux2-amazon-linux-extras/
とのことです。バージョンを指定してインストールする場合、amazon-linux-extras install nginx1.12=1.12.2
とする必要があるようです。
実際、 RUN amazon-linux-extras install nginx1.12
でインストールした環境でnginxのバージョンを確認したところ、nginx 1.12.2が入っていました。バージョンの指定方法を間違えていたんですね。
bash-4.2# nginx -V
nginx version: nginx/1.12.2
built by gcc 7.3.1 20180303 (Red Hat 7.3.1-5) (GCC)
■まとめ:nginx1を使う。
Amazonlinux2でnginxを使うなら「nginx1」を使うようにしましょう。
また、今回amazon-linux-extras
を初めて使いました。
「listでインストール可能なパッケージを確認して、installでインストールする」という流れは今回に限らず、基本だと思うので今後も使っていきたいと思います。

参考記事
■Amazon Linux 2のExtras Library(amazon-linux-extras)を使ってみた
https://dev.classmethod.jp/cloud/aws/how-to-work-with-amazon-linux2-amazon-linux-extras/
■Amazon Linux 2 ExtrasレポジトリのNginx、トピック名が「nginx1」になりました
https://dev.classmethod.jp/cloud/aws/al2-nginx1-new-extras-topic/