【環境構築】「Topic nginx1.12 has end-of-support date of 2019-09-20」。Dockerでnginxを使うときには「nginx1」を使う！

![Docker.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/250884/dcf2fe82-6ee6-31c3-8471-1769064f8b97.png)

どうも、たかふみです。
現在、開発環境の構築にdockerを使っています。

webサーバーにnginxを使用しているのですが、buildした際に下記のメッセージが表示されていました。

```
Topic nginx1.12 has end-of-support date of 2019-09-20
```

<img width="880" alt="スクリーンショット 2019-11-09 15.04.41.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/250884/ab93a0a1-78d5-dbe0-3959-934f14da8d05.png">

ということで、今回はこのサポート終了メッセージを解決します！

# ■コンテナ構成

```
webコンテナ ： amazonlinux:２(+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.
```

該当するのは４番目。
ご丁寧に `* 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.
```

<img width="783" alt="スクリーンショット 2019-11-09 15.44.15.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/250884/713b5185-020c-c979-4e6b-8d72244060fe.png">

# ■解決：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でインストールする」という流れは今回に限らず、基本だと思うので今後も使っていきたいと思います。

<img width="825" alt="スクリーンショット 2019-11-09 16.40.32.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/250884/ae29e222-6cf5-9ddd-beb1-d754db622d50.png">

# 参考記事
■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/