Docker+NginxでBasic認証付きコンテナを作成する【実践記録10】

実践記録10

遂に実践記録も10記事目!二桁に到達しました!!
最新技術にはまだまだ追いつけていませんが、順調に経験を積めていると自分では思っています。

もうしばらくは広く浅く様々な技術に触れていきたいと思います。

実践記録9でdockerコンテナを使ってみたので、
今回は少し発展させてBasic認証をかけたnginxコンテナイメージを自分で作成してみたいと思います。

docker稼働環境

virtualbox、及びVagrantを使用して環境を構成しています。
使用しているVagrantfileは以下の通りです。

NginxでBasic認証付きコンテナを作成する

以下の様なdockerfileを作成しました。

使用しているのは以下のコマンドです。

FROM:ベースとなるOSを指定
RUN:コマンドを実行
COPY:ホストからコンテナへファイルをコピー
EXPOSE:コンテナのポートを公開
CMD:コンテナ起動時に実行されるコマンド

コマンドについての詳しい説明は以下の公式ドキュメントを参照してください。

Docker docs

まず、以下のnginx公式ドキュメントの手順に従って
nginxをインストールする為のリポジトリ登録を行います。

nginx公式ドキュメント

nginx.repoの中身は以下の様に定義しています。

公式ドキュメントの内容をコピペすると、URLのコロンが全角となっていてエラーとなります。(当記事執筆時点)

上記の落とし穴に気を付けてください。。(私はこれにはまりました)

続いてRUNコマンドを用いてソフトウェアのインストールです。
パスワードを暗号化する為に今回はopensslもインストールします。

その後Basic認証の設定を行います。

dockerwebの部分はBasic認証で使用するユーザー名、dockerpasswordは任意のパスワードを指定してください。
default.confは以下の様に定義を追加しています。

環境によって/etc/nginx/nginx.confを修正する必要がある場合や
/etc/nginx/conf.d/default.confを編集しなければならない場合等、差があるようです。
私は以前仮想マシンでnginxにBasic認証をかけた際はnginx.confに定義追加すれば設定が反映されましたが、
今回はnginx.confに定義を入れても設定が反映されず、default.confに設定を入れることで設定が反映されました。
その後EXPOSEコマンドで80番ポートを開放し、最後に以下のコマンドを定義します。
※ポートは開放しただけで、ホスト側のポートとのマッピングはコンテナ起動時に行うことになります。

コンテナはフォアグラウンドで実行されていなければ、プロセスが終了してしまいますが、
nginxはデフォルトでバックグラウンドで実行する様になっているので上記コマンドを実行することでフォアグラウンドで実行するよう(コンテナが消えないよう)にします。

この「フォアグラウンド」という言葉ですが、コンテナの中での話であり、
Dockerホストから見てコンテナをバックグラウンドで実行することは可能ですので混同しないようにしましょう。

ここまできたらこのdockerfileを用いて以下のコマンドでimageファイルを作成します。

docker build -t nginx_auth /vagrant_data/
-tの後ろに作成するイメージ名、その後ろはdockerfileの置き場を指定します。
コマンドが完了したらイメージファイルが作られているか確認してみます。
docker images
先ほど指定したnginx_authという名前のimageが作成されている事がわかります。
最後にこのイメージを使用して、以下のコマンドでコンテナを作成してみます。
docker run –name demonginx -d -p 8080:80 nginx_auth:latest
イメージファイルがローカル環境にあると、起動まで1秒かかるかどうかです!
このスピードがdockerの魅力の一つなんでしょうね。
では確認してみます。
無事にコンテナを使ってnginxでBasic認証ができているようですね!
自分で作ったコンテナイメージだとわが子のようで嬉しさが増しますね!笑
今回はここまでにします。
続きは以下の記事になります!
関連記事

実践記録11前回はDockerを使ってBasic認証機能付きのNginxコンテナを作成してみました。今回は少し拡張して、Nginx+PHPの実行環境をDocker-composeをインストールして作ってみたいと思います。実施環境[…]