どうも。最近ネタ切れ感が拭いきれない docker 初心者を抜け出せないかわはらです。
はじめに
dockerでコンテナ内であれこれしたデータの永続化したいな案件が発生したので調べて試した- ついでに
Amazon Linuxでdockerが使えるようなのでそっちで試した
参考
コンテナ型仮想環境におけるデータの永続化の必要性
小難しいタイトル↑だが自分は以下のように考えている。
- データの永続化は出来たら嬉しい
- でも、そもそも破棄が前提の環境においてデータの保存は検討しない(保存しない)
- ログの類はコンテナをホストしている環境等(コンテナ以外の環境)に
fluentd等を使って流してそちらで保存する
ということで、永続化に関してはコンテナ自身でどうこうではなく外部に保存というのがイイなあと思っている。
Amazon Linux で docker 使えた!
docker = Ubuntu と思っていた、やっぱりニワカな自分にとっては「ほー」としか言いようがないので試した。
インストール
sudo yum install docker
依存パッケージを含めて以下のようなパッケージがインストールされる。
================================================================================================================================================================================================= Package アーキテクチャー バージョン リポジトリー 容量 ================================================================================================================================================================================================= インストール中: docker x86_64 0.9.0-2.13.amzn1 amzn-updates 5.0 M 依存性関連でのインストールをします: bridge-utils x86_64 1.2-10.7.amzn1 amzn-main 32 k libcgroup x86_64 0.40.rc1-5.11.amzn1 amzn-main 146 k lxc x86_64 0.9.0-2.7.amzn1 amzn-updates 89 k lxc-libs x86_64 0.9.0-2.7.amzn1 amzn-updates 118 k
起動
sudo /etc/init.d/docker start 又は sudo service docker start
試しに docker ps

centos コンテナ
sudo docker run -t -i centos /bin/bash
サディスティックにいきなり docker run から始めた。

起動した。ということで以下は Amazon Linux 上の docker で色々と試した。
-v オプションや VOLUME コマンド
で本題。docker に備わっているデータの永続化を目的と(しているかどうかは解らないけど)コンテナ落としてもデータが消えないようなオプションを見てみる。
-v オプション の簡単な使い方
コンテナ実行時(docker run 時)に指定するオプション。

ということで以下のように実行するとホスト側のディレクトリをコンテナのディレクトリにマウントすることが出来る。
sudo docker run -t -i -v /var/docker-volume:/var/volume:rw centos /bin/bash
事前に /var/docker-volume はコンテナが稼働するホスト上(ここでは Amazon Linux 上)で作っておく。

上図のようにコンテナ側で /var/volume が作られているので適当にファイルを touch してコンテナ抜けてホスト側で確認、ホスト側でファイル touch してさらに新しいコンテナで確認というのが以下の流れ。

あら、とっても簡単にコンテナのデータ永続化が出来そうです。
VOLUME コンテナ
VOLUME 用のコンテナを立ちあげておいて他のコンテナから利用することも出来る。
VOLUME 用のコンテナを起動する
sudo docker run -v /var/volume1 -v /var/volume2 -name VOLUME centos true
VOLUME 用のコンテナを利用するコンテナを起動する。
sudo docker run -t -i -rm -volumes-from VOLUME -name volume-client centos bash
以下のようなメッセージが表示されるが一旦は無視。
Warning: '-rm' is deprecated, it will be removed soon. See usage. Warning: '-volumes-from' is deprecated, it will be removed soon. See usage. Warning: '-name' is deprecated, it will be removed soon. See usage.
以下は VOLUME コンテナを二つのコンテナからさながら NFS のように利用出来ている。

軽く試したところでは同時に利用することも出来ている。ほー、スゴイなあ。
最後に
- 久々にコーフンした
- はじめに「データの永続化...」云々とか言っていたけど色々出来そうな気がしてきた
- でも異なるコンテナから同時にマウントとかした場合の排他処理ってどうなるかが気になるな