セクション 2 Docker Volumes

Docker containerの中で作成されるファイルは、コンテナを破棄した時に削除されるが、論文執筆や発表準備のために結果を保存したい時もある。その場合には、コンテナの中で作成された一部のファイルを、コンテナ外の環境とつながっているフォルダーに保存することで、コンテナ破棄後もそのファイルを残すことができる。このセクションではその「コンテナ外と繋がったフォルダー」の作り方を紹介する。

自分のパソコンに次のようなフォルダー構造があるとしよう:

.
├── my-project
│   ├── Dockerfile
│   ├── analyze_data.py
│   └── clean_data.py
└── results
    └── figure_1.png

自分の/home/フォルダーに my-projectresultsという二つのフォルダーがある。Dockerfileはmy-projectの中にあるため、そのフォルダーの中からdocker build --tag my-research-imageを実行しても resultsの内容がDocker Imageの中にコピーされない。コンテナの中で得られたデータ分析の結果をresultsに保存したい場合はそのフォルダーとコンテナ内のフォルダーとの橋を作る必要がある。そのためにはdocker run-vオプションを用いる。この例では:

docker run -v /home/results:/home/rstudio/results my-research-image

というコマンドを使えばDocker volumeを作成することができる。この例ではそのvolumeはコンテナ外の/home/resultsというフォルダーを、コンテナ内にある/home/rstudio/resultsと繋いでいる。パソコンの /home/resultsフォルダーに保存されたファイルには、コンテナ内の/home/rstudio/resultsからアクセスできる。逆に、コンテナ内でそのロケーションに置かれるファイルには、自分のパソコンの/home/resultsフォルダーからアクセスすることができる。コンテナが破棄されてもvolumeのファイルは削除されない。

Docker volumesの使い方は上記の例以外にも複数あるため、volumesの 公式ガイドを確認しよう。