複数コンテナによるデータ用ボリュームの共有

今回は、Docker実践ガイド 第2版 (impress top gear) | Amazon.co.jp を参考に

前回作成したカスタムイメージを元にホストOSのボリュームをマウントして複数コンテナを起動して、コンテナ間でボリュームを共有してみたいと思います。

まず、volume createコマンドからデータ用のボリュームをホストOSに作成します。

$ docker volume create apa000vol1

次に、run コマンドでApache コンテナapa000saba01 を-v オプションでマウント先の記憶領域を指定して起動します。

$ docker run --name apa000saba01 -d -p 8091:80 -v apa000vol1:/usr/local/apache2/htdocs httpd:sabamiso

volume inspect コマンドで詳細情報を確認してみます。

$ docker volume inspect apa000vol01
[ { "CreatedAt": "2022-02-23T13:37:20+09:00", "Driver": "local", "Labels": {}, "Mountpoint": "/var/lib/docker/volumes/apa000vol1/_data", "Name": "apa000vol1", "Options": {}, "Scope": "local" } ]

続いて以下のコマンドでは、ボリュームを共有する別のコンテナapa000saba02 を–volumes-from オプションで作成して、先に作成したコンテナのデータ領域を共有して利用可能としています。

docker run --name apa000saba02 -d -p 8092:80 --volumes-from apa000saba01 httpd:sabamiso

ここでdocker exec -itオプションで起動済みのコンテナをbashのコントロール付きで実行します。

$ docker exec -it apa000saba01 /bin/bash

apa000saba01コンテナ用のプロンプトに変わって、Apacheのルートディレクトリが表示できました。

root@cc5c3e9267d3:/usr/local/apache2# ls -l ./htdocs
total 56
-rw-rw-r--. 1 root root   151 Feb  3 07:25 index.html
-rw-rw-r--. 1 root root 52264 Feb  3 07:25 sabamiso.jpg

コンテナapa000saba01のデータ領域にファイルを作成し両方のコンテナからアクセスできることを確認します。

root@cc5c3e9267d3:/usr/local/apache2# echo "Hello Docker shared volume" > ./htdocs/data0001.txt

※ エスケープシーケンス[Ctrl]+[P] → [Ctrl]+[Q] を押してコンテナを起動したままプロンプトから抜けて別のコンテナに入り中身をのぞいてみます。

$ docker exec -it apa000saba02 /bin/bash

先ほど作成したファイルの中身を確認することができました。

root@c44ffb008f9b:/usr/local/apache2# cat ./htdocs/data0001.txt
Hello Docker shared volume

最後に、ブラウザでlocalhost:8091 localhost:8092でアクセスできることを確認してコンテナからexit, stopして終了します。

root@cc5c3e9267d3:/usr/local/apache2# exit
[gusachan@www ~]$ docker stop apa000saba01 apa000saba02

お疲れ様でした。

同じカテゴリーの記事

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です