ようへいの日々精進XP

よかろうもん

docker のボリュームオプションを使った(Amazon Linux で docker 使えた!)

どうも。最近ネタ切れ感が拭いきれない docker 初心者を抜け出せないかわはらです。

はじめに

  • docker でコンテナ内であれこれしたデータの永続化したいな案件が発生したので調べて試した
  • ついでに Amazon Linuxdocker が使えるようなのでそっちで試した

参考


コンテナ型仮想環境におけるデータの永続化の必要性

小難しいタイトル↑だが自分は以下のように考えている。

  • データの永続化は出来たら嬉しい
  • でも、そもそも破棄が前提の環境においてデータの保存は検討しない(保存しない)
  • ログの類はコンテナをホストしている環境等(コンテナ以外の環境)に 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

f:id:inokara:20140403055958p:plain

centos コンテナ

sudo docker run -t -i centos /bin/bash

サディスティックにいきなり docker run から始めた。

f:id:inokara:20140403060442p:plain

起動した。ということで以下は Amazon Linux 上の docker で色々と試した。


-v オプションや VOLUME コマンド

で本題。docker に備わっているデータの永続化を目的と(しているかどうかは解らないけど)コンテナ落としてもデータが消えないようなオプションを見てみる。

-v オプション の簡単な使い方

コンテナ実行時(docker run 時)に指定するオプション。

f:id:inokara:20140403060937p:plain

ということで以下のように実行するとホスト側のディレクトリをコンテナのディレクトリにマウントすることが出来る。

sudo docker run -t -i -v /var/docker-volume:/var/volume:rw centos /bin/bash

事前に /var/docker-volume はコンテナが稼働するホスト上(ここでは Amazon Linux 上)で作っておく。

f:id:inokara:20140403061324p:plain

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

f:id:inokara:20140403063030p:plain

あら、とっても簡単にコンテナのデータ永続化が出来そうです。

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 のように利用出来ている。

f:id:inokara:20140403070019p:plain

軽く試したところでは同時に利用することも出来ている。ほー、スゴイなあ。


最後に

  • 久々にコーフンした
  • はじめに「データの永続化...」云々とか言っていたけど色々出来そうな気がしてきた
  • でも異なるコンテナから同時にマウントとかした場合の排他処理ってどうなるかが気になるな