構成変更前

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をセットしてます

github