LoginSignup
9
10

More than 5 years have passed since last update.

Dockerコンテナ間でファイルを共有(マウント)する

Last updated at Posted at 2019-03-11

概要

コンテナA(参照される側)で共有したいディレクトリを、コンテナB(参照する側)でマウントして参照する。

簡単なやり方の説明としては、

  • 参照される側はDockerfile内で VOLUME を指定。
  • 参照する側は docker run する際に --volumes-from で参照される側のコンテナ名を指定する。

という感じ。

環境

$ uname -a
Linux ip-172-31-32-92 4.14.77-70.59.amzn1.x86_64 #1 SMP Mon Nov 12 22:02:45 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

$ docker --version
Docker version 18.06.1-ce, build e68fc7a215d7133c34aa18e3b72b4a21fd0c6136

実装

1.Dockerfile

Dockerfileを二つ用意する。
Dockerfile1が参照される側、Dockerfile2が参照する側。

Dockerfile1の方の VOLUME に注目。
VOLUME に指定されたディレクトリがそのままマウントした参照する側のコンテナに出る。

Dockerfile1
FROM alpine:latest

WORKDIR /tmp/docker_mount_test
RUN touch hogehoge && \
    echo "this is hogehoge" > hogehoge

VOLUME /tmp/docker_mount_test
Dockerfile2
FROM alpine:latest

2.docker build

普通にビルドするだけ。

docker build -f Dockerfile1 . -t test1
docker build -f Dockerfile1 . -t test2

こんな感じになる。

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
test1               latest              b9bcae402c92        9 minutes ago       5.53MB
test2               latest              5cb3aa00f899        3 days ago          5.53MB
alpine              latest              5cb3aa00f899        3 days ago          5.53MB

3.docker run

下記の通り docker run する。
test2のコンテナの起動オプションに --volumes-from で参照される側のコンテナ名を指定する。

docker run -it --rm -d --name test1 test1
docker run -it --rm --volumes-from test1 --name test2 test2

test2の docker run でコンテナ側のシェルが立ち上がるので、Dockerfile1で VOLUME に指定したディレクトリ配下に生成したファイルを cat する。

Dockerfile2のコンテナ内で実行する
$ cat /tmp/docker_mount_test/hogehoge
this is hogehoge

という感じで、Dockerfile2のイメージから生成したコンテナから、Dockerfile1のイメージから生成したコンテナの中身が見えるようになる。

9
10
0

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
9
10