勉強日記

チラ裏

【Docker Compose】volumesによるコンテナ間コード共有

ユースケース

  • 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が反映される