cloudpack大阪の佐々木です。
ECSでコンテナ用のボリュームを作ったらどこに保存されるか?という話です。
ECSで使うamazon-ecs-optimizedのAMIはデフォルトでは下記のディスク構成になっています。(2015.09.d 以降)
- /dev/xvda 8G
- /dev/xvdcz 22G
http://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/launch_container_instance.html
Amazon ECS に最適化された、2015.09.d 以降の AMI を使用している場合、インスタンスには 2 つのボリュームが設定されます。[Root] ボリュームはオペレーティングシステム用で、2 番目の Amazon EBS ボリューム (/dev/xvdcz にアタッチ) は Docker 用です。
永続化データを取り扱う場合、ボリュームを追加すると思います。/dev/xvdcz
はDocker用ボリュームってことなので、当然そちらに作られるのかと思ったのですが、違うようです。
https://github.com/aws/amazon-ecs-agent/issues/312
/dev/xvdcz is dedicated to layer storage; since volumes are not layers, they’re not stored there.
実際にやってみます。
タスク定義はこんな感じです。
"volumes": [ { "name": "volume-0", "host": { "sourcePath": "/ecs/mysql" } } ]
dfではRootボリュームの/dev/xvda1
だけが見えています。
$ df -h ファイルシス サイズ 使用 残り 使用% マウント位置 /dev/xvda1 7.8G 1.7G 6.1G 22% / devtmpfs 1.9G 96K 1.9G 1% /dev tmpfs 1.9G 0 1.9G 0% /dev/shm
コンテナにログインし、マウントしているボリュームに2Gのファイルを作成します。
$ docker exec -it 706e24a04caa /bin/bash root@706e24a04caa:/# dd if=/dev/zero of=/var/lib/mysql/test.out bs=1024 count=2000000 root@706e24a04caa:/# ls -lh /var/lib/mysql/test.out -rw-r--r-- 1 root root 2.0G Apr 25 04:47 /var/lib/mysql/test.out
ログアウトして、dfを実行してみます。
[ec2-user@ip-172-31-49-18 ~]$ df -h ファイルシス サイズ 使用 残り 使用% マウント位置 /dev/xvda1 7.8G 3.6G 4.2G 47% / devtmpfs 1.9G 96K 1.9G 1% /dev tmpfs 1.9G 0 1.9G 0% /dev/shm
/dev/xvda1
が増えています。
ではDocker用のボリューム /dev/xvdcz
はどんな感じで使われているのでしょうか?
ここに詳しく書いてました。
http://enakai00.hatenablog.com/entry/20140420/1397981156
ホストOSからはこんな感じで見えています。
# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT xvda 202:0 0 8G 0 disk └─xvda1 202:1 0 8G 0 part / xvdcz 202:26368 0 50G 0 disk └─xvdcz1 202:26369 0 50G 0 part ├─docker-docker--pool_tmeta 253:0 0 52M 0 lvm │ └─docker-docker--pool 253:2 0 49.5G 0 lvm │ ├─docker-202:1-263192-5c6d48e2f8751428fe02afdadbd0cea776f6019d7ea6b84b3313a66d0c1f8ed7 253:3 0 10G 0 dm │ ├─docker-202:1-263192-eca78b256bf5721af414556f0ab42f4436e5ddd2dfb060da1f0ccf843cdbe11a 253:4 0 10G 0 dm │ ├─docker-202:1-263192-035491c621338eac035f0a3ee3894dc7c02c0f2989a33bce5e4628226edb1f10 253:5 0 10G 0 dm │ ├─docker-202:1-263192-d27d60081d632b3cc0e5b7c7213f40b4eec77d445d0c445abdf69efc83535d54 253:6 0 10G 0 dm │ └─docker-202:1-263192-60b1cb416a8ced69c0f6f5c71b842298427dfa406dd7ed6f5f44a56dc3d5f78f 253:7 0 10G 0 dm └─docker-docker--pool_tdata 253:1 0 49.5G 0 lvm └─docker-docker--pool 253:2 0 49.5G 0 lvm ├─docker-202:1-263192-5c6d48e2f8751428fe02afdadbd0cea776f6019d7ea6b84b3313a66d0c1f8ed7 253:3 0 10G 0 dm ├─docker-202:1-263192-eca78b256bf5721af414556f0ab42f4436e5ddd2dfb060da1f0ccf843cdbe11a 253:4 0 10G 0 dm ├─docker-202:1-263192-035491c621338eac035f0a3ee3894dc7c02c0f2989a33bce5e4628226edb1f10 253:5 0 10G 0 dm ├─docker-202:1-263192-d27d60081d632b3cc0e5b7c7213f40b4eec77d445d0c445abdf69efc83535d54 253:6 0 10G 0 dm └─docker-202:1-263192-60b1cb416a8ced69c0f6f5c71b842298427dfa406dd7ed6f5f44a56dc3d5f78f 253:7 0 10G 0 dm
まとめ
ECSで永続化データ用のボリュームを使う場合は、Rootボリュームをあらかじめ大きくしておくか、別ボリュームをアタッチしてマウントしとく必要があるようです。