はじめに
このセクションでは、ボリュームと呼ばれる Docker 環境における永続的なデータストアの使用方法について説明します。内部ボリュームと外部ボリュームの違いや、それらをどのように、いつ使用するかなど、永続的なデータストアの特性を学びます。
このセクションでは、ボリュームと呼ばれる 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
という名前のコンテナを起動してマウントし、最後にローカルに 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
/tmp
ディレクトリに内容 hello world
のローカル index.html
ファイルを作成する。labex:/tmp/ $ pwd
/tmp
labex:/tmp/ $ cat index.html
hello world
index.html
ファイルを nginx
コンテナにコピーする。labex:/tmp/ $ docker exec nginx cat /usr/share/nginx/html/index.html
hello world
このチャレンジを完了するには、以下が必要です。
docker
コマンドを使用してデータボリュームを作成する方法を知っていること。多くの場合、データボリュームを使うのではなく、ネイティブなディレクトリを直接データ永続化に使います。このセクションでは、ネイティブなディレクトリを使ってコンテナを作成します。
あなたの目標は、「ホストパス」を使ったコンテナを作成し、その後、ローカルのファイルをコンテナにコピーし、そのコンテナ内のファイルが「ホストパス」内のファイルと同じであることを確認することです。
このチャレンジの終わりまでに達成できることの例を以下に示します。
/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"
}
],
hello nginx
のローカルファイル nginx.txt
を作成する。labex:/tmp/ $ pwd
/tmp
labex:/tmp/ $ cat nginx.txt
hello nginx
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
このチャレンジを完了するには、以下が必要です。
cd
、mkdir
、touch
などの基本的な Linux コマンドに慣れていること。コンテナ化された環境では、時には 1 つのコンテナから別のコンテナにデータを共有する必要があります。この場合、データ共有を達成するためにさまざまな手法が使えます。このチャレンジでは、コンテナ間でデータをどのように共有するかを探ります。
あなたの目標は、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
hello share
のローカルファイル share.txt
を作成する。labex:/tmp/ $ pwd
/tmp
labex:/tmp/ $ cat share.txt
hello share
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
このチャレンジを完了するには、以下が必要です。
cd
、mkdir
、touch
などの基本的な Linux コマンドに慣れていること。このチャレンジを完了しました。おめでとうございます。もしあなたが今、コンテナ内のストレージボリュームの使い方に精通しているなら、それを生かしてください。