Docker Toolboxでnginxを起動する
はじめに
Widows環境でDockerを使う場合には、大半が”Docker for Windows”を使っているはず。
今回は今更ながら、”Docker Toolbox”を使って、開発環境用のnginxを立てることになったので、そのメモ。
環境
- OS :Windows 10 home
- Docker : Version 18.03.0-ce
- Docker Compose : Version 1.20.1
フォルダ構成
// フォルダ構成 docker-nginx |―build | |―nginx | |―default.conf | |―Dockerfile |―logs | |―nginx |―public | |―index.html |―docker-compose.yml
logsフォルダには、nginxのlog出力フォルダをマウントするので、access.log、error.logが出力される。
Dockerfileの作成
まずはDockerfileの作成。
/* ./build/nginx/Dockerfile */ FROM nginx COPY ./default.conf /etc/nginx/conf.d/default.conf
今回はDockerfileの中でdefault.confのコピーを指定しているが、docker-composeでもよい。
docker-composeにdefault.confのマウントを記述してしまうと、イメージの指定だけになるので、Dockerfile自体は作らなくても良い。
※ただ、開発をしていると個別に処理を追加したくなるのは良くある話なので、個人的にはDockerfileに分けておく方が好き。
default.confの作成
次はnginxの設定ファイルを定義する。これはDockerfileと同じフォルダに配置する。
server { listen 80; server_name localhost; root /var/www/html; index index.html; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; }
ここら辺は特に説明することもない感じで、いつも通り。
表示確認用のhtmlファイルを配置
表示確認用にhtmlファイルを設置しておく。これは本当に何でもよい。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" /> </head> <body> <h1>Nginx Start!</h1> </body> </html>
ひとまず、コンテナ起動後にこれが表示されればOK!
docker-compose.ymlを作成
一番大事なdocker-compose.ymlを作成する。
version: '3' services: nginx: environment: TZ: Asia/Tokyo build: ./build/nginx ports: - "8888:80" volumes: - ./logs/nginx/:/var/log/nginx - ./public:/var/www/html
地味に重要なのが、log出力先フォルダをマウントしておくこと。
これをしておくだけで、通信できない場合の原因調査のスピードが格段にあがる。
例をあげると...
- マウントできているか確認
⇒ access.log,error.logが出力されていればOK。出力されていなければ、nginxの設定ファイルとdocker-compose.ymlのマウントの設定を見直す。 - nginxが起動しているか確認
⇒ error.logしか出力されていない場合は正常に起動できていない。error.logの内容を確認して、修正する。 - 対象のサーバーへ通信できているか確認
⇒ localhost:8888を叩いても反応がない場合、まずはlogを確認。出力されていなければURLをまずは見直す。
世の中にはlogが全く役に立たないものもあるが、役に立つものが存在するのも事実なので、logを軽視しないこと。
コンテナを起動する
// まずはコンテナをビルド > docker-compose build Building nginx Step 1/2 : FROM nginx ---> 719cd2e3ed04 Step 2/2 : COPY ./default.conf /etc/nginx/conf.d/default.conf ---> Using cache ---> eba186bd7522 Successfully built eba186bd7522 Successfully tagged nginx_nginx:latest // 次にコンテナを起動 > docker-compose up -d Creating network "nginx_default" with the default driver Creating nginx_nginx_1 ... done // コンテナの起動を確認 > docker-compose ps Name Command State Ports ------------------------------------------------------------------- nginx_nginx_1 nginx -g daemon off; Up 0.0.0.0:8888->80/tcp
後は起動を確認するだけ。
起動確認
ここで躓きやすいのが、確認するURL。
http://localhost:8888をブラウザで叩いても、確認できない。
WindowsでDockerを動かしているので、localhostのPort:8888で待ち受けているわけではなく、dockerのデーモンが起動しているサーバーのPort:8888で待ち受けているの注意。
まずはdockerが起動している仮想マシンのIPを確認する。
> docker-machine env $Env:DOCKER_TLS_VERIFY = "1" $Env:DOCKER_HOST = "tcp://192.168.77.101:2376" $Env:DOCKER_CERT_PATH = "***********" $Env:DOCKER_MACHINE_NAME = "default" $Env:COMPOSE_CONVERT_WINDOWS_PATHS = "true" # Run this command to configure your shell: # & "C:\Program Files\Docker Toolbox\docker-machine.exe" env | Invoke-Expression
仮想マシンのホストIPは"192.168.77.101"なので、あとは192.168.77.101:8888にアクセスすれば確認ができる。