仮想マシン
 Computer >> コンピューター >  >> ソフトウェア >> 仮想マシン

Dockerデータボリューム入門チュートリアル - マウントとコンテナ間共有の基本

今回は少し趣向を変えて、Dockerコンテナ自動化フレームワークについて、比較的短くシンプルな記事をお届けします。コンテナ内にデータをマウントする方法、データを共有する方法、そしてインスタンスを実用的なシステムに仕上げるために必要な知識をすべて学びましょう。

これまで、非常に詳細な入門ガイド、サービスやネットワーキングへの取り組み、そして厄介なエラーの解決方法などを紹介してきました。本チュートリアルもその流れを汲み、ステップバイステップで進めていくので、シンプルかつ明快な内容になっているはずです。それでは始めましょう。

基本の操作

ホスト側のデータをコンテナ内に公開する手順は比較的シンプルで、mountコマンドによく似ています。ソースとなるディレクトリやファイルを指定し、ターゲットとなるディレクトリやファイルにマッピングします。これは、ホスト側とコンテナ側の2つの要素から構成されるポート指定の考え方と同じです。

docker run -it -v /root/testing:/dedoimedo centos:latest /bin/bash

ここではBashシェルを使って新しいコンテナを起動し、ホストの/root/testingディレクトリをコンテナ内の/dedoimedoとしてマウントしています。ホスト側のソースは何でもよく、NFSマウントも含まれるため、実質的には便利なリモートデータ共有の仕組みとして活用できます。ただし実際にはNFSは再エクスポートを防ぐため、結局は同じホスト上で同じような処理を行うことになり、あまり実益はありません。

コンテナ内で/dedoimedoディレクトリの内容を確認すれば、何が保存されているかを見ることができます。しかし、今回のテストケースである標準的なCentOSのデフォルト環境では、おそらく次のようなエラーに遭遇するでしょう。これは重要なポイントです。同様の問題は誰でも遭遇する可能性があり、デバッグできる準備が大切だからです。また、セキュリティ機能が時に障害になることもあるという好例でもあります。

ls
ls: cannot open directory .: Permission denied

セキュリティ機能――そう、もちろんSELinuxです。幸い、この問題は解決できます。モジュールの強制ポリシーを変更するか、マウントされたボリュームへのアクセスをコンテナに許可する新しいルールを追加しましょう。

setenforce 0

ルールを追加して対応する場合は、こちらのコマンドを使用します。

chcon -Rt svirt_sandbox_file_t /<volume>

これでディレクトリの内容が表示され、ファイルの書き込みなども自由に行えるようになります。実際に、まずホスト側でマウント済みディレクトリ内に新しいファイルを作成すると、以下のような表示になります(ファイルの実際の内容は除きます)。

コンテナ間でのデータ共有

ネットワーキングの際と同様に、あるコンテナ内のデータを他のコンテナに公開したいケースがあります。こうすることで、そのコンテナはデータボリュームコンテナ(Data Volume Container)として機能します。コンテナの機能をグループ化する場合に非常に有用で、ストレージ容量の大幅な節約にもつながります。

さらに、コンテナ間でボリュームをチェーンすることも可能です。これにより、同時にホストデータへアクセスできるコンテナの数を絞り込めます。UNIX系システムではほぼ常にそうですが、ホスト側に堅牢な書き込みロック機構がない場合、この手法は特に役立ちます。

簡単な例を見てみましょう。まず、data-sourceという名前のコンテナを/dataマウントポイント付きで起動します。必要に応じて/dataをホスト上のディレクトリにマッピングすることもできますが、今の段階では不要です。次に、data-sourceコンテナのボリュームを利用する2つ目のコンテナを作成します。

docker run -ti --name data-source -v /data centos:latest /bin/bash
docker run -ti --volumes-from data-source centos:latest /bin/bash

さて、2つのコンテナを確認すると、どちらにも/dataディレクトリが存在します。ただし、data-sourceは--volumes-fromオプション付きで起動されたすべてのコンテナにとって、いわばデータのエントリーポイントとなります。これにより、大量のデータスペースを節約でき、コンテナが元のデータへどのようにアクセスするかを制御でき、複数のソフトウェア構成もより簡単にテストできます。全体的にとても便利な仕組みです。

[root@68d3ed5e243a data]# pwd
/data
[root@68d3ed5e243a data]# touch STUFF
[root@68d3ed5e243a data]#

そして、2つ目のコンテナ側の様子がこちらです。

[root@7aed935cc156 /]# ls -la /data
total 4
drwxr-xr-x.  2 root root   18 May  1 11:46 .
drwxr-xr-x. 18 root root 4096 May  1 11:45 ..
-rw-r--r--.  1 root root    0 May  1 11:46 STUFF
[root@7aed935cc156 /]#

次のステップ

信じられないかもしれませんが、今回はここまでとします。バックアップやデータ削除など、他にも扱えるトピックはありますが、それは別の機会に譲ります。現時点で、データボリュームを操作し、マウントポイントとしてコンテナ内に公開する作業を始めるには十分な知識を得ました。

なお、経験則として、環境ツールや設定ファイルには読み取り専用データを、ビッグデータにはボリュームコンテナを、テスト用途には小さくシンプルなディレクトリやマウントポイントを使い分けるのがおすすめです。

まとめ

Dockerのボリューム処理は比較的シンプルですが、コンテナ技術のこの側面は、フレームワークの他の部分と同等の成熟度に達するにはまだ発展の余地があると考えています。機能面ではまだ十分とは言えず、スナップショット、データ分散や並列化の組み込みサポートなど、データを制御するための追加手段が望まれます。

少なくとも、本チュートリアルを通じて、マウントポイントの作成方法、データボリュームのマウント方法、ボリュームのチェーン方法、そして途中で発生した小さな問題の解決方法など、いくつかの新しい知識を習得できたはずです。このガイドは他の記事と比べると少し物足りなく感じるかもしれませんが、常に大掛かりで長編の記事が必要なわけではありません。時には簡潔にまとめるのも良いものです。それでは、今回はこの辺で終わりにしましょう。

それでは、また次回。

  1. KVMのストレージ管理を徹底解説!ストレージプールとボリュームの作成チュートリアル

    さて、先日、Kernel-based Virtual Machine(KVM)という技術をご紹介しました。KVMは無料かつオープンソースの仮想化ソリューションで、VirtualBoxやVMware製品の代わりとして、あるいはそれらと併用して使うこともできます。前回は基本的な管理操作を扱いましたが、ストレージとネットワークについては別のチュートリアルに回すことにしました。 今回は、KVMにおけるストレージ管理について、より踏み込んだガイドをお届けします。内容はVirtualBoxで行ったものと似ており、仮想ディスクの追加・縮小・拡張などが含まれます。さらに、NFSストレージやNTFSフォーマット

  2. VirtualBoxでディスクをクローンする方法【VBoxManage活用チュートリアル】

    仮想化を業務でも趣味でも利用している方なら、VirtualBoxという強力かつ多用途な無料ソリューションを目にしたことがあるかもしれません。VirtualBoxは、デスクトップユーザーに対して、あらゆる形でOSを展開できる大きな柔軟性を提供してくれます。さらに、単なる趣味として仮想化を楽しんでいるだけでなく、仮想化を通じて新しいOSを学ぼうとする熱心なソフトウェア愛好家の方であれば、次のような場面に必ず直面することでしょう。それは「大量の仮想マシンを展開する必要がある」というシナリオです。一台ずつインストール作業を行う時間的な余裕はないはずです。実際、大規模に環境を展開する際に手動で一つずつマ