DockerfileのVOLUME命令とはなにか?どのように利用すると便利か?
はじめに
Docker を使うに当たり Dockerfile の各種命令の理解は必須です。 FROM や RUN などは確実に登場します。
ただ、 VOLUME という命令を使う機会が多くなかったため、改めて理解を整理してみます。
また、どういうときに便利に利用できるのかについても取り上げてみたいと思います。
検証環境
VOLUME 命令の記述方法
まずは動作確認のために、VOLUME 命令を使用したかんたんな Dockerfile を作成してみます。
記述している内容は 3 命令しかありません。
FROM
: ベースとして利用するコンテナイメージ。何でも良いがここでは Alpine Linux を利用しています。RUN
: ルートディレクトリ直下に2つのディレクトリを作成しています。(/hoge
,/fuga
)VOLUME
: 配列で複数指定可能。ボリュームとしたいパスを指定。
ここでは、 /hoge
というディレクトリを ボリューム として定義しています。
では、VOLUME
にするとどんなメリットがあるのでしょうか?
VOLUME 命令で指定したパスは別コンテナからマウントできる
実用例をあげてみていきましょう。
先ほど作成した Dockerfile
を使って、Docker イメージをビルドします。
( genzouw/work
という名前の Docker イメージを作成しています。 )
無事ビルドされました。
このイメージを使ってコンテナプロセスを立ち上げてみます。
後々利用したいので、 work_container
という名前をつけて起動しておきます 。
ここで、 Dockerfile で作成した2つのディレクトリに、適当なファイルを作成してみます。
今度は別のコンテナを立ち上げてみますが、先程作成したコンテナ(名前は work_container
でしたね)のボリュームを利用するための --volumes-from
オプションを指定します。
更にこの状態でルートディレクトリの状態を確認してみましょう。
ここまで起こったことを整理してみます。
Dockerfile の VOLUME 命令に指定されたパスは docker run --volumes-from
でマウントできる
VOLUME 命令に指定されたパスは docker run --volumes-from
でマウントできる、ということですね。
ちなみに、参照できなかった/fuga
は参照はできていませんが、終了したコンテナプロセス内に残っています。
さて、どんなふうに利用すると便利なのでしょうか?
aws
コマンドやgcloud
コマンドで認証情報を保存しておくのに便利
aws
コマンドやgcloud
コマンドで認証情報を保存しておくのに便利です。
実際に機能を利用している Google のコンテナを見てみます。
Dockerfile
を参照すると最終行に以下の命令が記述されています。
Docker のデフォルトユーザは root ですので、デフォルトユーザのための設定ファイルをボリューム化していることがわかります。
このコンテナを利用するためには、まず以下のコマンドを実行します。
( ここではgcloud-config
というコンテナ名で実行しています。 )
認証情報や初期設定は gcloud-config
コンテナのボリュームに保存されます。
認証完了後は以下のコマンドのように、 --volumes-from gcloud-config
で認証情報ファイルをマウントさせ再利用できるというわけです。
td
コマンド(Treasure Data 用のクライアント)の認証などでも利用できる
以下のようなDockerfile
があれば、同じような使い方ができます。
ひとこと
ちょっと文章が雑でわかりにくいかもしれませんね。
ディスカッション
コメント一覧
まだ、コメントがありません