Docker

Docker（ドッカー）はコンテナ型の仮想化環境を提供するオープンソースソフトウェアである。VMware製品などの完全仮想化を行うハイパーバイザ型製品と比べて、ディスク使用量は少なく、仮想環境 (インスタンス) 作成や起動は速く、性能劣化がほとんどないという利点を持つ。 一台のサーバ上に複数のオペレーティングシステム (OS) を走らせる仮想化技術は従来から存在していた。例えば、ハイパーバイザ型のHyper-Vやホスト型のVirtualBox等である。仮想化の本来の目的は、一台のハードウエア内に出来る限り多くのアプリケーションを実行する事であるが、上記種類の仮想化では仮想環境毎にOSを丸ごとインストールする必要があり、アプリケーションに必要のないサービスやファイルまで伴っていた。これは資源(resource)の無駄使いであった。 アプリケーションとは直接関係の無いライブラリやデータは仮想環境内で共有する事が望ましかった。これを実現するのがコンテナ型の仮想化である。実際にDockerは、ホストOSのカーネルを共有する。それぞれの仮想環境はDockerコンテナと呼ばれ、一台のサーバ上でそれぞれが隔離される事で複数のインスタンスが動作しているように見える。 一般にアプリケーションを開発もしくは動作させるまでには、設定ファイルの編集や必要なライブラリのインストール等、本来の目的には関係のない煩雑な作業が必要である。Dockerはアプリケーションとライブラリを同一のコンテナ内に固めてしまう。一度固めたコンテナは軽量であるため移動が容易であり、比較的どの環境でも素早く目的のアプリケーションを動作させる事が可能である。これをDocker社は、Build, Ship, and Run Any App, Anywhere と表現している。 複雑なシステムであると、一度設定を間違えると、その操作の影響範囲の特定に時間がかかり、復旧には導入時間以上に時間がかる可能性がある。 Dockerでは、にっちもさっちも行かなくなったシステムは瞬時に削除できる。 Docker fileによる設定の変更での再構築の時間が短い。また、イメージを段階的に残してあれば、設定間違いの前の状態へ戻ることも容易である。 これらの際に、上記資源の効率の良さと、構築の容易さが効いてくる。廃棄が気軽にできるのが利点である。 Dockerのコンテナー管理の手軽さやインスタンス操作の高速性は、クラウドサービスやビッグデータ基盤などを管理するためのIT基盤として高く評価され、2014年12月日経BP社より「ITインフラテクノロジーAWARD 2015」グランプリに選出されている。 日本では「Immutable Infrastructure（不変のインフラ）」という表現と共に話題になることが多い。 2014年、GoogleはDockerとは言及していないが、コンテナ型仮想技術を利用しており、毎週20億個のコンテナを自社サービスのために起動していると発表した。 Linuxカーネルにおける「libcontainer」と呼ばれるコンテナ技術とAufsというファイルシステムをドライバとしてコンテナ型の仮想化を行う。libcontainerを使う通り、Dockerは仮想機械ではなく、個別の隔離されたプロセスとネットワーク環境を提供する。Aufsにより、Dockerコンテナ内に作成されたファイルは、元のDockerイメージ (雛形) の差分として蓄えられる。差分しかディスク容量を消費しないので、より少ないリソースでコンテナを作成し実行する事が可能である。なお当初はaufsのみのサポートだったが、その後btrfs、Device Mapper、OverlayFS、vfsが選択可能となっている。 Dockerfileと呼ばれる設定ファイルからコンテナイメージファイルを作成可能という特性を持つ。一方で、コンテナOSとしてはLinuxが、動作OSとしてはLinuxカーネルの多くの配布(distribution)、Microsoft Windows, Macintosh、その他仮想機械で動作する。。Docker DesktopはMacintosh, Windowsで動作する。すべての機能に対応しているのはUbuntuである。 2014年10月15日、マイクロソフトが次期WindowsをホストOSとして対応する旨が米マイクロソフトにおけるエンタープライズおよびクラウド部門の責任者スコット・ガスリー氏よりブログ上で発表された。現在、DesktopはWindows、Macintoshで動作する。 実際のアプリの動作は複数のコンテナ同士が協調し合う事が多いとされる。このため多数のコンテナを自動的に管理する (オーケストレートする) ソフトウエアが必要となる。KubernetesやDocker Swarmは当該機能を提供する。 Docker社は、2018年1月KubernetesをDockerに統合したバージョンのベータ版を提供し始めた。 2014年にDockerコンテナの共有サービスの場としてDocker Hubが発表された。アプリ作成者は自らの実行環境をDockerイメージとしてアップロードすることが出来る。ユーザーはそれをダウンロード、実行する事で素早くアプリの利用や開発が可能になる。イメージの検索も可能である。 LXC chroot kubernetes DevOps 仮想化 ハイパーバイザ ^ “Docker Releases”. docs.docker.com. Docker, Inc. (2018年5月10日). 2018年7月13日閲覧。 ^ “IT用語辞典 e-Words”. 2018年1月3日閲覧。 ^ “Dockerとは?”. 2018年1月3日閲覧。 ^ “第1回　Dockerとは”. 2018年1月3日閲覧。 ^ a b “さわって理解するDocker入門”. 2018年1月3日閲覧。 ^ a b “Dockerを理解するための8つの軸”. 2018年1月3日閲覧。 ^ “Docker”. 2018年1月3日閲覧。 ^ “「ITインフラテクノロジーAWARD 2015」を発表”. 日経BP社. 2017年1月3日閲覧。 ^ 大瀧隆太 (2014年5月16日). “いまさら聞けないDocker入門（1）：アプリ開発者もインフラ管理者も知っておきたいDockerの基礎知識”. ITmedia. 2016年12月22日閲覧。 ^ “すでにGoogleは全部のソフトウェアをコンテナに乗せており、毎週20億個ものコンテナを起動している”. 2017年1月3日閲覧。 ^ 2014年3月10日にリリースされたバージョン0.9でLXCからlibcontainerというライブラリを利用する実装に変更された。“Docker 0.9: introducing execution drivers and libcontainer”. 2018年1月3日閲覧。。 ^ “what container”. 2018年2月11日閲覧。 ^ “Install Docker”. 2018年2月11日閲覧。 ^ “Docker and Microsoft: Integrating Docker with Windows Server and Microsoft Azure”. 2018年1月3日閲覧。 ^ “Dockerをどっかーらどうやって使えばいいんでしょう。TOPPERS/FMP on RaspberryPi with Macintosh編 ５つの関門”. 2018年2月11日閲覧。 ^ “Kubernetesとは”. 2018年1月3日閲覧。 ^ “Kubernetesを統合したDockerがついにリリース。Docker for Mac with Kubernetesのベータ版が公開”. 2018年1月11日閲覧。 ^ “Dockerコンテナをクラウドサービス上で共有できる「Docker Hub」を使ってみる”. 2018年1月3日閲覧。 公式ウェブサイト ソースコードレポジトリ Docker Hub