- docker-composeでphp-fpmとnginxを立ち上げる
- php-fpmコンテナの静的ファイルだけnginxコンテナから配信したい
結論
- volumesを用いて、コンテナ間でコード共有可能
- volumeが空のときは、イメージのディレクトリがvolumeに永続化される感じ
- ただし、そのバージョンのコードが永続化してしまう
- 空でないvolumeをマウントすると、イメージのディレクトリが隠れてしまう
- 新しいコードを詰めてphp-fpmイメージをリビルドしても、古いコードで隠れてしまう
- コード更新時は当該volumeを削除すればOK
docker-compose down -v
が使える
- docker-compose.ymlに書いてあるvolumes全部消えるので注意
- 永続化したいものも消える...
構成
.
├── docker-compose.yml
├── nginx
│ └── Dockerfile
└── php-fpm
├── Dockerfile
└── src.txt
FROM alpine
WORKDIR /var/www/public
COPY src.txt /var/www/public/src.txt
CMD ["cat", "/var/www/public/src.txt"]
src ver 1.0
FROM alpine
WORKDIR /var/www/public
CMD ["cat", "/var/www/public/src.txt"]
version: "3"
services:
php-fpm:
build:
context: ./php-fpm
volumes:
- code_share:/var/www/public
nginx:
build:
context: ./nginx
volumes:
- code_share:/var/www/public
depends_on:
- php-fpm
volumes:
code_share:
ソース共有を確かめる
docker-compose up -d --build
docker-compose logs
Attaching to experimental_nginx_1, experimental_php-fpm_1
nginx_1 | src ver 1.0
php-fpm_1 | src ver 1.0
- OK.
php-fpmイメージビルド時にCOPYされた/var/www/public/src.txt
が見えている
ソースを更新してみる
- src ver 1.0
+ src ver 1.1
docker-compose down
docker-compose up -d --build
docker-compose logs
Attaching to experimental_nginx_1, experimental_php-fpm_1
nginx_1 | src ver 1.0
php-fpm_1 | src ver 1.0
- 新しいsrc.txtが反映されない
code_share
ボリュームに/var/www/public
を永続化したので当然
- ボリュームが空な初回のみ、コンテナ間コード共有に使える
docker-compose down時にボリューム消す
docker-compose down -v
Removing experimental_nginx_1 ... done
Removing experimental_php-fpm_1 ... done
Removing network experimental_default
Removing volume experimental_code_share
docker-compose up -d --build
docker-compose logs
Attaching to experimental_nginx_1, experimental_php-fpm_1
php-fpm_1 | src ver 1.1
nginx_1 | src ver 1.1