dockerでnginxのコンテナを作成した時のメモを残す。
#前提
nginxはド素人。PHP(Laravel)の環境を作る必要があり、使ったことが無いnginxで動かしてみようという軽いノリで始めたメモ。
#docker pull nginx
$ docker pull nginx
$ docker run --name nginx00 -d -p 8080:80 nginx:latest
基本はこんな感じで、 とりあえず動かして喜ぶ。
で、以前の僕は必要なオプションを追加追加追加追加しながら自分に合ったオプションを含めてコマンドを覚えていた。
##よく使ったオプション[-v]
ローカルのディレクトリとコンテナ内のディレクトリをマウントしていた。
##よく使ったオプション[--link]
他のコンテナと連携するために使っていた。が、今は非推奨になっていた。調べてみると、コンテナで使用する専用のネットワークを予め作る事でコンテナ間の連携が出来るらしい。
$ docker network create <NETWORKNAME>
$ docker run --name nginx00 -d -p 8080:80 nginx:latest --net=<NETWORKNAME>
同じネットワークを利用したコンテナ同士で連携が出来ると言うことなんだろう。
#docker-compose
コマンドとオプションを揃えて忘れないようにメモ帳に残していたときもあったけど。多分、スマートじゃ無い。薄々わかっていたので今回はそれは避ける。
どうやら、 docker-composeという機能があるらしいので挑戦。
##docker-compose.yml
作りたい環境の構成を docker-compose.yml にYAML形式で記しておけばいいらしい。
version: '3'
services:
web:
build:
# context: <dockerfileのパス:./hogehoge>
# dockerfile: <dockerfile名:xxx.dokerfile>
context: ./docker
dockerfile: web.docker
# container_name: <作成するコンテナ名?>
container_name: web00
# depends_on:
# - <連携したいコンテナ名?>
ports:
- 8080:80
volumes:
- ./proj/var/www/html:/var/www/html
- ./docker/nginx.conf:/etc/nginx/conf.d/default.conf
networks:
- <所属するネットワーク名?>
network:
- <作成するネットワーク名(所属するネットワーク名)?>
docker-compose.yml と dockerfile を適切な場所に用意したら __docker-compose__コマンド実行すると自動でコンテナが出来上がる。
$ docker-compose up -d
__-d__オプションを付加しないとバックグラウンド実行にならない。
環境が不要になったら、 __up__を __down__に変えて実行。
$ docker-compose down
コンテナが停止し、 コンテナが削除される。
docker-compose.ymlについては、改めて調べてから別途メモを残したい。
##./docker/web.docker
今はとりあえず動かすことが優先なので一行だけしか書いていない。
FROM nginx:latest
これだけなら、docker-compose.ymlでimageを指定すれば済んだはず。
##./docker/nginx.conf
nginxの設定を予め用意する。これで上書く。
このファイルを書くまで気付かなかったが、nginxのドキュメントルートの標準は __/usr/share/nginx/html__らしいので、 __/var/www/html__に変更した。
server {
listen 80;
server_name web00;
root /var/www/html;
location / {
# root /usr/share/nginx/html;
# index index.html index.htm;
root /var/www/html;
index index.php index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
# root /usr/share/nginx/html;
root /var/www/html;
}
}