Dockerとは?
Dockerとは、従来のホスト型(VMware等)やハイパーバイザー型(ESXi等)の仮想マシン技術とは異なり、ホストOS上に用意した仮想空間”コンテナ”内で、OSやアプリケーションを実行できる仮想コンテナ技術を提供するOSSソフトウェアのこと。
2013年にdotCloud社(現 Docker Inc.)からリリースされた。現在は「DevOps環境の構築」や「ソフトウェア開発環境の構築」等の様々な分野で注目されている。
無償版と有償版
現在、Dockerエンジンには大きくわけて2種類存在する。1つは、無償版のDockerエンジンであり、もう1つは有償版のDockerエンジンである。無償版のDockerエンジンは、Docker Community Edition(DockerCE)と呼ばれる。一方有償版のDockerエンジンは、Docker Enterprise Edition(DockerEE)と呼ばれる。
活用事例
メリット/デメリット
メリット
- 「アプリケーションの開発環境と実行環境をパッケージ化」し、迅速な配備や破棄が可能である。
- 仮想化技術の一種であり、1台の物理サーバ上に複数のコンテナを集約できるため、管理のコストや不可が削減できる
- 従来の仮想マシン(VMware等)と比較して、仮想OSを複数立ち上げる必要がなく、リソースの消費を抑えれるため、非常に軽量である
- イミューダブル・インフラストラクチャ(一旦、サーバを構築すると、ソフトウェアのバージョンアップやパッチ適用等の煩雑な管理を一切放棄するシステム)が可能である
- 『Docker Hub』と呼ばれるコミュニティサービスが活発であるため、既に多くのアプリケーションイメージが提供されている
デメリット
- 大量のDockerコンテナの管理が大変である。そこで、コンテナ化したアプリケーションのデプロイ、スケーリング、及び管理を行うためにコンテナオーケストレーション(コンテナを効率良く運用・開発するための技術)システムであるKubernetesが利用されるケースが増加している。
- キャパシティプランニング(計画・開発中あるいは稼働中のITシステムに求められるサービス需要/サービスレベルからシステムリソースの処理能力や数量などを見積もり、最適なシステム構成を計画すること)のベストプラクティスの事例が少ないため、明確に定義することが難しい。
- ライブマイグレーション(動作中の仮想マシンを停止させることなく、別のサーバに移動して処理を継続させる機能)をサポートしていない。
- ホストOS上のコンテナで稼働させるOSに制約がある。例えば、ホストOSがLinuxの場合には、その上で稼働するコンテナもLinuxに限定されてしまう。
概要と概要図
- Dokcerエンジン: アプリケーションのパッケージ化やコンテナの実行を担う
- Dockerイメージ: OSやアプリケーションを含んだテンプレートのベースイメージ
- Docker Hub レジストリ :公開されているDockerイメージをSaaS経由で提供する
- Dokcer プライベートレジストリ :ローカルで作成・保管したイメージの保管庫
- Docker コンテナ:分離された名前空間とアプリケーションの実行環境
- Docker クライアント :ユーザがコマンドを発行し、Dockerデーモンと通信を行う
Dockerでは、様々なOSとアプリケーションをパッケージ化された環境が、Docker Hubと呼ばれるレジストリサービスで用意されている。Docker Hubは「Docker Hub レジストリ」とも呼ばれ、インターネットを経由して、OS環境とアプリケーションを含んだイメージを入手することができる。
このDocker Hubから入手したイメージは「Dockerイメージ」と呼ばれる。Dockerイメージは、ベースイメージとも呼ばれており、Linux OSとアプリケーションを含んだ一種のテンプレートである。
Dockerのレジストリには、世界中のユーザや開発者が作成したDockerイメージが大量に保管されている。イメージを一から作成することも可能であるが、既にDocker Hubに用意されているイメージをそのまま利用できるため、OSやアプリケーションのインストールや初期設定等にかかる煩雑な作業工程を大幅に削減できるメリットがある。
一方で、インターネットを使わずに、ローカルのシステム用に配信するイメージの保管庫は「Docker プライベートレジストリ」と呼ばれる。ローカルのシステムにおいて、OSとアプリケーションのパッケージ化や、イメージを使ったコンテナの実行は、Docker本体が担う。このDockerの本体は、「Dockerエンジン」と呼ばれる。Dockerエンジンが実行するコンテナは、「Dockerコンテナ」と呼ばれる。
Dockerコンテナは、ホストOS上で複数同時に起動させることができ、ホストOSから見ると分離された名前空間として見える。通常ユーザは、Dockerデーモンが稼働するホストOS上でコマンドラインから操作を行うが、このDockerデーモンの操作を担う各種コマンドなどのインターフェースは「Dockerクライアント」と呼ばれる。Dockerクライアントは、Dockerデーモンが稼働するホストOS上でコマンドラインで操作できるが、遠隔地にあるDockerデーモンと通信を行うことも可能である。