個人的なメモ

技術メモがメインです.本ブログはあくまで趣味です.

Dockerとは

今回は,Dockerとはなにかというについてまとめます.

本記事は,いくつかの記事を見て理解したことをまとめたものです. 参考にした記事は最後にリンクを貼りました.

Dockerとは

Dockerとは,軽量なコンテナ型のアプリケーション実行環境. Docker社が2013年にオープンソースとして公開した.

他の方式との違い

独立したアプリケーション実行環境として,ハイパーバイザ型(Hyper-V)などホスト型(VMware PlayerやWindows Virtual PC, VirtualBoxあど)がある. これらの方式は,目的のアプリケーションとは関係のないサービスなども多数動作するため,オーバーヘッドが大きく,リソースも無駄に多く必要になりがち.

これに対してコンテナ型の仮想化環境とは,Linuxカーネルがもつコンテナ機能などを使って,実行環境を他のプロセスから隔離し,その中でアプリケーションを動作させる. コンテナはLinuxの通常のプロセスとほぼ同じものだが,利用できる名前空間リソースが他のプロセスやコンテナから隔離され,それぞれ固有の設定を持てる. コンテナを管理するコストはプロセスを管理するコストとほぼ変わらず,仮想化マシンを管理するコストと比較すると非情に軽い.

ファイルシステムやコンピュータ名,ユーザー名(ユーザーID),グループ名(グループID),プロセスID,ネットワーク機能などを,コンテナごとに独自に設定できるようにする機能.

  • リソースの隔離機能

CPUやメモリ,ディスク入出力など,コンテナ内で利用するリソースを他のコンテナから隔離したり,設定に基づいて振り分けたりする機能.

3つの方式を比較した図を下記に示す.

f:id:engineerAlex:20200524141509j:plain
仮想化技術の種類.[リンク先より引用]www.atmarkit.co.jp
  • ホスト型

ホストOS上にハードウエアをエミュレートするアプリケーションを動作させ,その上でゲストOSを動作させる. 仮想化アプリケーションを簡単に導入でき仮想マシンの管理も簡単な反面,ホストOSのオーバーヘッドがあるため速度的に不利である.

  • ハイパーバイザー型

物理サーバー上にハードウエアをエミュレートする仮想化プロダクト(ハイパーバイザー)を直接導入し,ハイパーバイザー上でゲストOSを動作させる. ホストOSのオーバーヘッドがないため,ホスト型よりも速度的に有利である.

  • コンテナ型

ホスト型やハイパーバイザー型のようなハードウエアエミュレートは行わず,Linuxの各種コンテナ技術(リソース割当量の調整を行うcgroupや,プロセス空間やネットワーク空間などを分離するnamespaceなど)を用いてコンテナを構成する.

各コンテナはホストOSのカーネルを共有するが,コンテナ技術によってユーザープロセスやネットワーク,ディスク領域などが他のコンテナから隔離されるため,利用者からすれば新しい仮想マシンが立ち上がったように見える. ホストOSのカーネルを共有するため,コンテナの起動が圧倒的に速くオーバーヘッドも小さい.

Dockerイメージとは

Dockerではアプリケーションとその実行環境、展開/操作方法などをまとめて1つのパッケージにし,それをDocker imageとして保存/配布する. イメージはDocker hub」に公開されている.

Docker imageをDocker Engine上で起動したものがDockerのコンテナになる. そのコンテナ内で必要なアプリケーションをインストールし,カスタマイズしてそれをディスクに保存すれば,新しいDocker imageとして利用できる. この方法は,すでに存在するimageや新しいimageをカスタマイズしたり,コンポーネントをバージョンアップするには不便である. 手動でカスタマイズした内容を,新しいimageに対してもう一度適用しなければならないからである.

そのような場合は,Dockerfileというスクリプト機能を使うことになる. このファイルにimageに対して適用する支持を記述しておき,Dockerfileをベースとなるイメージに適用すれば,同じソフトウェア環境を用意することが可能である.

DOcker imageの履歴管理

DOckerのコンテナ内ではimage中のファイルシステムはすべて書き込み禁止になっており,書き込まれた内容はすべて新しいレイヤーに保存される.元のimageの内容との差分データだけを別ファイルとして扱う. レイヤーの内容は適宜コミッt0することにより,新しいimageとして保存できる.

参考にした記事

www.atmarkit.co.jp

www.kagoya.jp

www.atmarkit.co.jp