ユースケース
- 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
- ./php-fpm/Dockerfile
FROM alpine
WORKDIR /var/www/public
COPY src.txt /var/www/public/src.txt
CMD ["cat", "/var/www/public/src.txt"]
- ./php-fpm/src.txt
src ver 1.0
- ./nginx/Dockerfile
FROM alpine
WORKDIR /var/www/public
CMD ["cat", "/var/www/public/src.txt"]
- docker-compose.yml
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
が見えている
ソースを更新してみる
-
./php-fpm/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
- volume消える
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
- 新しいsrc.txtが反映される