はじめに
これから書いていくDocker関連記事の大きな目的は以下の2点です。
社内用に適当に書いた資料ですが何かの役に立つかもしれないのでこちらにも投稿しておこうかなっていう記事です。
- Dockerについての情報を、教育目線でまとめることでDockerに対する理解を深めること。
- 社内のDocker普及を目的として、ざっくりとした概要を社内のドキュメント環境に設置しておくこと。
概要
Dockerとはソフトウェアコンテナ内のアプリケーションのデプロイメントを自動化するオープンソースソフトウェアである。
Wikipedia
要するにデプロイの効率化を図るためのソフトウェアと言える?
Linuxカーネルにおける「libcontainer」と呼ばれるLinuxコンテナ技術とaufsのような特殊なファイルシステムを利用してコンテナ型の仮想化を行う。
ようするにlibcontainerでコンテナを生成し、aufsで複数ディレクトリを一つのマウントポイントとしてUnionMountをかけることで仮想環境を実現しているらしい。
libcontainer
名前空間・cgroup・機能・ファイルシステムへのアクセス管理を持つコンテナを作成
http://docs.docker.jp
aufs (AnotherUnionFS)
aufs (AnotherUnionFS) はもう一つのバージョンの UnionFS、つまり Linux ファイルシステムに対する union mount を実装するファイルシステムサービスである。
Wikipedia
union mount
union mounting is a way of combining multiple directories into one that appears to contain their combined contents.
Wikipedia
普通の仮想OSとの違い
VMwareやHyper-Vなどとどのように違うのかざっと書いておきます。
仮想OS
コンピュータのリソースを丸ごと仮想的に取り扱う。
仮想マシンへはそれぞれ切り出された仮想ハードウェアを提供され、仮想環境を管理しているHyper-Vなどのアプリケーションがハードウェアリソースの利用を管理する。
アプリケーションを実行するためにはまずゲストOSを稼働させなければならず、起動に時間もかかるし、CPUやメモリ、ディスクなどのリソースもOSを稼働させる分多く消費する。
Docker
Docker上のアプリケーションはホストOS中の1プロセスとして実行されているため、余計なオーバーヘッドがない。
DockerEngineによって、コンテナごとにファイルシステムやネットワークインタフェース、名前空間などが独立している。
Dockerの用語
Dockerホスト
DockerEngineを搭載した、コンテナを動作させるためのホスト。
VMとかでいうHypervisorみたいなサーバ。
Dockerイメージ
アプリケーションとその実行環境、展開/操作方法(スクリプト)などをまとめて1つのパッケージにしたもの。
公式に公開されているものもあれば、自作することも出来る。
DockerイメージをDockerEngine上で起動したものがDockerコンテナとなる。
Dockerfile
イメージに対して適用する指示を記述しておく、一種のスクリプトファイル。
例えばRubyとMySQLのパッケージを追加し、何らかのコマンドを実行する、というようなスクリプトを記述しておく。
Dockerイメージから実際の環境までの差分を記載したファイルになるだろう。
Dockerイメージと差分管理
上記のようなDockerfileやユーザの作業によって発生した変更は、イメージの差分として保存されており、イメージを直接書き換えることはない。
コレによって同一のイメージから複数のコンテナを生成しつつ、それぞれ異なる処理をさせることが可能となっている。
備考
Docker for Windowsは裏でHyper-Vが動いていて、そこでLinux類とDockerEngineが動くことでWindows上にLinuxコンテナが動作するようにみえるらしい。