あるSEのつぶやき・改

IT・システム開発に関することをつぶやいています。

Docker+CentOS8にnginxをインストールする


はじめに

2019年9月24日に、ついに CentOS 8 がリリースされました。

CentOS 8では、yumコマンドが廃止されdnfコマンドが採用されました。その他にも変更点が多いです。詳しくは下記記事を参照してください。

xn--o9j8h1c9hb5756dt0ua226amc1a.com

この記事では、その最新の CentOS 8 を Docker にインストールし、さらに nginx をインストールして動作させる方法をご紹介します。

CentOS 8のインストール

CentOS 8 の Docker コンテナを作成するには、centos:8のイメージを使用します。

CentOS で使用できるイメージは以下のページを参照してください。

hub.docker.com

CentOS 8 のイメージをダウンロードして起動します。後ほど nginx を起動するので、ポート番号の設定も行っています。

$ docker run -d -p 8080:80 --name centos8 centos:8 /sbin/init

CentOS 8 のコンテナにログインして、バージョンを確認します。

$ docker exec -it centos8 /bin/bash
# cat /etc/redhat-release
CentOS Linux release 8.0.1905 (Core)

CentOS 8 がインストールされていることが確認できます。

nginx のインストール

CentOS 8 からyumコマンドが廃止されdnfコマンドが採用されましたが、yumコマンドがpython2ベース、dnfコマンドがpython3ベースである以外は、さほど使い方は変わらないようです。

なお、yumコマンドもdnfコマンドのラッパーとして使用できるので、あまり困らないかもしれないですね。

先ほどのコンテナへのログイン状態を維持した状態で、下記コマンドを実行して nginx をインストールします。

# dnf -y update
# dnf install -y nginx

下記コマンドを実行して、nginx を起動します。

# nginx

下記コマンドで動作確認をします。レスポンスが長いので内容は割愛しますが、レスポンスが返ってきていればOKです。

# curl localhost

ホストOS(Windows or Mac etc)側のブラウザで、http://localhost:8080でアクセスし以下の画面が表示されれば正しく設定がされています。

f:id:fnyablog:20191005212450p:plain:w480

終了処理

下記コマンドでコンテナからログアウトします。

# exit 

Docker コンテナを停止して、コンテナを削除します。(コンテナ名を使用してますが、コンテナIDでももちろんOK)

$ docker stop centos8
$ docker rm centos8

Dockerfileで環境を構築する

毎回、nginx をインストールするのは面倒なので、Dockerfile を使用して nginx のイメージを作成します。

Dockerfile を適当なディレクトリに作成します。

Dockerfile

FROM centos:8
RUN dnf -y update
RUN dnf install -y nginx
ENTRYPOINT /usr/sbin/nginx -g 'daemon off;' -c /etc/nginx/nginx.conf

1点注意事項があり、nginx はデフォルトではバックグラウンドで実行されますが、それだとコンテナを Docker に終了されていまいます。そのため、nginx をフォアグラウンドで実行する必要があります。

ネットで調べていると、nginx の起動は以下のようにするという情報が多かったですが、CentOS 8 では ENTRYPOINTのように記述する必要がありました。

CMD ["/usr/sbin/nginx", "-g", "daemon off;"]

Dockerfile を同じディレクトリで下記コマンドを実行して、Docker イメージを作成します。

$ docker build -t centos8-nginx .

Docker イメージができたら、下記コマンドで Docker コンテナを起動します。

$ docker run -d -p 8080:80 --name centos8-nginx centos8-nginx /sbin/init

先ほどと同じように、http://localhost:8080/にブラウザでアクセスし正しく画面が表示されればOKです。

終了処理も忘れずに行いましょう。

$ docker stop centos8-nginx
$ docker rm centos8-nginx

おわりに

nginx がなかなか起動しなくて手こずりましたが、CentOS 8 そのものは思ったより問題なく使用することができました。

CentOS 8は意外と恐れる必要はないかもしれないですね。

それよりは、Docker のコマンドを忘れてしまい、調べ直すのに時間がかかってしまいました。💦