概要
docker-compose を使ってデータコンテナを作成し同時に別のコンテナからデータコンテナの領域をマウントする yml ファイルを作成してみました
環境
- macOS X 10.12.6
- docker 17.09.0-ce
- docker-compose 1.16.1
docker-compose.yml
全体は以下の通りです
version: '2'
services:
main:
image: nginx
ports:
- 80:80
volumes_from:
- vol
links:
- vol
container_name: main
vol:
build: .
image: vol_image
volumes:
- /share
container_name: vol
コンテナを永続化させるために nginx のイメージを使っています
動作確認のために使ってるだけなので他のイメージからでも OK です
vol がデータコンテナ側の定義になります
確認のためファイルを 1 つコンテナに追加してそれが共有されているか確認するためイメージはビルドします
ビルド後のイメージ名は vol_image とします
データコンテナが共有する領域を定義するのは volumes
で行います
今回の場合 /share
というパスが共有されるので、別のコンテナがデータコンテナをマウントすると /share が共有されます
main 側がマウントする側のコンテナになります
ポイントは volumes_from
になります
ここにはデータコンテナのコンテナ名を指定します
今回であれば vol になるので、それを指定します
links はなくても OK です
Dockerfile
ファイルを 1 つ追加しているだけです
nginx コンテナ内にある既存のファイルを使っても問題ないですがわかりやすいように独自でファイルを作成して追加しています
FROM nginx:latest
RUN mkdir -p /share
ADD ./hoge /share
動作確認
- docker-compose up -d
でコンテナのビルド、起動をしましょう
Creating network "docker_default" with the default driver
Building vol
Step 1/3 : FROM nginx:latest
latest: Pulling from library/nginx
bc95e04b23c0: Pull complete
110767c6efff: Pull complete
f081e0c4df75: Pull complete
Digest: sha256:004ac1d5e791e705f12a17c80d7bb1e8f7f01aa7dca7deee6e65a03465392072
Status: Downloaded newer image for nginx:latest
---> 1e5ab59102ce
Step 2/3 : RUN mkdir -p /share
---> Running in e6d30579c4f9
---> 3db5418c7f21
Removing intermediate container e6d30579c4f9
Step 3/3 : ADD ./hoge /share
---> 2dd5e9403fa6
Successfully built 2dd5e9403fa6
Successfully tagged vol_image:latest
WARNING: Image for service vol was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.
Creating vol ...
Creating vol ... done
Creating main ...
Creating main ... done
コンテナが起動したら領域がちゃんと main 側にマウントされているか確認してみます
docker exec -it main ls -ltr /share
total 4
-rw-r--r-- 1 root root 5 Oct 25 07:59 hoge
こんな感じでマウントされてファイルが存在していれば OK です
最後に
docker-compose でデータコンテナを作成して別コンテナでその領域をマウントする方法を紹介しました
docker コマンドの -v
と --volumes-from
を使っているだけです
ちなみにデータコンテナ側が停止すると共有されるのは停止するまでの状態になります
またデータコンテナ側には新規でファイルが追加されなくなります (当然かもしれませんが)
0 件のコメント:
コメントを投稿