today::エンジニアに憧れる非エンジニア

今のところは、エンジニアとは言えないところの職種です。しかしエンジニア的なものの考え方に興味津津。

Dockerにおけるデータ管理の方法

前提

  • 「ホストマシンの記憶領域でコンテナのデータを扱うための方法」を対象とする
    • ホストマシンのストレージ
    • ホストマシンのメモリ領域
  • 「コンテナの読み書き可能レイヤーへのデータの書き込み」は扱わない

volume

  • ホストマシンのストレージ上に、Dockerが管理する記憶領域を定義する
    • 異なるホストマシンのコンテナ同士でボリュームを共用することはできない
  • volumeに名前をつけて管理することができる
  • 複数のコンテナが1つのvolumeを使うことができる
  • volumeの内容は、volumeを使用しているコンテナを削除しても消去されない
    • volumeの内容を消去するためには、明示的に消去の処理を行う必要がある
  • ホスト側におけるディレクトリの作成先は固定されている
    • Linuxホストであれば、その場所は/var/lib/docker/volumesディレクトリ配下となる
  • volumeの内容については、Dockerによって管理される
    • ホスト上でvolumeの内容を直接操作することは想定されていない

volumeの用途

  • 1つのデータを複数のコンテナで共通使用する場合

bind mount

  • ホストマシンの任意のディレクトリとコンテナの任意のディレクトリを接続する
  • 複数のコンテナが1つの
  • bind mountが設定されたディレクトリの内容については、Dockerは何ら関与せず、ホスト側で任意に変更することができる
    • マウント先のディレクトリ構成
    • マウント先のファイル内容
  • Docker社としては、明確な理由がない限り、上記のvolumeを使用することを推奨している
    • 以下の用途に該当する場合がbind mountの使い所

bind mountの用途

  • コンテナの構成をホストマシン側から共有したい場合
  • ソースコードやコンテナの成果物をコンテナとホストマシンで共有したい場合

tmpfs

  • ホストマシンのメモリ領域とコンテナのディレクトリを接続する
  • volumeやbind mountとは異なり、永続的な記憶領域ではない
    • コンテナを停止、あるいは再起動した時点でtmpfsの内容は消去される
    • ホストマシンを停止、あるいは再起動した時点でもtmpfsの内容は消去される

tmpfsの用途