Docker ボリューム管理

DockerBeginner
オンラインで実践に進む

はじめに

このセクションでは、ボリューム(Volumes)と呼ばれる Docker 環境における永続データストレージの使用方法について解説します。永続データストレージの特性、例えば内部ボリュームと外部ボリュームの違いや、それぞれの適切な利用シーン、具体的な操作方法について学習します。

データボリュームの管理

データボリュームは、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 suroot ユーザーに切り替えること。必要に応じて sudo passwd rootroot ユーザーのパスワードを設定してください。

データボリュームを使用したコンテナの作成

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

目標

nginx-vol という名前の Docker ボリュームを作成し、nginx という名前のコンテナを起動してそのボリュームをマウントします。最後に、/home/labex/project/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. /home/labex/project/index.html ファイルの内容を確認します。
labex:/tmp/ $ pwd
/tmp
labex:/tmp/ $ cat index.html
hello world
  1. /home/labex/project/index.html ファイルを nginx コンテナにコピーし、正しく配置されたか確認します。
labex:/tmp/ $ docker exec nginx cat /usr/share/nginx/html/index.html
hello world

要件

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

  • docker コマンドを使用したデータボリュームの作成方法。
  • コンテナの起動方法。
  • ローカルファイルをコンテナ内にコピーする方法。

ホストパスを使用したコンテナの作成

多くの場合、Docker 専用のデータボリュームではなく、ホストマシンの既存のディレクトリを直接データの永続化に使用することがあります(バインドマウント)。このセクションでは、ホストのディレクトリを使用してコンテナを作成します。

目標

ホストパス(Host Path)を使用するコンテナを作成し、/home/labex/project/nginx.txt ファイルをコンテナ内にコピーします。その後、コンテナ内のファイルがホストパス上のファイルと同一であることを確認してください。

実行例

このチャレンジを完了すると、以下のような結果が得られます。

  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. /home/labex/project/nginx.txt ファイルの内容を確認します。
labex:/tmp/ $ pwd
/tmp
labex:/tmp/ $ cat nginx.txt
hello nginx
  1. /home/labex/project/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

要件

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

  • 使用するホストパス(Host Path)を把握していること。
  • コンテナ内の関連コマンドを使用して、ホストのディレクトリやファイルにアクセスできるか検証する方法。
  • ホストパスを使用してコンテナを起動する方法。
  • cdmkdirtouch などの基本的な Linux コマンドに精通していること。

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

コンテナ化された環境では、あるコンテナから別のコンテナへデータを共有する必要がある場合があります。データ共有を実現するにはさまざまな手法がありますが、このチャレンジではコンテナ間でデータを共有する方法を探ります。

目標

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. /home/labex/project/share.txt ファイルの内容を確認します。
labex:/tmp/ $ pwd
/tmp
labex:/tmp/ $ cat share.txt
hello share
  1. /home/labex/project/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 コマンドに精通していること。

まとめ

おめでとうございます!このチャレンジを無事に完了しました。コンテナでのストレージボリュームの使用方法をマスターできたなら、自信を持って次のステップへ進んでください。

✨ 解答を確認して練習✨ 解答を確認して練習✨ 解答を確認して練習✨ 解答を確認して練習