【学習メモ】Dockerを本気で理解しにかかる〜#1-3 Dockerのストレージ共有(Volume)〜
概要
こちらの記事の#1-3 です。(#1-2)
今回は ストレージの共有、ボリュームのマウントについてまとめていこうと思います。
Docker のストレージ共有について
前回のコマンドの中でストレージについても軽く触れていきましたが、もう少し深く掘っていこうかなと思います。
VM 型仮想化と Docker のストレージについて
#1-1で簡単に VM と Docker の違いが何かを見てきましたが、これらはデータの保存方法についても違いがあります。
- VM:ディスク上に存在するため、書き込まれたデータは永続化する
- Docker:メモリ上に存在するため、データは一時的
コンテナは作って壊してを繰り返すことが想定されているので、VM とは違いデータは永続化されません。
でも、そうなるとコンテナが削除されると DB のデータが消えてしまい困りますよね...
もう2度と削除できないコンテナの完成となってしまっては、Docker を使う意味がなくなってしまうので、データを永続化したい場合にはストレージ共有をする必要があります。
ストレージ共有のコマンド
--volume or -v
こちらも以前の Docker コマンドの記事で記載しておりましたが、オプション--volume もしくは-v でボリュームのマウント先を決めることができます。
docker run --volume {ホスト側ディレクトリ}:{コンテナ側のディレクトリ} イメージ名
前回の復習ですが、上記がコマンドの例になります。
よくある使用例
では、よくある使用例として nginx のコンテナを起動して、ホスト側のファイルを反映させてみようと思います。
一旦、コンテナを起動して nginx のルートディレクトリがどこに設定されているのか確認します。
割愛しますが、以下がルートディレクトリになっていました。
/usr/share/nginx/html
そのため、nginx のコンテナを起動し、localhost:80/
にアクセスすると
/usr/share/nginx/html/index.html
が表示されるということです。
デフォルトのルートファイル
nginx の設定になるので、割愛しますが、ルートディレクトリなどの設定は
/etc/nginx/conf.d/default.conf
で確認できます。
ではまず、hmtl ディレクトリを作成し、以下のように index.html を記述します。
❯ cat ./html/index.html
<h1>Create File From Host</h1>
この./html ディレクトリで nginx コンテナのルートディレクトリ/usr/share/nginx/html
をマウントする。
結果、localhost:80
にアクセスした際にこのファイルが表示されれば OK となります。
docker run -d -v ./html:/usr/share/nginx/html -p 80:80 --name nginx nginx
きちんとマウントできてますね!
ホスト側のファイルを変更しても反映されるようになっているので OK です!
このように特定のディレクトリをマウントし、ホスト側のファイルを変更をリアルタイムで反映するものをバインドマウントと言います!
それとは対照的に、基本的にホスト側からファイルを変更することがないようなデータを共有する場合は、ボリュームマウントを使用します。
ボリュームマウントの場合、Docker 管理下のディレクトリにデータが保存されます。詳しくはのちの docker-compose のところで触れようと思います。
まとめ
今回はストレージ共有、ボリュームのマウントの中でもバインドマウントに絞って具体的に見ていきました。
次はついに Dockerfile についてまとめていこうと思います。
Discussion