構成変更前
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
をセットしてます