docker初心者がphp+nginxのdocker環境を構築してみる
こんにちは、おしうみです!
今回はdockerについてさほど詳しくなかった僕が、docker環境を構築してみたので、初心者目線で簡単に解説をしたいと思います。
結論からいうとこんなファイルができました
Dockerfile
FROM php:7.2-fpm-alpine
docker-compose.ymlファイル
version: '2'
services:
nginx:
image: nginx:alpine
container_name: laravel_nginx
volumes:
- ./config/conf.d/:/etc/nginx/conf.d/
- ./public:/var/www/public
- /var/run/docker.sock:/tmp/docker.sock:ro
environment:
HOST_NAME: 'つけたいホスト名(app.com)など'
ports:
- 80:80
networks:
default:
ipv4_address: 172.28.0.4
links:
- phpfpm
depends_on:
- phpfpm
phpfpm:
container_name: laravel_phpfpm
build:
context: .
dockerfile: ./Dockerfile
volumes:
- ./:/var/www/
networks:
default:
ipam:
config:
- subnet: 172.28.0.4/16
default.conf
server {
listen 0.0.0.0:80;
server_name localhost;
charset utf-8;
root /var/www/public;
index index.php;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
fastcgi_pass phpfpm:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
/etc/hosts
172.28.0.4 app.com
これからちゃんと説明していきます!
docker環境(nginx+php)構築に必要なファイル
docker環境構築に必要なファイルは3つです!
- Dockerfile(メインのファイル)
- docker-compose.yml(nginxやphpなど複数のコンテナ間の決まりを書くファイル)
- default.conf(nginxの設定を書くファイル, 〇〇.confという形式ならどんな名前でも可)
この3つがあればnginx+phpのdocker環境は作れます!
Dockerfileはどんな感じ?
Dockerfileは僕は一行しか書いていません。笑
FROM php:7.2-fpm-alpine
これでいけるんです!
これは、php7.2-fpm-airpineというイメージを使って環境を構築するという意味です。えっ!これだけ!?と思うかもしれませんが、これとdocker-compose.ymlとdefault.conだけで立派なphp環境は構築します。
Docker-compose.ymlファイルはどんな感じ?
version: '2'
services:
nginx:
image: nginx:alpine
container_name: nginx
volumes:
- ./config/conf.d/:/etc/nginx/conf.d/
- ./public:/var/www/public
ports:
- 80:80
links:
- phpfpm
depends_on:
- phpfpm
phpfpm:
container_name: phpfpm
build:
context: .
dockerfile: ./Dockerfile
volumes:
- ./:/var/www/
少し長いですが、人によってここを修正したらいいですよ!っていう部分だけ解説していきます。
まずは、nginxのこの部分!volumesは自分のパソコン上にあるフォルダやファイルをdocker内と共有するという意味ですが、nginxの設定ファイルであるdefault.conf(あとで作る)とサービスの公開するファイルがある部分(laravelならpublicディレクトリなど)を書く必要があります。この場合だと、default.confは.「config/conf.d/default.conf」にあり、publicディレクトリは「./public」にあります。右側の`/etc/nginx/conf.d`と`/var/www/public`は変える必要ありません。(docker内のnginxの設定ファイルは/etc/nginx/conf.dに、公開ディレクトリは/var/www/publicにと決まっています。)
volumes:
- ./config/conf.d/:/etc/nginx/conf.d/
- ./public:/var/www/public
次にphpのこの部分!Dockerfileはどこにあるかということを明示します。同じディレクトリにあれば、./Dockerfileで大丈夫です。
dockerfile: ./Dockerfile
nginx.confはどんな感じ?
nginx.confは正直、全部コピペで大丈夫です。ポート番号とかを変えない限りは、このままでいけます。
server {
listen 0.0.0.0:80;
server_name localhost;
charset utf-8;
root /var/www/public;
index index.php;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
fastcgi_pass phpfpm:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
localhostではなく、開発環境でもドメイン名を付けて開発したい場合
開発するときは、`http://localhost`で開発するケースが多いかもしれません。
でも「http://app.com」などで、ドメイン名を付けて開発したいケースもあると思います。そのときはdocker-compose.ymlとdefault.confをこのように修正します。
version: '2'
services:
nginx:
image: nginx:alpine
container_name: laravel_nginx
volumes:
- ./config/conf.d/:/etc/nginx/conf.d/
- ./public:/var/www/public
+ - /var/run/docker.sock:/tmp/docker.sock:ro
+ environment:
+ HOST_NAME: 'つけたいホスト名(app.com)など'
ports:
- 80:80
+ networks:
+ default:
+ ipv4_address: 172.28.0.4
links:
- phpfpm
depends_on:
- phpfpm
phpfpm:
container_name: laravel_phpfpm
build:
context: .
dockerfile: ./Dockerfile
volumes:
- ./:/var/www/
+networks:
+ default:
+ ipam:
+ config:
+ - subnet: 172.28.0.4/16
server {
listen 0.0.0.0:80;
- server_name localhost;
+ server_name $HOST_NAME;
charset utf-8;
root /var/www/public;
index index.php;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
fastcgi_pass phpfpm:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
`/var/run/docker.sock:/tmp/docker.sock:ro`を使用することで、dockerのnginxのipアドレスを使うことができます。
実際に`docker network inspect アプリ名_default`を打ち込むと、nginxのipアドレスが出てくると思います。なので、http://172.18.0.4とか打てば表示されるはずです。
しかし、それだけでは、docker-compose upをするたびにipアドレスが変わってしまい、ご面倒なので、ipアドレスを固定することにします。その設定がdocker-compose.ymファイルの「networks」の部分です。上の例では「172.28.0.4」に固定しています。
environmentのHOST_NAMEの部分には、自分がつけたいホスト名を書いてください、このHOST_NAMEがdefault.conの$HOST_NAMEに勝手に結びつきます。
ipアドレスを固定するなら/etc/hostsも修正
ipアドレスを固定して、ドメインを使いたい場合は、こんな感じに`etc/hosts'を修正します。
172.28.0.4 app.com
そうしたら、http://app.comにアクセスすると、172.28.0.4のipアドレスに結びつけてくれて、開発環境でもドメインを使えるようになります。
これで、開発環境でもドメインを使ったdocker環境が完成しました!
ドメインではなく、localhostでも良い場合もこのnoteを参考にしてもらえば簡単に構築できると思います!
この記事が気に入ったらサポートをしてみませんか?