Docker
データボリュームとデータコンテナ
サーチ…
データ専用コンテナ
データ専用コンテナは廃止され、アンチパターンと見なされています。
dockerのvolume
サブコマンドの前のyoreの時代、名前付きボリュームを作成する前に、Dockerはどのコンテナにも参照がなくなったときにボリュームを削除しました。 Dockerは名前付きボリュームを作成する機能を提供するだけでなく、さまざまなdocker volume
サブコマンドを使用してさらに多くのユーティリティを提供するため、データ専用コンテナは廃止されました。このため、データ専用コンテナはアンチパターンとみなされています。
ここ数年のウェブ上の多くのリソースには、「データ専用のコンテナ」と呼ばれるパターンがあります。これは単に周囲のデータボリュームへの参照を保持するためだけに存在するDockerコンテナです。
このコンテキストでは、「データボリューム」はホストからマウントされていないDockerボリュームです。明確にするために、 "データボリューム"は、 VOLUME
Dockerfileディレクティブで作成されたVOLUME
、またはdocker docker run
コマンドで-v /path/on/container
形式でコマンドラインで-v
スイッチを使用して作成されたボリュームです。したがって、 "データ専用コンテナ"は、データボリュームが添付されていることを目的とするコンテナです。これは、 --volumes-from
docker run
コマンドの--volumes-from
フラグによって使用されます。例えば:
docker run -d --name "mysql-data" -v "/var/lib/mysql" alpine /bin/true
上記のコマンドが実行されると、「データ専用コンテナ」が作成されます。これは単にデータボリュームが添付された空のコンテナです。このボリュームを次のように別のコンテナで使用することは可能でした:
docker run -d --name="mysql" --volumes-from="mysql-data" mysql
mysql
コンテナには、 mysql-data
も同じボリュームがありmysql-data
。
Dockerはvolume
サブコマンドと名前付きボリュームを提供するようになったため、このパターンは廃止され、推奨されていません。
volume
サブコマンドと名前付きボリュームを使用するには、「名前付きボリュームの作成」を参照してください。
データボリュームの作成
docker run -d --name "mysql-1" -v "/var/lib/mysql" mysql
このコマンドは、 mysql
イメージから新しいコンテナを作成します。また、新しいデータボリュームを作成し、それを/var/lib/mysql
コンテナにマウントします。このボリュームは、その内部のすべてのデータがコンテナの存続期間を超えて持続するのを助けます。つまり、コンテナが削除されると、そのファイルシステムの変更も削除されます。データベースがコンテナにデータを格納していて、コンテナが削除された場合、そのデータもすべて削除されます。ボリュームは、そのコンテナが削除されたときを超えても特定の場所に保持されます。
--volumes-from
コマンドラインオプションを使用すると、複数のコンテナで同じボリュームを使用することができます。
docker run -d --name="mysql-2" --volumes-from="mysql-1" mysql
mysql-2
コンテナには、 mysql-1
データボリュームが接続されており、 /var/lib/mysql
パスも使用されています。