TOP

DockerでanyenvをDataVolumeContainerに入れてコンテナ間で共有するようにした

2016-12-09 19:13:59

構成変更前

Dockerで開発環境用コンテナを作る際、今までは、各コンテナ全てにanyenvを入れて構築していました

考えた

しかし、いざ開発したものを検証コンテナにデプロイして、とか、即席でちょっとクライアントに見せるためだけの公開環境ほしいなーみたいな時に、docker runしてpyenv installしてpip installして・・・というのは時間かかるので、(特にpyenv installrbenv 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権限になってしまうので、commandchownする事で、docker run時にuid=1000をセットしてます

github