はじめに
このセクションでは、ボリューム(Volumes)と呼ばれる Docker 環境における永続データストレージの使用方法について解説します。永続データストレージの特性、例えば内部ボリュームと外部ボリュームの違いや、それぞれの適切な利用シーン、具体的な操作方法について学習します。
データボリュームの管理
データボリュームは、Docker においてデータを永続化するための標準的な手法です。このセクションでは、データボリュームに関する標準的な操作を実践形式で体験していただきます。
目標
あなたの目標は、docker コマンドを使用して my-vol という名前のデータボリュームを作成し、そのボリューム内に test.txt というファイルを追加することです。
実行例
このチャレンジを完了すると、以下のような結果が得られます。
my-volという名前のデータボリュームを作成します。
labex:~/ $ docker volume ls
DRIVER VOLUME NAME
local jenkins-data
local minikube
local my-vol
- データボリュームの詳細情報を確認し、
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"
}
]
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 という名前のコンテナを起動してそのボリュームをマウントします。最後に、/home/labex/project/index.html ファイルを nginx コンテナ内にコピーしてください。
実行例
このチャレンジを完了すると、以下のような結果が得られます。
nginx-volという名前のデータボリュームを作成します。
labex:~/ $ docker volume ls
DRIVER VOLUME NAME
local jenkins-data
local minikube
local my-vol
local nginx-vol
- 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
/home/labex/project/index.htmlファイルの内容を確認します。
labex:/tmp/ $ pwd
/tmp
labex:/tmp/ $ cat index.html
hello world
/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 ファイルをコンテナ内にコピーします。その後、コンテナ内のファイルがホストパス上のファイルと同一であることを確認してください。
実行例
このチャレンジを完了すると、以下のような結果が得られます。
/tmpディレクトリ内にnginxディレクトリを作成します。
labex:/tmp/ $ ls | grep nginx
nginx
- 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
docker inspectコマンドを使用して、特定のマウント詳細を確認します。
"Mounts": [
{
"Type": "bind",
"Source": "/tmp/nginx",
"Destination": "/usr/share/nginx/html",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
],
/home/labex/project/nginx.txtファイルの内容を確認します。
labex:/tmp/ $ pwd
/tmp
labex:/tmp/ $ cat nginx.txt
hello nginx
/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
- ローカルマシンの
/tmp/nginxディレクトリを確認し、nginx.txtファイルが存在することを確認します。
labex:nginx/ $ pwd
/tmp/nginx
labex:nginx/ $ cat nginx.txt
hello nginx
要件
このチャレンジを完了するには、以下の知識が必要です:
- 使用するホストパス(Host Path)を把握していること。
- コンテナ内の関連コマンドを使用して、ホストのディレクトリやファイルにアクセスできるか検証する方法。
- ホストパスを使用してコンテナを起動する方法。
cd、mkdir、touchなどの基本的な Linux コマンドに精通していること。
コンテナ間でのデータ共有
コンテナ化された環境では、あるコンテナから別のコンテナへデータを共有する必要がある場合があります。データ共有を実現するにはさまざまな手法がありますが、このチャレンジではコンテナ間でデータを共有する方法を探ります。
目標
2 つのコンテナ間でデータ共有を実装してください。具体的には、まずホストパスを使用してコンテナ A を起動し、次に別のコンテナ B を起動してコンテナ A のストレージボリュームをマウントすることで、最終的に 2 つのコンテナ間でデータを共有できるようにします。
実行例
このチャレンジを完了すると、以下のような結果が得られます。
- ローカルホスト上に
/tmp/shareディレクトリを作成します。
labex:/tmp/ $ ls -ld /tmp/share
drwxr-xr-x 2 labex labex 4096 Jan 20 18:20 /tmp/share
- 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
- busybox イメージをベースにした
busybox-shareという名前のコンテナを作成し、nginx-shareコンテナからボリュームをマウントします。
labex:/tmp/ $ docker ps | grep busy
30bf04aee681 busybox "sh" 43 seconds ago Up 42 seconds busybox-share
/home/labex/project/share.txtファイルの内容を確認します。
labex:/tmp/ $ pwd
/tmp
labex:/tmp/ $ cat share.txt
hello share
/home/labex/project/share.txtファイルをnginx-shareコンテナにコピーし、内容を確認します。
labex:/tmp/ $ docker exec nginx-share cat /usr/share/nginx/html/share.txt
hello share
busybox-shareコンテナに移動し、share.txtファイルが存在するか確認します。
labex:/tmp/ $ docker exec busybox-share cat /usr/share/nginx/html/share.txt
hello share
要件
このチャレンジを完了するには、以下の知識が必要です:
- Docker コンテナの基本操作と概念に精通していること。
- Docker コマンドラインツールを使用して、コンテナの作成、実行、停止ができること。
- データボリュームの概念と使用方法を理解していること。
- コンテナにデータボリュームをマウントする方法を理解していること。
cd、mkdir、touchなどの基本的な Linux コマンドに精通していること。
まとめ
おめでとうございます!このチャレンジを無事に完了しました。コンテナでのストレージボリュームの使用方法をマスターできたなら、自信を持って次のステップへ進んでください。



