《Docker》初心者エンジニアがコンテナとボリュームの違いについて解説

Docker

ボリュームの基本知識

ボリュームとは

コンテナを破壊するとデータも同時に破壊されてしまうので、保存しておきたいデータはコンテナの外にボリュームとして保存します。つまり、ボリュームはハードウエア上の記憶装置のことを指しています。

マウントとは

記憶装置や周辺機器などをOSに認識させることで、利用可能な状態にすることをマウントと言います。実例として、記憶装置(ボリューム)にdocumentというフォルダがあるとします。このdocumentフォルダをコンテナAで使えるように設定、利用可能な状態にすることなどが挙げられます。

見えるボリュームと見えないボリューム

ボリュームにはユーザーから見えるボリュームと見えないボリュームが存在します。

種類

特徴

見えるボリューム

ホスト側のディレクトリにある

見えないボリューム

Dockerのリソースにある

ホスト側から見えないボリュームを見るために以下の volume コマンドを叩いてみましょう。

現在Dockerのリソースにあるボリュームを参照することができます。

厳密なボリュームの種類

  1. Bind
  2. Volume
  3. Temps

ボリュームは厳密には3種類あります。

Bind

Dockerホストのファイルやディレクトリをコンテナ上にマウントする機能です。
バインドマウントを行うと、コンテナの外にあるファイルを、コンテナの中から読み書き可能になります。

引用:「Docker】第5回 マウントについて(bind)」

【Docker】第5回 マウントについて(bind)/札幌のAI・IoT・システム開発|ITイノベーション/最先端技術|パブリックリレーションズ
【Docker】第5回 マウントについて(bind) - 札幌のAI・IoT・システム開発|ITイノベーション/最先端技術|パブリックリレーションズ

DockerホストっていうのはDocker engineが動作している仮想マシンのことです。つまりBindは仮想マシンないのファイルをコンテナに共有できるということになります。

Volume

Docker が管理するデータ領域を コンテナ上にマウントする機能です。
バインドマウントとの違いは、バインドマウントが「Dockerが管理するデータ領域以外もマウント可能である」ことに対し、ボリュームマウントは「Dockerが管理するデータ領域内でのマウントのみ可能である」という点です。

引用:「Docker】第5回 マウントについて(bind)」

【Docker】第5回 マウントについて(bind)/札幌のAI・IoT・システム開発|ITイノベーション/最先端技術|パブリックリレーションズ
【Docker】第5回 マウントについて(bind) - 札幌のAI・IoT・システム開発|ITイノベーション/最先端技術|パブリックリレーションズ

Temps

Dockerホストにファイルとして保存したくないデータを一時的に利用できるようにする(データ領域をメモリ上に置く)機能です。

引用:「Docker】第5回 マウントについて(bind)」

【Docker】第5回 マウントについて(bind)/札幌のAI・IoT・システム開発|ITイノベーション/最先端技術|パブリックリレーションズ
【Docker】第5回 マウントについて(bind) - 札幌のAI・IoT・システム開発|ITイノベーション/最先端技術|パブリックリレーションズ

Docker 簡単ハンズオン

ボリュームを作ってみる

ボリュームの理解を深めるためにボリュームをローカルで作ってみましょう。今回のハンズオンは以下のQiitaの記事を参考にさせていただきます。

Docker Volume (特に volumeタイプ) のわかりづらいところを説明してみる - Qiita
Dockerにはイメージやコンテナとは別にボリュームというデータを永続化する機構があります。 「ボリューム?ホストのファイルをコンテナ内で使えるようにするやつでしょう?」と思ったあなたは1/3だけ正しいです。 Dockerのボリュ...

まずはDcokerファイルを作りましょう。

このDockerfileを元にイメージを生成します。Dockerfileで定義したイメージを生成するには「build」コマンドを使います。またイメージに対して、環境構築のためのコマンドを実行したりする際には「run」コマンドを実行します。

今回はイメージの/myvol以下をmyvol-sample-volumeという名前をつけてボリュームとして保存します。ではこのボリュームが本当に生成されているかどうか以下の「volume」コマンドをつかって実行してみましょう。

myvol-sample-volumeというボリュームが生成されていることが確認できます。また今回 –rmをオプションでつけることでコンテナの処理が終了したあとに自動でコンテナを削除させています。では次はvolume内に保存されているgreetingをコンテナから出力させてみます。

Dockerfileでechoした内容が出力されることを確認できると思います。ではDockerfileを書き換えてみましょう。

新しく文字列を追加しました。この状態ですとイメージもボリュームも何も更新されていないのでまずは新しいDockerfileの元、新しいイメージを生成します。

では新しいイメージを元に新しいボリュームをsample-volume2という名で作りましょう。

先程と同様にボリュームが作られたかどうか確認します。

ちゃんとに生成されていることが確認できますね。では更新後のボリューム内容をcat /myvol/logic のコマンドを叩いて参照します。

追加したechoの出力が表示されているので成功です。といった感じで簡単なハンズオンはここで終わりです。少しボリュームがどんなものなのかを理解することができたのではないでしょうか?

番外編:働くエンジニアにおすすめアイテム3撰

記事の内容とは別に、日々エンジニアの業務を行う上で役に立っているアイテムを紹介します。どれも実際に使って良いと思ったものだけ紹介していますのでその点はご安心ください。

目の保温マッサージ

毎日使っている目の保温マッサージ機です。使うと翌日の疲労感が全く違います。1日中PCと睨めっこの人は今すぐ購入することを強くお勧めします。

座っている時の負担を減らす

このサポート座布団を購入してからデスクワークの疲労が激減しました。価格も安く購入しやすいのでコスパ最強です。現在職場でも愛用しています。

自宅での作業効率をあげる椅子

ゲーミングチェアを購入して、自宅での作業効率が最大化しました。座った途端集中モードに入ります。家で作業する人は絶対に買っておきたいアイテムです。

エンジニアの基礎知識・教養

別の記事でエンジニアとして知っておくべき技術本についてまとめました。スキルの高いエンジニアは極々当たり前にしっている知識だとおもいますが、そうでない方はエンジニアとして最低限知らないとまずい知識ですのでどこかで購入し、読むことをお勧めします。

筆者
筆者

今回の記事の内容は以上で終了です。最後まで読んでくれてありがとうございます。また技術、経済、株式投資などのことを Twitter でも呟いていますので良かったらフォローよろしくお願いします。

タイトルとURLをコピーしました