DockerfileをビルドしてDockerイメージを作成する

Dockerfileとnginx.confの準備ができたら、Dockerfileのあるフォルダに移動しdocker buildコマンドでイメージの作成を行います。

docker build -t icsmedia/nginx-http2 .

-tオプションでは、生成するDockerイメージの名前を指定します。設定しない場合は、自動的に適当な名前で生成されます。.の箇所にはDockerfileが配置されているディレクトリを指定します。Dockerfileの配置されているフォルダにいる場合は.と指定します。

実行すると数秒ほどでDockerイメージの作成が完了します。docker imagesコマンドを使って以下の通りDockerイメージが作成されていることを確認します。

$ docker images
REPOSITORY              TAG      IMAGE ID        CREATED             SIZE
icsmedia/nginx-http2    latest   823fb32de4dd    About an hour ago   478 MB

作成したDockerイメージからコンテナを起動する

それでは、作成したDockerイメージからコンテナを起動してみましょう。docker runコマンドを実行しコンテナを起動します。

docker run -p 80:80 -p 443:443 -d icsmedia/nginx-http2

コンテナが起動したらブラウザからhttps://localhost/にアクセスし、HTTP/2に対応しているか確認します。今回は自己証明書を使用しているため、アクセス時に証明書のエラーが表示されますが、詳細情報を表示し、「localhostにアクセスする(安全ではありません)」のリンクから強制的にアクセスしてください。

nginxの初期画面が表示されるため、Google Chromeのデベロッパーツールを使ってHTTP/2で通信されているか確認してみましょう。デベロッパーツールはWindowsの場合はF12キー、macOSの場合はCommandOptionIキーで起動できます。次に[Network]タブを開き表の見出し部分を右クリックして表示されるメニューから[Protocol]を選択しチェックをいれます。

ここまでの設定ができたら、ブラウザをリロードするとデベロッパーツールに通信内容が表示されます。表示されているプロトコル欄に「h2」と表示されていれば、HTTP/2で通信できています。また、Google Chromeの拡張機能である「HTTP/2 and SPDY indicator」をインストールしておくと、HTTP/2の通信が行われているページでは青色で表示されるため、ひと目で対応していることの確認ができます。

以上で環境構築は完了です。Webサーバーに任意のファイルをアップしたい場合は、コンテナ起動時に次のコマンドを実行してください。ホスト(起動元)のディレクトリーをコンテナ内のnginxのドキュメントルートにマウントすることで、該当のディレクトリーに配置したファイルがWebサーバーに反映されます。

docker run -p 80:80 -p 443:443 -d icsmedia/nginx-http2 -v /Users/xxxx/nginx/www:/usr/local/nginx/html

※既にコンテナを起動済みの場合は、コンテナを終了後に上記のコマンドを実行してください。
/Users/xxxx/nginx/wwwの部分はホスト(起動元)の任意のディレクトリーを指定してください。

おわりに

HTTP/2に対応した環境を準備するには色々と手間がかかりますが、Dockerを使うことでローカル環境に簡単に構築できました。Dockerfile自体は軽量なテキストファイルなので、このファイルを共有することで、他の開発メンバーのパソコンでも同じ環境のサーバーが簡単に構築できます。

次回の記事では、DockerComposeを使用して、今回作成したDockerイメージと他のDockerイメージを組み合わせた環境を構築する手順について紹介したいと思います。