LoginSignup
7

More than 5 years have passed since last update.

開発環境のソースをコンテナでなくボリュームで管理する

Last updated at Posted at 2015-01-29

Dockerを使っていて、開発中に頻繁に変更する部分、ソースコードなどをCOPYなどでコンテナ内に持って行くと毎回ビルドされて大変。とりあえずホストのディレクトリをボリュームとして使えるのでそれを利用すると楽。

構成

Dockerfileの隣にある./mnt/にnodeアプリケーションをおき、ボリュームとして利用してみる例。もしベストプラクティスの構成があるなら早く覚えたい気持ちはある。

$ tree
.
├── Dockerfile
├── README.md
├── conf
│   └── aws
│       ├── credentials
│       └── credentials.orig
└── mnt
    └── app
        ├── index.html
        └── index.js

設定

以下はnodeのaws-sdkを使うための設定で本題には関係ない。

$ cp -p conf/aws/credentials.orig conf/aws/credentials
$ vi conf/aws/credentials.orig
credentials.orig
[default]
aws_access_key_id = XXXX
aws_secret_access_key = XXXX

全体をgit管理に入れ、credentials.gitignoreしておく。

Dockerfile

必要なコマンドを書く。アプリケーションのある ./mnt/COPYの対象から除いてあるが、あとでボリュームとして使えるようになる。nodeモジュール管理もpackage.jsonでうまくやりたい。

FROM centos:centos6
ENV HOME /root/
WORKDIR $HOME

RUN     yum -y install tcpdump 
RUN     yum -y install cairo cairo-devel cairomm-devel libjpeg-turbo-devel pango pango-devel pangomm pangomm-devel giflib-devel

RUN     rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
RUN     yum -y install npm

EXPOSE  8080

COPY conf/aws/* $HOME/.aws/

RUN npm install express@3.2.4
RUN npm install d3
RUN npm install aws-sdk
RUN npm install canvas
RUN npm install fs
RUN npm install socket.io

ENV NODE_PATH $HOME/node_modules

CMD ["node", "/mnt/app/index.js"]

ボリュームを使うには-vオプションでdocker runする。ホスト側のディレクトリは絶対パスでないといけない

$ docker build -t node .

$ docker run -it -v `pwd`/mnt/app:/mnt/app node
Running on port...

コマンドを指定しない場合、CMDで指定しておいたコマンドが実行される。

これで

  • 大半一度で決まる設定やインストールはコンテナ内
  • 頻繁なソースコード変更はコンテナ外

におき、ビルド工数を最小化しながら両方git管理するという分離ができる。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7