開発ツールこんにちは!個人開発者の南です。Composeを使って実際にnginxのサーバーを立てて、htmlファイルを表示する方法を紹介します。始めていた時に思っていた「DockerFileとdocker-copose.yml」や設定ファイルの記述などに関しても紹介していきますので、ぜひ最後まで読んでみて下さい。docker-composeとは?dockerのドキュメントによると下記のように記載されています。configuration.Dockerドキュメントより訳:composeはDockerを動かすために使用されるアプリケーションを整理、動かすためのツールです。composeを使うことで、YAMLファイル形式で、Dokcerのアプリケーションのサービスを定義することができます。シンプルなコマンドでYAMLファイルに定義したものを作り、起動することができます。早い話が、今までバラバラに管理しているファイル群をYAML形式のファイルで管理し、コマンド一発で各種サービスを立ち上げるための仕組みのことです。DockerFileとdocker-copose.ymlの違い僕は「docker-compose」を使った方がより、Dockerのファイルを管理しやすいというようなイメージでした。そこで、「DockerFile」と「docker-copose.yml」の違いって何なのだろうと思っていました。どっちか片方だけ覚えたら良いのかなと思っていました。実際は「DockerFile」と「docker-copose.yml」ファイルの両方を覚える必要があります。先に結論を言うと、「DockerFile」には実際のサーバー内で行う処理を記述します。「docker-copose.yml」では、そもそも「どんなものをダウンロード(nginxかapacheかなど)するのか?」、「マウントするボリューム」は何なのか?などの概要を記載するファイルです。これにより、1つの「DockerFile」に長々と記述するのでなく、ダウンロードするものに分けて「DockerFile」を作成して、処理を分けて記述することができるようになります。「nginx」に関してはこの「nginx/DockerFile」を編集。「MySQL」に関してはこの「mysql/DockerFile」を編集するといったことができるようになります。docker-composeを使う時のフォルダの構成docker-composeを使う時は、下記のようなフォルダ構成にするのが良さそうです。Composeというわけで下記のような構成で、htmlファイルを表示します。index.html123456789101112131415161718例dockerfolder|docker-compose/|docker-compose.yml|nginx/|DockerFile|mysql/|DockerFile|html/|index.html実際にnginxサーバーの立ち上げそれでは、実際にnginxサーバーを立ち上げて見ようと思います。・nginxの設定.envファイルの作成まず初めに「.envファイル」を作成します。.envファイルとは「dokcer-compose.yml」でデフォルトで読まれる、設定変数ファイルです。下記のような内容でファイルを記述します。#################################################NGINX_HOST_HTTP_PORT=80NGINX_HOST_HTTPS_PORT=443NGINX_HOST_LOG_PATH=./logs/nginx/NGINX_SITES_PATH=./nginx/sites/NGINX_SSL_PATH=./nginx/ssl/ここで記載しているものは、あとで「docker-comcose.yml」ファイルを作成する時に使用する環境変数になります。「.envファイル」が作成できたら、次は「docker-comcose.yml」ファイルを作成していきます。docker-composeの中身は下記のように記載します。"${NGINX_HOST_HTTPS_PORT}:443"versionについてversionについては、下記の公式サイトの中から選びます。2019年時点では、「version:’3’」とするのが一般的かと思います。Docker-composeの公式レファレンスservicesについてservicesでは、サーバー内で使用するものを設定していきます。今回はnginxを使用するので、「nginx」を続けて記載しています。ちなみにスペースもちゃんと開けて調整しないとコマンドを入力した時に、下記のようなエラーがでます。」buildについてbuildには、使用するサービスのDokcerFileが設置している場所を指定するようにしましょう。上記では「docker-comcose.yml」と同じ階層にある「nginx」フォルダを指定しています。volumesについてvolumesでは、ローカルのフォルダとDockerのコンテナを反映させるものをそれぞれ指定します。「.env」の環境変数を使っていますが、環境変数を入れ替えると下記のように表示されます。./nginx/ssl/:/etc/nginx/ssl対応としては、ローカル:Dockerのコンテナ内といったように対応しています。portsについてportsには、ローカルのマシンとDokcerコンテナのマシンでのポートを対応させます。「.env」の環境変数を使っていますが、環境変数を入れ替えると下記のように表示されます。"443:443"nginxの設定docker-compose.ymlの設定ができたら、今度はnginxの設定を行っていきます。nginxのフォルダの中身は下記のように設定しましょう。ssl/1234567891011nginx/|DockerFile|nginx.conf|sites/|app.test-html.conf|ssl/ここでは、下記の順番で設定を行っていきます。・DockerFileの設定nginx.confの設定まずは、nginx.confの設定を行います。nginx.confの中身は下記のように行います。UTF-8;}各設定について各設定の内容については、下記のQitaの記事にとても丁寧に纏められています。Nginx設定のまとめapp.test-html.confの設定app.test-html.confの中身は下記のように記述します。普通は「default.conf」というファイルを作成して設定するのですが、僕の場合は「default.conf」とすると、localhostで「nginx」のデフォルトのものしか表示されなしため、下記のようにしています。#www/以下に使用するフォルダ名を指定します。今回は「html」を使用するため「html」と記入します。test-html.test;#www/以下に使用するフォルダ名を指定します。今回は「html」を使用するため「html」と記入します。all;}}上記の設定ができた「hosts」ファイルに下記の記載を加えましょう。加えることで、docker-composeで起動した時「test-html.test」でページにアクセスできるようになります。test-html.testhostsファイルの場所はそれぞれ下記の場所にあります。Mac:/private/etc/hostsWindows:C:\Windows\System32\drivers\etc\hosts各設定についてこの「server」部分の各設定についても、下記のページにキレイに纏められています。気になる方は「server」部分を見てみて下さい。「app.test-html.conf」の設定ができたら、今度はDokcerFileの設定を行っていきます。DockerFileの中身は、下記のように記述しましょう。