Dockerコンテナ内に保存されているファイル(およびその他のデータ)は、コンテナが削除されても保持されません。これを克服するために、Dockerボリューム およびバインドマウント に使える。このガイドでは、永続データを保存する方法としてDockerボリュームを使用する方法について説明します。ボリュームを外付けハードドライブと考えてください。内蔵ハードドライブが消去されても、外付けハードドライブはそれ自体のデータを保持します。ボリュームはホストに保存され、コンテナやイメージから独立しています。必要に応じてさまざまなコンテナにマウントできます。ボリュームはイメージから分離されているため、イメージのサイズが大きくなることはありません。
始める前に
-
まだ行っていない場合は、Linodeアカウントとコンピュートインスタンスを作成します。 Linode入門とコンピューティングインスタンスの作成ガイドをご覧ください。
-
コンピューティングインスタンスのセットアップと保護ガイドに従って、システムを更新してください。また、タイムゾーンの設定、ホスト名の構成、制限付きユーザーアカウントの作成、SSHアクセスの強化を行うこともできます。
-
システムにDockerをインストールします。
-
このガイドは、Linuxコマンドラインの使用に慣れていることを前提としています。ターミナルの使用を参照してください。
-
このガイドは、Dockerの基本的な知識があることを前提としています。さらに、サーバーにDockerをインストールし、Dockerイメージをデプロイしておく必要があります。 Dockerの概要を参照してください。
Dockerボリュームの作成
Dockerボリュームの理解を始めるには、作業するボリュームが必要です。
-
SSHまたはLishのいずれかを介してLinode(または他のLinuxサーバー)にログインします。
-
example_volume を置き換えて、次のコマンドを入力してボリュームを作成します ボリュームのラベル付き。
docker volume create example_volume
-
ボリュームが作成されたことを確認します。
docker volume list
出力は次のようになります。
[[email protected] ~]$ docker volume list DRIVER VOLUME NAME local example_volume [[email protected] ~]$
Dockerボリュームの検査
ボリュームの詳細を確認したい場合は、docker volume inspect
を使用できます。 コマンド:
docker volume inspect example_volume
出力は次のようになります。
[[email protected] ~]$ docker volume inspect example_volume
[
{
"CreatedAt": "2021-05-19T15:27:27Z",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/example_volume/_data",
"Name": "example_volume",
"Options": {},
"Scope": "local"
}
]
[[email protected] ~]$
Dockerボリュームをコンテナーにマウントする
コンテナのデータを保持するには、--mount flag
を使用してDockerボリュームをマウントする必要があります docker run
で 指図。 [volume_name]を置き換えます ボリュームの名前、 [path] ボリュームをコンテナ内にマウントする絶対パスと、 [docker_image] 画像の名前で。
docker run --mount source=[volume_name],destination=[path] [docker_image]
例として、次のコマンドは example_volumeという名前のボリュームをマウントします パス/example_volume
へ ubuntu
を使用してコンテナ内 画像。
docker run -it --name=example --mount source=example_volume,destination=/example_volume ubuntu
このコマンドは、イメージを実行し、ボリュームをマウントし、Ubuntuイメージにrootとしてユーザーをログインさせます。ルートとして入力すると、「example_volume」がls
だけでマウントされていることを確認できます。 。これらすべての出力は次のようになります。
[[email protected] ~]$ docker run -it --name=example --mount source=example_volume,destination=/example_volume ubuntu
[email protected]:/# ls
bin dev example_volume lib lib64 media opt root sbin sys usr
boot etc home lib32 libx32 mnt proc run srv tmp var
[email protected]:/#
コンテナ間でのファイルのコピーと共有
Dockerボリュームを使用すると、コンテナー間で共有することもできます。
-
Dockerボリュームのコンテナーへのマウント内の指示に従ってボリュームをマウントします。以前に使用した例は次のとおりです。
docker run -it --name=example --mount source=example_volume,destination=/example_volume ubuntu
-
ディレクトリを
example_data
に変更します ディレクトリ。cd example_data
-
次の
touch
を入力して、ボリュームにテストファイルを作成します コマンド。touch example_file.txt
-
次に、コンテナを終了します。
exit
-
次に、同じボリュームをマウントして別のDockerイメージを実行します。
debian
以下の例では画像を使用しています。docker run -it --name=example_2 --mount source=example_volume,destination=/example_volume debian
-
新しいコンテナ(上記のようなコマンドを使用する場合は「example_2」と呼ばれます)コンテナ内で、ボリュームのディレクトリに移動します。
cd example_volume
-
ls
と入力します ファイルを表示します。ls
ディレクトリをLinodeからコンテナにマウントする
新しいボリュームを作成する代わりに、Linode(または他のシステム)からDockerコンテナにディレクトリをマウントすることもできます。これはバインドマウントによって実現され、システムから直接コンテナのファイルを保存してアクセスする場合に役立ちます。ボリュームと比較して、バインドマウントの機能は制限されています。
-
SSHまたはLishのいずれかを介してLinode(または他のLinuxサーバー)にログインします。
-
次のコマンドを使用してDockerを実行し、 [local-directory]を置き換えます マウントするLinode内のディレクトリへの絶対パスを使用します(
$(pwd)
を使用します) 現在のディレクトリをマウントします)。次に、 [mount-directory]を置き換えます ローカルファイルにアクセスして[image]を置き換えるコンテナの絶対パスを使用します 使用するDockerイメージを使用します。docker run --rm -it -v [local-directory]:[mount-directory] [image]
-
コンテナに自動的にログインします。マウントディレクトリに移動して、ファイルを表示します。
ls
ローカルディレクトリ内に保存したファイルが表示されます。
さらに読む
Docker Volumesには、ここで説明できる以上のことがたくさんあり、ユースケースは人によって異なります。ただし、これについて詳しく確認する2つの優れた場所は、Dockerのドキュメントサイト自体です。
-
DockerDocsでボリュームを使用する
-
DockerDocsでのボリュームエラーのトラブルシューティング
詳細情報
このトピックの詳細については、次のリソースを参照してください。これらは有用であることを期待して提供されていますが、外部でホストされている資料の正確性や適時性を保証することはできません。
- DockerDocsでボリュームを使用する
- DockerDocsでのボリュームエラーのトラブルシューティング