《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撰

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

目の保温マッサージ

普段の業務で一番疲れる目を癒すために目元マッサージャーを毎日使っています。保温とマッサージを自動でしてくれるので、終わった後は血行が良くなり、翌日の目の疲労が激減します。また睡眠の質もあがるのでディスプレイと睨めっこの職業の方は必須アイテムだと思ってます。(笑)

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

8時間働くとして、その時間の殆どが椅子に座っている状態になるのがエンジニアの宿命です。椅子の性能が低いと身体に余計な負荷を掛けることとなり、良い椅子に座っている人と、そうでない椅子に座っている人にかかる1日の負担はかなり大きいです。ですので、身体への負荷を考えて、できるだけ良い椅子に座るべきです。とは言っても会社の椅子は既に決まっているので以下のクッションを購入することをおすすめします。体を包み込むようなフォールド性があり、疲労や腰の痛みなどが激減します。

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

最近購入したのがゲーミングチェアです。楽天ゴールドカードを持っている私は、Amazonではなく楽天市場でこの機種と似たようなものを購入しました。価格帯はほぼ同じで、このゲーミングチェアはAmazon内での評判も良いみたいですし、おすすめです。その理由は作業し終わった後の疲労感が異なり、座り心地もホールド感があって最高ですし、見た目がかっこいいからです。予算に余裕のある方は購入してみてはいかがでしょうか?

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

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

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