Docker ボリューム管理

DockerDockerBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

このセクションでは、ボリュームと呼ばれる Docker 環境における永続的なデータストアの使用方法について説明します。内部ボリュームと外部ボリュームの違いや、それらをどのように、いつ使用するかなど、永続的なデータストアの特性を学びます。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/VolumeOperationsGroup(["Volume Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ls("List Containers") docker/ContainerOperationsGroup -.-> docker/exec("Execute Command in Container") docker/ContainerOperationsGroup -.-> docker/inspect("Inspect Container") docker/ContainerOperationsGroup -.-> docker/create("Create Container") docker/VolumeOperationsGroup -.-> docker/cp("Copy Data Between Host and Container") docker/VolumeOperationsGroup -.-> docker/volume("Manage Volumes") subgraph Lab Skills docker/run -.-> lab-7769{{"Docker ボリューム管理"}} docker/ls -.-> lab-7769{{"Docker ボリューム管理"}} docker/exec -.-> lab-7769{{"Docker ボリューム管理"}} docker/inspect -.-> lab-7769{{"Docker ボリューム管理"}} docker/create -.-> lab-7769{{"Docker ボリューム管理"}} docker/cp -.-> lab-7769{{"Docker ボリューム管理"}} docker/volume -.-> lab-7769{{"Docker ボリューム管理"}} end

データボリューム管理

データボリュームは Docker でデータ永続化のための標準的な操作であり、このセクションでは、実際のデータボリュームの標準的な操作を通じて案内します。

目標

あなたの目標は、docker コマンドを使用して my-vol と呼ばれるデータボリュームを作成し、そのボリュームに test.txt と呼ばれるファイルを追加することです。

結果例

このチャレンジの終わりまでに達成できることの例を以下に示します。

  1. my-vol という名前のデータボリュームを作成する。
labex:~/ $ docker volume ls
DRIVER    VOLUME NAME
local     jenkins-data
local     minikube
local     my-vol
  1. データボリュームの詳細から Mountpoint を取得する。
[
  {
    "CreatedAt": "2024-01-20T17:37:33+08:00",
    "Driver": "local",
    "Labels": {},
    "Mountpoint": "/var/lib/docker/volumes/my-vol/_data",
    "Name": "my-vol",
    "Options": {},
    "Scope": "local"
  }
]
  1. Mountpoint に移動して test.txt ファイルを作成する。
root@iZj6cj604ytlr2cacq6vi2Z:/var/lib/docker/volumes/my-vol/_data## pwd
/var/lib/docker/volumes/my-vol/_data
root@iZj6cj604ytlr2cacq6vi2Z:/var/lib/docker/volumes/my-vol/_data## ls
test.txt

要件

このチャレンジを完了するには、以下が必要です。

  • docker コマンドを使用してデータボリュームを作成する方法を知っていること。
  • root ユーザーを使用してファイルを作成すること。
  • sudo su を使用して root ユーザーに切り替え、sudo passwd root を使用して root ユーザーのパスワードを設定すること。
✨ 解答を確認して練習

データボリューム付きコンテナの作成

このセクションでは、docker データボリュームを使用してコンテナを作成し、その後、ファイルのコピーを行います。

目標

あなたの目標は、nginx-vol という名前の docker ボリュームを作成し、その後、nginx という名前のコンテナを起動してマウントし、最後にローカルに index.html ファイルを作成して nginx コンテナにコピーすることです。

結果例

このチャレンジの終わりまでに達成できることの例を以下に示します。

  1. nginx-vol という名前のデータボリュームを作成する。
labex:~/ $ docker volume ls
DRIVER    VOLUME NAME
local     jenkins-data
local     minikube
local     my-vol
local     nginx-vol
  1. nginx イメージをベースにした nginx という名前のコンテナを作成し、その /usr/share/nginx/html ディレクトリを nginx-vol データボリュームにマウントする。
labex:~/ $ docker ps | grep nginx
c39296aaf39e   nginx     "/docker-entrypoint.…"   35 seconds ago   Up 31 seconds   80/tcp    nginx
  1. /tmp ディレクトリに内容 hello world のローカル index.html ファイルを作成する。
labex:/tmp/ $ pwd
/tmp
labex:/tmp/ $ cat index.html
hello world
  1. ローカルの index.html ファイルを nginx コンテナにコピーする。
labex:/tmp/ $ docker exec nginx cat /usr/share/nginx/html/index.html
hello world

要件

このチャレンジを完了するには、以下が必要です。

  • docker コマンドを使用してデータボリュームを作成する方法を知っていること。
  • コンテナを起動する方法を知っていること。
  • ローカルファイルをコンテナにコピーする方法を知っていること。
✨ 解答を確認して練習

ホストパスを使ってコンテナを作成する

多くの場合、データボリュームを使うのではなく、ネイティブなディレクトリを直接データ永続化に使います。このセクションでは、ネイティブなディレクトリを使ってコンテナを作成します。

目標

あなたの目標は、「ホストパス」を使ったコンテナを作成し、その後、ローカルのファイルをコンテナにコピーし、そのコンテナ内のファイルが「ホストパス」内のファイルと同じであることを確認することです。

結果例

このチャレンジの終わりまでに達成できることの例を以下に示します。

  1. /tmp ディレクトリに nginx ディレクトリを作成する。
labex:/tmp/ $ ls | grep nginx
nginx
  1. nginx イメージをベースにした nginx-host コンテナを起動し、その /tmp/nginx ディレクトリをコンテナ内の /usr/share/nginx/html ディレクトリにマウントする。
labex:/tmp/ $ docker ps | grep nginx-host
6fc2d40e12df   nginx     "/docker-entrypoint.…"   44 seconds ago   Up 43 seconds   80/tcp    nginx-host
  1. docker inspect コマンドを使って特定のマウント詳細を確認する。
"Mounts": [
   {
         "Type": "bind",
         "Source": "/tmp/nginx",
         "Destination": "/usr/share/nginx/html",
         "Mode": "",
         "RW": true,
         "Propagation": "rprivate"
   }
],
  1. 内容が hello nginx のローカルファイル nginx.txt を作成する。
labex:/tmp/ $ pwd
/tmp
labex:/tmp/ $ cat nginx.txt
hello nginx
  1. nginx.txt ファイルを nginx-host コンテナの /usr/share/nginx/html ディレクトリにコピーする。
labex:nginx/ $ docker exec nginx-host cat /usr/share/nginx/html/nginx.txt
hello nginx
  1. ローカルマシンの /tmp/nginx ディレクトリを確認して、nginx.txt ファイルがあるかどうかを確認する。
labex:nginx/ $ pwd
/tmp/nginx
labex:nginx/ $ cat nginx.txt
hello nginx

要件

このチャレンジを完了するには、以下が必要です。

  • 使いたい「ホストパス」パスを知っていること。
  • コンテナ内でホストディレクトリやファイルにアクセスできるかどうかを確認するためのいくつかの関連コマンドの使い方を知っていること。
  • ホストパスを使ってコンテナを起動する方法を知っていること。
  • cdmkdirtouch などの基本的な Linux コマンドに慣れていること。
✨ 解答を確認して練習

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

コンテナ化された環境では、時には 1 つのコンテナから別のコンテナにデータを共有する必要があります。この場合、データ共有を達成するためにさまざまな手法が使えます。このチャレンジでは、コンテナ間でデータをどのように共有するかを探ります。

目標

あなたの目標は、2 つのコンテナ間でデータ共有を実現することです。具体的には、「ホストパス」を使ってコンテナ A を起動し、その後、別のコンテナ B を起動して A のストレージボリュームをマウントし、最終的に 2 つのコンテナ間でデータ共有を可能にします。

結果例

このチャレンジの終わりまでに達成できることの例を以下に示します。

  1. ローカルホストに /tmp/share ディレクトリを作成する。
labex:/tmp/ $ ls -ld /tmp/share
drwxr-xr-x 2 labex labex 4096 Jan 20 18:20 /tmp/share
  1. nginx イメージをベースにした nginx-share という名前のコンテナを作成し、ローカルの /tmp/share ディレクトリをコンテナ内の /usr/share/nginx/html ディレクトリにマウントする。
labex:/tmp/ $ docker ps | grep nginx-share
216d02d94f39   nginx     "/docker-entrypoint.…"   55 seconds ago   Up 55 seconds   80/tcp    nginx-share
  1. busybox イメージをベースにした busybox-share という名前のコンテナを作成し、nginx-share コンテナからマウントする。
labex:/tmp/ $ docker ps | grep busy
30bf04aee681   busybox   "sh"                     43 seconds ago   Up 42 seconds             busybox-share
  1. 内容が hello share のローカルファイル share.txt を作成する。
labex:/tmp/ $ pwd
/tmp
labex:/tmp/ $ cat share.txt
hello share
  1. share.txt ファイルを nginx-share コンテナにコピーする。
labex:/tmp/ $ docker exec nginx-share cat /usr/share/nginx/html/share.txt
hello share
  1. busybox-share コンテナに移動して、share.txt ファイルが存在するかどうかを確認する。
labex:/tmp/ $ docker exec busybox-share cat /usr/share/nginx/html/share.txt
hello share

要件

このチャレンジを完了するには、以下が必要です。

  • Docker コンテナの基本操作と概念に慣れていること。
  • Docker コマンドラインツールを使ってコンテナを作成、実行、停止すること。
  • データボリュームの概念と使い方を理解していること。
  • コンテナ内でデータボリュームをマウントする方法を理解していること。
  • cdmkdirtouch などの基本的な Linux コマンドに慣れていること。
✨ 解答を確認して練習

まとめ

このチャレンジを完了しました。おめでとうございます。もしあなたが今、コンテナ内のストレージボリュームの使い方に精通しているなら、それを生かしてください。