Docker + Nginx + PHP-FPM이라면 40 초 정도로 환경을 준비 할 수있는 docker-compose가 즐거워졌습니다.
GitHub
이쪽에 정리했으므로, 결론만 알고 싶은 분은, 이쪽으로부터 부디.
mochizukikotaro/docker-nginx-phpfpm - branch:simple
할 수있는 것
환경을 docker-compose를 사용하여 쉽게 만들 수 있습니다.
필자는 Mac 사용자이고, 그 전제이지만, Doceker for Mac이 들어 있으면 다음 명령으로 phpinfo() 에 따릅니다.
시작 명령
$ git clone [email protected]:mochizukikotaro/docker-nginx-phpfpm.git
$ cd docker-nginx-phpfpm.git
$ docker-compose up
위의 세 가지 명령으로
localhost:8080
에 액세스하면 아래 화면을 따라갑니다.나중에 명령
docker-compose up
에서 컨테이너가 일어나고 있습니다만, 공부이므로 삭제도 확실히 해 두고 싶은 곳입니다.(아래 코드
piyo
는 내 디렉토리 이름이 그렇게 되었을 뿐이므로 별로 신경 쓰지 마십시오.)# プロセス確認
$ docker-compose ps
Name Command State Ports
-------------------------------------------------------------
piyo_php_1 docker-php-entrypoint php-fpm Exit 137
piyo_web_1 nginx -g daemon off; Exit 137
# コンテナ削除
$ docker-compose down
Removing piyo_web_1 ... done
Removing piyo_php_1 ... done
소스 코드 소개
코드도 가능한 한 간단한 구성으로하고 있습니다.
$ tree
.
├── Dockerfile
├── README.md
├── code
│ └── index.php
├── docker-compose.yml
└── site.conf
이것뿐이므로 별로 어려운 일은 없다고 생각합니다.
docker-compose.ymlversion: '3'
services:
web:
build: ./
ports:
- "8080:80"
depends_on:
- php
php:
image: php:7-fpm
volumes:
- ./code:/code
site.confserver {
index index.php index.html;
server_name localhost;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
root /code;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass php:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
code/index.php<?php
echo phpinfo();
모든 소스는 여기 .
이상입니다.
여기까지의 이야기는, 간단하고 알기 쉽다고 생각합니다.
고찰, 해설 등
그 1. links
처음에 docker-compose.yml
를 만들었을 때는 아래와 같이 links:
를 사용하고 있었습니다.
docker-compose.ymlweb:
# 略
links:
- php
# 略
links:
를 설정하면, nginx 의 컨테이너의 /etc/hosts
에 서비스 정보가 추가됩니다. 이것에 의해, site.conf
에 이하와 같이 기재할 수가 있습니다.
fastcgi_pass php:9000;
실제로 hosts 의 정보를 확인해 보면 다음과 같이 되어 있었습니다.
# まずは、nginx コンテナに入る
# ぼくは git clone *** piyo でディレクトリ名指定しているので、以下のようなカンジです。
# コンテナ名を確認
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6ee2fb5c8aaa nginx:latest "nginx -g 'daemon ..." 6 minutes ago Up 6 minutes 443/tcp, 0.0.0.0:8080->80/tcp piyo_web_1
9b8ed908d621 php:7-fpm "docker-php-entryp..." 6 minutes ago Up 6 minutes 9000/tcp piyo_php_1
# 中に入る
$ docker exec -it piyo_web_1 bash
root@6ee2fb5c8aaa:/#
# 入ったあとに cat
root@6ee2fb5c8aaa:/# cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2 php 9b8ed908d621 piyo_php_1 # ちゃんと追加されてました。
172.17.0.2 php_1 9b8ed908d621 piyo_php_1
172.17.0.2 piyo_php_1 9b8ed908d621
172.17.0.3 6ee2fb5c8aaa
2. links: 대신 depends_on: 을 사용하면
ngix 컨테이너의 hosts 에 php 라고는 쓰여지지 않았습니다.
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
14487c92de8b dockernginxphpfpm_web "nginx -g 'daemon ..." 10 hours ago Up 10 hours 443/tcp, 0.0.0.0:8080->80/tcp dockernginxphpfpm_web_1
ba2d44f70e13 php:7-fpm "docker-php-entryp..." 10 hours ago Up 10 hours 9000/tcp dockernginxphpfpm_php_1
$ docker exec -ti dockernginxphpfpm_web_1 bash
root@14487c92de8b:/# cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.21.0.3 14487c92de8b # これが使われています。
TODO:
저기, nginx 의 설정 파일 site.conf 의 fastcgi_pass php:9000;
는 굉장한 것인가.... links 덕분에 hosts 에 걸려 움직인다고 생각했습니다만. 어떤 구조일까. .. 공부합니다.
약간의 결과 :
nginx 컨테이너의 /etc/resolv.conf
에 nameserver 가 지정되어 있으므로, DNS 가 우울합니다. 실제로, ping php
에 대해서 이름 해결은 되고 있었습니다.
$ docker exec -it dockernginxphpfpm_web_1 ping php
PING php (172.21.0.2): 56 data bytes
64 bytes from 172.21.0.2: icmp_seq=0 ttl=64 time=0.102 ms
64 bytes from 172.21.0.2: icmp_seq=1 ttl=64 time=0.216 ms
3. nginx/conf.d/default.conf를 덮어 씁니다.
여기에 nginx 구성 파일 에 대해 물었지만 기본적으로 default.conf가 있습니다. 그래서 처음에는 다음과 같이 했습니다.
docker-compose.yml# before
- ./site.conf:/etc/nginx/conf.d/site.conf
# after ( default.conf を上書きます)
- ./site.conf:/etc/nginx/conf.d/default.conf
before의 상태라면, default 의 location 가 효과가 버려, 잘 작동하지 않았습니다.
(nginx에 대해서도 공부 부족이므로, 현재 공부 중입니다.)
이상입니다. 고마워요.
Reference
이 문제에 관하여(Docker + Nginx + PHP-FPM이라면 40 초 정도로 환경을 준비 할 수있는 docker-compose가 즐거워졌습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/mochizukikotaro/items/b398076cb57492980447
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
$ tree
.
├── Dockerfile
├── README.md
├── code
│ └── index.php
├── docker-compose.yml
└── site.conf
version: '3'
services:
web:
build: ./
ports:
- "8080:80"
depends_on:
- php
php:
image: php:7-fpm
volumes:
- ./code:/code
server {
index index.php index.html;
server_name localhost;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
root /code;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass php:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
<?php
echo phpinfo();
그 1. links
처음에
docker-compose.yml
를 만들었을 때는 아래와 같이 links:
를 사용하고 있었습니다.docker-compose.yml
web:
# 略
links:
- php
# 略
links:
를 설정하면, nginx 의 컨테이너의 /etc/hosts
에 서비스 정보가 추가됩니다. 이것에 의해, site.conf
에 이하와 같이 기재할 수가 있습니다.fastcgi_pass php:9000;
실제로 hosts 의 정보를 확인해 보면 다음과 같이 되어 있었습니다.
# まずは、nginx コンテナに入る
# ぼくは git clone *** piyo でディレクトリ名指定しているので、以下のようなカンジです。
# コンテナ名を確認
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6ee2fb5c8aaa nginx:latest "nginx -g 'daemon ..." 6 minutes ago Up 6 minutes 443/tcp, 0.0.0.0:8080->80/tcp piyo_web_1
9b8ed908d621 php:7-fpm "docker-php-entryp..." 6 minutes ago Up 6 minutes 9000/tcp piyo_php_1
# 中に入る
$ docker exec -it piyo_web_1 bash
root@6ee2fb5c8aaa:/#
# 入ったあとに cat
root@6ee2fb5c8aaa:/# cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2 php 9b8ed908d621 piyo_php_1 # ちゃんと追加されてました。
172.17.0.2 php_1 9b8ed908d621 piyo_php_1
172.17.0.2 piyo_php_1 9b8ed908d621
172.17.0.3 6ee2fb5c8aaa
2. links: 대신 depends_on: 을 사용하면
ngix 컨테이너의 hosts 에 php 라고는 쓰여지지 않았습니다.
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
14487c92de8b dockernginxphpfpm_web "nginx -g 'daemon ..." 10 hours ago Up 10 hours 443/tcp, 0.0.0.0:8080->80/tcp dockernginxphpfpm_web_1
ba2d44f70e13 php:7-fpm "docker-php-entryp..." 10 hours ago Up 10 hours 9000/tcp dockernginxphpfpm_php_1
$ docker exec -ti dockernginxphpfpm_web_1 bash
root@14487c92de8b:/# cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.21.0.3 14487c92de8b # これが使われています。
TODO:
저기, nginx 의 설정 파일 site.conf 의
fastcgi_pass php:9000;
는 굉장한 것인가.... links 덕분에 hosts 에 걸려 움직인다고 생각했습니다만. 어떤 구조일까. .. 공부합니다.약간의 결과 :
nginx 컨테이너의
/etc/resolv.conf
에 nameserver 가 지정되어 있으므로, DNS 가 우울합니다. 실제로, ping php
에 대해서 이름 해결은 되고 있었습니다.$ docker exec -it dockernginxphpfpm_web_1 ping php
PING php (172.21.0.2): 56 data bytes
64 bytes from 172.21.0.2: icmp_seq=0 ttl=64 time=0.102 ms
64 bytes from 172.21.0.2: icmp_seq=1 ttl=64 time=0.216 ms
3. nginx/conf.d/default.conf를 덮어 씁니다.
여기에 nginx 구성 파일 에 대해 물었지만 기본적으로 default.conf가 있습니다. 그래서 처음에는 다음과 같이 했습니다.
docker-compose.yml
# before
- ./site.conf:/etc/nginx/conf.d/site.conf
# after ( default.conf を上書きます)
- ./site.conf:/etc/nginx/conf.d/default.conf
before의 상태라면, default 의 location 가 효과가 버려, 잘 작동하지 않았습니다.
(nginx에 대해서도 공부 부족이므로, 현재 공부 중입니다.)
이상입니다. 고마워요.
Reference
이 문제에 관하여(Docker + Nginx + PHP-FPM이라면 40 초 정도로 환경을 준비 할 수있는 docker-compose가 즐거워졌습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/mochizukikotaro/items/b398076cb57492980447텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)