構成変更前
Dockerで開発環境用コンテナを作る際、今までは、各コンテナ全てにanyenvを入れて構築していました
考えた
しかし、いざ開発したものを検証コンテナにデプロイして、とか、即席でちょっとクライアントに見せるためだけの公開環境ほしいなーみたいな時に、docker runしてpyenv installしてpip installして・・・というのは時間かかるので、(特にpyenv installとrbenv install)anyenvの領域をDataVolumeContainer化してみた
構成変更後
これで例えば、どっかのコンテナで1回でもpyenv install 3.5.0すれば、全部の開発環境でpython 3.5.0が使えるようになりました
docker-compose.yml
version: "2"
services:
##
# Debian Workspace
##
9zilla:
container_name: 9zilla
hostname: 9zilla
image: nobiki/9zilla:latest
ports:
- "80:80"
- "443:443"
volumes:
- /var/containers/9zilla/etc/nginx/conf.d/:/etc/nginx/conf.d/
volumes_from:
- 9zilla-volume-anyenv
privileged: true
command: /sbin/init
##
# Web Server (.10)
##
9zilla-lamp:
container_name: 9zilla-lamp
hostname: 9zilla-lamp
image: nobiki/9zilla-lamp:latest
volumes:
- /var/containers/9zilla-lamp/etc/apache2/sites-available/:/etc/apache2/sites-available/
volumes_from:
- 9zilla-volume-anyenv
privileged: true
command: /sbin/init
##
# Data Volume (.90)
##
9zilla-volume-anyenv:
container_name: 9zilla-volume-anyenv
hostname: 9zilla-volume-anyenv
image: nobiki/9zilla-volume-anyenv:latest
volumes:
- /home/9zilla/.anyenv/
- /var/containers/9zilla-volume-anyenv/home/9zilla/.anyenv/envs/:/home/9zilla/.anyenv/envs/
command: /bin/chown -R 1000:1000 /home/9zilla/.anyenv/envs/
docker-composeはこんな感じで、volumes_fromにanyenv用DataVolumeContainer(上の例では、9zilla-volume-anyenv)を指定します
volumesに書いてるenvsディレクトリは、普通にマウントするとroot権限になってしまうので、commandでchownする事で、docker run時にuid=1000をセットしてます

