ふるてつのぶろぐ

福岡在住のエンジニアです。

写真提供:福岡市

今度は客先でコンテナ勉強会

今日すること

f:id:tetsufuru:20190806104529p:plain:w100
こんにちはふるてつです。

ただいま客先の勉強会にてDockerを勉強中で、まずは入門としてこちらのサイト「入門Docker」を勉強しております。
https://y-ohgi.com/introduction-docker/
今回は少なめですが、「コンポーネント」 メニューの中から「volume」ページをもくもくとしました。
またいつものように勉強した内容を書きます。

f:id:tetsufuru:20191002191552p:plain:w500

ボリュームはデータを永続化するための機能になります。

1. Volume

Volumeには2つの種類が存在するそうです。

1-1. Data Volume

Volume は Docker Container のライフサイクルの外で管理されるファイル/ディレクトリとのことです。
ではまず Volume の方を試してみます、下記のコマンドでボリュームをマウントしてみます。
docker run -v /tmp/text ubuntu touch /tmp/text/hogefugapiyo

ところがこちらを流しても、なにもおこりません🤢
"hogefugapiyo"というファイルができてエクスプローラーで見えるはずですが、どこにもファイルができません。
わたしの場合ホストOSがWindowsなので、どうやら基本的にC:ドライブを含んだ書き方にしないとならない模様です。
というわけでやむなく下記のように-v <ホストOSのディレクトリ>:<コンテナのディレクトリ>と書き替えました。
こちらはファイルができました。

docker run -v /c/tmp:/tmp ubuntu touch /tmp/text/hogefugapiyo

下図のようにエクスプローラーでファイルが見えました、よしよし ✨ f:id:tetsufuru:20191002224956p:plain:w400

その昔、VirtualBoxでも同じようなことができてましたねぇ、少し思い出しました。

あとはvolume が作成されたか確認のために、docker volume lsを実行します。 うーむ、しかし volume は1件も表示されません。
volumeのところはなんだか難しいですね、Windows版のDockerだと表示されないのかも🤔
ここは気を取り直して次にいきます。

1-2. Data Volume Container

次は、Data Volume Container。
他のDocker Container で指定されているVolumeを参照するための機能とのことです。

1-1 の Data Volume は他のコンテナからは見えないんですね多分。
コンテナ同士で値を引き渡すときなどに使うのでしょう。

では下のコマンドを試します。
docker run --name volume-test -v /tmp/test ubuntu touch /tmp/test/{hoge,fuga,piyo}

今度はエラーになりました。
Dockerubuntuだからか、複数ファイルのtouchコマンドを受け付けていないようです。

docker run --name volume-test -v /tmp/test ubuntu touch /tmp/test/{hoge,fuga,piyo}
発生場所 行:1 文字:72
+ ... --name volume-test -v /tmp/test ubuntu touch /tmp/test/{hoge,fuga,piy ...
+                                                                 ~
パラメーター一覧に引数が存在しません。
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : MissingArgument

仕方がないので、こちらも1ファイルだけに書き直します。
C:ドライブのところも同じく書き直します。

 docker run --name volume-test -v /c/tmp:/tmp ubuntu touch /tmp/tesst/piyo

今度はエラーになりません。

では、別のコンテナを新しく起動して、さきほど作成した volume-test コンテナのファイルへアクセスできるか確認してみます。
docker run ubuntu ls -l /tmp/test

なるほど確かにファイルを認識できていません。

docker run ubuntu ls -l /tmp/test
ls: cannot access '/tmp/test': No such file or directory

次はData Volume Containerの方のコマンドを実行します。
docker run --volumes-from volume-test ubuntu ls -l /tmp/test

docker run --volumes-from volume-test ubuntu ls -l /tmp/test
total 0
-rwxr-xr-x 1 root root 0 Oct  2 11:29 piyo

こちらではファイルを認識しました。
volume には自コンテナ内のみと他コンテナから見れるものと2種類あるんですね。

今日の感想


今回もまた「入門Docker」の内容をそのまま、まとめた内容になりました。
volumeのところは少し難しく途中で詰まることがあり、その分内容も少し短くなりました。
あっさりした内容で申し訳ありませんが、次は頑張ります✨

それではまた