Docker ハンズオン演習
ホーム
ホーム
  • 0. ラボの使い方
  • 1. Docker の基本コマンド
  • 2. Docker コンテナの実行
  • 3. Docker イメージのビルド
  • 4. Docker レジストリ
  • 5. Volume
  • 6. ネットワーク
  • 7. Docker Compose

5. Volume

このラボでは Docker のデータ管理と Volume によるデータの永続化について学習します。

テキストを参照しながら各問題にチャレンジしてください。
必要があればウェブで調べても構いません。

ステップ 1: 問題 1/14

Docker のコンテナやイメージのデータはホストのどこに保存されますか。

  1. /var/lib/docker
  2. /tmp/docker
  3. /etc/docker
  4. /opt/docker
Answer

/var/lib/docker

ステップ 2: 問題 2/14

イメージ alpine を使用して sleep 1000 を実行する alpine-1 という名前のコンテナを detatched モードで実行してください。

  • イメージ:alpine
  • コンテナ名:alpine-1
  • 実行コマンド:sleep 1000
Hints

docker run -d --name alpine-1 alpine sleep 1000 コマンドを使用します`

Solution

docker run -d --name alpine-1 alpine sleep 1000 コマンドを実行します

ステップ 3: 問題 3/14

いま起動したコンテナ内で touch newfile.txt コマンドを実行して新しいファイルを作成してください。

Hints

docker container exec コマンドを使用してコンテナ内で touch newfile.txt を実行します。

Solution

docker container exec alpine-1 touch newfile.txt コマンドを実行します

ステップ 4: 問題 4/14

docker container inspect alpine-1 を実行してください。 そして、GraphDriver.Data に表示された MergedDir と UpperDir のパスをコピーしてメモしてください。

出力結果の例:

GraphDriver": {
  "Data": {
    "LowerDir": "/var/lib/docker/overlay2/19e49dfa0dc9f46e11ed14b4fac87a58a8d6d3f952231d331f4f376794548c5d-init/diff:/var/lib/docker/overlay2/9aba14641007d2ee4f7c1ebd88c50e3111ce86d3b35786f0adc5e78c223ccb38/diff",
    "MergedDir": "/var/lib/docker/overlay2/19e49dfa0dc9f46e11ed14b4fac87a58a8d6d3f952231d331f4f376794548c5d/merged",
    "UpperDir": "/var/lib/docker/overlay2/19e49dfa0dc9f46e11ed14b4fac87a58a8d6d3f952231d331f4f376794548c5d/diff",
    "WorkDir": "/var/lib/docker/overlay2/19e49dfa0dc9f46e11ed14b4fac87a58a8d6d3f952231d331f4f376794548c5d/work"

ステップ 5: 問題 5/14

ホストの /var/lib/docker/overlay2 にはイメージやコンテナのレイヤーのデータが保存されています。
先ほどコピーした MergedDir (末尾が merged で終わるパスのディレクトリ) にはイメージレイヤーとコンテナレイヤーの統合されたデータが含まれています。

以下のコマンドを実行して、結果に先ほど作成した newfile.txt が含まれていることを確認してください。

ls -la <MergedDir のパス>

ステップ 6: 問題 6/14

先ほどコピーした UpperDir (末尾が diff で終わるパスのディレクトリ) にはコンテナレイヤーのデータだけが含まれています。

以下のコマンドを実行してください。
今度は先ほどと違い、コンテナで作成した newfile.txt だけが含まれていることを確認してください。

ls -la <UpperDir のパス>

ステップ 7: 問題 7/14

コンテナ alpine-1 を削除してください。

Hints

まず docker container stop でコンテナを停止します。 そして docker container rm でコンテナを削除します。

Solution

以下を実行します。

docker container stop alpine-1
docker container rm alpine-1

ステップ 8: 問題 8/14

再度、先ほどコピーしたパスを使用して以下のコマンドを実行してください。

ls -la <UpperDir のパス>

コンテナが削除されたためレイヤーのデータも削除され、ファイルにアクセスできないことを確認します。

出力の例:

ls: cannot access '/var/lib/docker/overlay2/5b63e7a482bbe07ec5dcf69b55eb834324951bb9fafcbb4706ebc640795e79e2/diff/': No such file or directory

ステップ 9: 問題 9/14

my-volume という名前の volume を作成してください。

Hints

docker volume create コマンドを使用します`

Solution

docker volume create my-volume コマンドを実行します

ステップ 10: 問題 10/14

以下の設定で、my-volime をマウントしたコンテナを detached モードで起動してください。

  • イメージ名:nginx:latest
  • コンテナ名:nginx-1
  • マウントパス:/usr/local/share/my-volume
Hints

docker container run で -v my-volume:/usr/local/share/my-volume を指定します。

Solution

docker container run -d --name nginx-1 -v my-volume:/usr/local/share/my-volume nginx:latest を実行します。

ステップ 11: 問題 11/14

コンテナ nginx-1 の /usr/local/share/my-volume に data.txt というファイルを作成して My important data という文字列を保存してください。これを実行することで、my-volume 内にファイルが保存されます。

コンテナ nginx-1 で bash -c "echo 'My important data' > /usr/local/share/my-volume/data.txt" を実行してください。 これを実行することで、my-volume 内にファイルが書き込まれます。

Hints
  • ワンライナーで実行するには、docker container exec コマンドを使用して bash -c "echo 'My important data' > /usr/local/share/my-volume/data.txt" を実行します。
  • docker container exec -it nginx-1 bash でコンテナのシェルにアクセスし、echo 'My important data' > /usr/local/share/my-volume/data.txt を実行することもできます。
Solution

docker container exec nginx-1 bash -c "echo 'My important data' > /usr/local/share/my-volume/data.txt" を実行します。

ステップ 12: 問題 12/14

コンテナ nginx-1 を削除してください。

ステップ 13: 問題 13/14

以下の設定で、再度 my-volime をマウントしたコンテナを detached モードで起動してください。

  • イメージ名:nginx:latest
  • コンテナ名:nginx-2
  • マウントパス:/usr/local/share/my-volume
Hints

docker container run で -v my-volume:/usr/local/share/my-volume を指定します。

Solution

docker container run -d --name nginx-2 -v my-volume:/usr/local/share/my-volume nginx:latest を実行します。

ステップ 14: 問題 14/14

コンテナ nginx-2 で cat /usr/local/share/my-volume/data.txt を実行してください。 コンテナ nginx-1 で保存したデータは残っていますか。

  1. 残っている
  2. 残っていない
Solution

docker container exec nginx-2 cat /usr/local/share/my-volume/data.txt を実行します。

Answer

残っている

完了


チャレンジ完了!

お疲れ様でした!

Prev
4. Docker レジストリ
Next
6. ネットワーク