【 Nginx 編】Mac に Docker インストールしてみた

前回の『Mac に Docker インストールしてみた』の続きです。

enomotodev.hatenablog.com

実際に Nginx + PHP + MySQL 環境を構築するにあたって、今回は Nginx コンテナを起動させて、静的コンテンツの表示までを行いたいと思います。

Docker Machine の起動

前回から、PC をシャットダウンしたり、再起動している場合は、もう一度 Docker Machine を起動させなければいけないので、下記のコマンドで起動させてください。(それ以外の方は次の『Nginx コンテナを起動させる』から読んでください)

$ docker-machine start dev-machine
Starting "dev-machine"...
(dev-machine) Waiting for an IP...
Machine "dev-machine" was started.
Waiting for SSH to be available...
Detecting the provisioner...
Started machines may have new IP addresses. You may need to re-run the `docker-machine env` command.

前回と同じ手順を踏んで、Docker Machine に接続できるようにしていきます。

$ docker-machine env dev-machine
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.101:2376"
export DOCKER_CERT_PATH="/Users/enomotodev/.docker/machine/machines/dev-machine"
export DOCKER_MACHINE_NAME="dev-machine"
# Run this command to configure your shell:
# eval $(docker-machine env dev-machine)
$ eval $(docker-machine env dev-machine)
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              97434d46f197        2 weeks ago         188 MB

無事 docker images コマンドが実行できました。

Nginx コンテナを起動させる

まずは docker pull コマンドを実行して、Nginx のイメージを取得します。

$ docker pull nginx:latest
latest: Pulling from library/nginx
fdd5d7827f33: Pull complete
a3ed95caeb02: Pull complete
716f7a5f3082: Pull complete
7b10f03a0309: Pull complete
Digest: sha256:f6a001272d5d324c4c9f3f183e1b69e9e0ff12debeb7a092730d638c33e0de3e
Status: Downloaded newer image for nginx:latest

docker images コマンドで確認します。

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              97434d46f197        2 weeks ago         188 MB
nginx               latest              af4b3d7d5401        3 weeks ago         190.5 MB

docker run コマンドで Nginx のコンテナが起動するのですが、先に Nginx の設定ファイルと Document Root に置く HTML ファイルを準備します。

  • ~/docker/nginx/nginx.conf
server {
    listen 8080 default_server;

    root /var/www;
    index index.html index.htm;
}
  • ~/docker/www/index.html
<html>
<body>
<h1>Hello Docker!</h1>
</body>
</html>

最低限の設定ですが、必要なファイルが準備できたので、docker run コマンドで Nginx コンテナを起動します。

$ docker run -p 9090:8080 -v /Users/enomotodev/docker/nginx/nginx.conf:/etc/nginx/conf.d/nginx.conf -v /Users/enomotodev/docker/www:/var/www -d nginx
0902e290559b4a054d72b4cf2615334079cfa879df1cc35d9655d0f0e217c462

ここで docker run コマンドのオプションを少し確認したいと思います。

  • -p オプション

-p オプションでポートマッピングの設定ができます。

Mac -> Docker Machine -> Nginx コンテナ』という流れで Nginx に接続していて、今回は 9090:8080 と設定しているので、『Mac -> Docker Machine』の接続に 9090 ポート、『Docker Machine -> Nginx コンテナ』の接続に 8080 ポートを使用するという設定になっています。

  • -v オプション

-v オプションでは、Docker Machine と Nginx コンテナ間で共有するファイル・ディレクトリを指定できます。

Docker Machine には、Mac/Users ディレクトリがマウントされているので、例えば Mac 上の /Users/enomotodev/hoge ディレクトリは、Docker Machine 上でも /Users/enomotodev/hoge ディレクトリになります。

-v foo:bar と書くと、Docker Machine の foo ディレクトリを Nginx コンテナの bar にマウントさせることができ、それによってファイルやディレクトリを共有できます。

  • -d オプション

-d オプションを使用するとコンテナをバックグラウンドモードで起動することができます。

Nginx コンテナの起動確認

Nginx コンテナを起動させたので Docker Machine の IP を確認して、接続してみましょう。

$ docker-machine ip dev-machine
192.168.99.101

Docker Machine の IP が 192.168.99.101 とわかったので、Nginx コンテナを起動するときに指定した 9090 ポートで接続してみます。

  • http://192.168.99.101:9090

f:id:enomotodev:20170519202001p:plain

無事に表示されました!

まとめ

Nginx コンテナを起動し、静的コンテンツの表示までできました。

次回は PHP と連携して、動的なコンテンツの表示も行いたいと思います。