Skip to content

Latest commit

 

History

History
163 lines (122 loc) · 6.79 KB

File metadata and controls

163 lines (122 loc) · 6.79 KB

TOP
前: コンテナへのアクセス
次: コンテナに環境変数を設定


コンテナにファイルシステムをマウント

コンテナ内のファイルシステムは一時的な領域です。コンテナが無くなるとコンテナ内のファイルシステムに保存したデータも失われてしまいます。これを回避するにはコンテナに外部のボリュームをマウントしデータをその中に保存します。

  1. centos:8のイメージを使いコンテナをバックグラウンドで実行してください。なお、centosのイメージはコマンドを指定しないとすぐに停止するのでsh -c "sleep 3600"などのコマンドを指定して実行してください。

  2. 作成したコンテナにログインし、適当な場所にテストファイルを作成してください。

  3. コンテナを削除してください。

  4. 先ほどの手順と同じくcentos:8のイメージを使いコンテナをバックグランドで実行してください。

  5. 先ほど作成したテストファイルがなくなっていることを確認してください。

  6. コンテナを削除してください。

このように、コンテナに変更を加えてもそのコンテナが失われるとデータも一緒に消えてしまいます。(なお、コンテナを削除ではなく停止すればテスト用のデータは消えませんが、コンテナを停止するという運用はあまり行わず起動/削除が一般的です。)

それでは、コンテナにボリュームをマウントさせてデータを保存してみます。

  1. ホストOSに~/host-dirというテスト用のディレクトリを作成してください。

  2. centos:8のイメージを使いコンテナをバックグラウンドで実行してください。この時、先ほど作成したホストOSのテスト用ディレクトリをコンテナ内の/container-dirにマウントしてください。ボリュームマウントはdocker runコマンドのオプションで指定します。やり方は日本語マニュアルを参考にしてください。

  3. 作成したコンテナにログインし/container-dirがあることを確認してください。

  4. コンテナ内の/container-dir配下にテスト用ファイルを作成してください。

  5. コンテナを削除してください。

  6. 先ほどの手順と同じくcentos:8のイメージを使いコンテナをバックグラウンドで実行してください。この時、ホストOSのテスト用ディレクトリをコンテナ内の/container-dirにマウントしてください。

  7. コンテナにログインし/container-dir配下のテスト用ファイルがあることを確認してください。

  8. ホストOSの~/host-dir配下を確認してください。コンテナ内で作成したファイルがあるはずです。

  9. ホストOSから~/host-dir配下のテストファイルを削除してください。

  10. コンテナにログインし、/container-dir配下のテスト用ファイルがないことを確認してください。

  11. 以下コマンドでコンテナをすべて削除してください。

    docker rm -f `docker ps -a -q`
  12. ホストOSの~/host-dirディレクトリを削除してください。

このように、コンテナにボリュームをマウントさせればデータをコンテナのライフサイクルと切り離すことができます。

答え(一例です)
  1. 以下コマンドを実行する。
docker run -d centos:8 sh -c "sleep 3600"
  1. 以下コマンドを実行する。
$ docker ps
CONTAINER ID   IMAGE      COMMAND                CREATED          STATUS          PORTS     NAMES
b47f4cbe7663   centos:8   "sh -c 'sleep 3600'"   44 seconds ago   Up 40 seconds             elastic_davinci
$ docker exec -it {docker psで確認したコンテナID} bash
# touch test.txt
  1. 以下コマンドを実行する。
$ docker rm -f {docker psで確認したコンテナID}
{docker psで確認したコンテナID}
  1. 1.と同じコマンドを実行する。
  2. 以下コマンドの手順で確認する。
$ docker ps
CONTAINER ID   IMAGE      COMMAND                CREATED         STATUS         PORTS     NAMES
2c2d5243c77b   centos:8   "sh -c 'sleep 3600'"   7 seconds ago   Up 5 seconds             vibrant_bassi
$ docker exec -it {docker psで確認したコンテナID} bash
# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
  1. 3.と同じコマンドを実行する。
  2. 以下コマンドを実行する。
mkdir ~/host-dir
  1. 以下コマンドを実行する。ここで、-vコマンドはイメージよりも前で記述することに注意してください。
docker run -d -v ~/host-dir:/container-dir centos:8 sh -c "sleep 3600"
  1. 以下コマンドの手順で確認する。
$ docker ps
CONTAINER ID   IMAGE      COMMAND                CREATED         STATUS         PORTS     NAMES
83b2395f89b1   centos:8   "sh -c 'sleep 3600'"   4 seconds ago   Up 3 seconds             charming_noether
$ docker exec -it {docker psで確認したコンテナID} bash
# ls
bin  container-dir  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
  1. 以下コマンドを実行する。
# cd container-dir/
# touch test.txt
  1. 3.と同じコマンドを実行する。
  2. 8.と同じコマンドを実行する。
  3. 以下コマンドの手順で確認する。
$ docker ps
CONTAINER ID   IMAGE      COMMAND                CREATED          STATUS          PORTS     NAMES
30bbdf7e1ed7   centos:8   "sh -c 'sleep 3600'"   44 seconds ago   Up 43 seconds             hopeful_roentgen
$ docker exec -it {docker psで確認したコンテナID} bash
# ls container-dir/
test.txt
  1. 以下コマンドの手順で確認する。
# exit
exit
$ ls ~/host-dir/
test.txt
  1. 以下コマンドを実行する。
$ rm -f ~/host-dir/test.txt
  1. 以下コマンドの手順で確認する。
$ docker exec -it {docker psで確認したコンテナID} bash
# ls container-dir/
# 
  1. exitでコンテナから出た後、プラクティスの指示コマンドを実行してください。
  2. 以下コマンドを実行する。
$ rm -rf ~/host-dir/

TOP
前: コンテナへのアクセス
次: コンテナに環境変数を設定