5分で分かるDocker:Dockerをざっくり解説
コンテナのアプリケーション実行環境を管理するオープンソースソフトウェア、Dockerをおよそ5分でざっくり解説します。
Dockerとは?
Dockerとは、Docker社(旧dotCloud)が開発するコンテナのアプリケーション実行環境を管理するオープンソースソフトウェア(OSS)です。2013年にオープンソースのプロジェクトとして公開されました。
コンテナは、実行環境を他のプロセスから隔離し、その中でアプリケーションを動作させる技術です。コンテナが利用するリソースは他のプロセスやコンテナから隔離されています。そのため、コンテナに構築されたアプリは独立したコンピュータでアプリが動作しているように見えます。
コンテナを用いることで、異なるサーバでも、同じ構成の環境を簡単に構築することができます。PC全体を仮想化する仮想マシンとよく比べられますが、仮想マシンよりも軽量で高速に動作し、実行に必要なリソースも少なくて済みます。仮想マシンとコンテナの違いについては、こちらの記事(第1回 Dockerとは)で詳しく解説しています。
Dockerは、コンテナに含まれるアプリケーションをパッケージ化して実行する機能、コンテナを管理するためのツールとプラットフォームを備えています。
Dockerのメリット
Dockerには次の3つのメリットがあります。
開発ライフサイクルの改善に強い
Dockerを使用すると、開発者はコンテナを利用して標準化された環境で作業できるようになります。その結果、開発ライフサイクルが改善され、CI/CD(継続的インテグレーション/継続的デリバリー)につながります。
開発環境が簡単に用意でき、かつ本番環境と共通化できる
Dockerは「Docker Registry」「Docker Export/Import」という機能を有しています。これは、コンテナの元となるDockerイメージ(後述)を異なるホスト間で共有する機能です。例えばチームで開発をする際、開発用マシンで作成したDockerイメージを他のメンバーのマシンに簡単にコピーできます。これにより、アプリケーションの移植性や相互運用性を高めることができます。
アプリケーション実行環境を高速にデプロイできる
コンテナは、Dockerを実行するホスト上で他のアプリケーションと同じプロセス単位で管理されます。そのためコンテナでは、ハイパーバイザー型の仮想マシンでいうところのOSのブート処理が不要です。より少ないリソースでより多くのことができるため、アプリケーションの実行環境を高速にデプロイすることが可能になります。
Dockerアーキテクチャ
Dockerを利用する際は、Dockerイメージやコンテナなどのオブジェクトを作成します。代表的なオブジェクトの概要をDockerコンテナプロセスの内部と外部に分けて、ざっくりと解説します。
Dockerコンテナプロセスの外部
Dockerコンテナの実行をサポートするモジュール「Docker Engine」はサーバ(コンテナ実行用のエンジン)とクライアント(管理ツール)に分かれて動作します。
- Dockerクライアント
Dockerクライアントはサーバを操作します。コマンドを実行することにより、Dockerデーモンを制御します。
- Dockerデーモン
Dockerデーモンは、Dockerイメージやコンテナなどのオブジェクトを作成、管理します。
Dockerコンテナプロセスの内部
Dockerの内部を理解するためのコンポーネントとして、公式ドキュメントでは「Dockerイメージ」「Dockerレジストリ」「Dockerコンテナ」の3つを挙げています。Dockerイメージについては次のセクションで解説します。
- Dockerレジストリ
Dockerレジストリとは、Dockerイメージを共有する仕組みのことです。「Docker Hub Registry」という誰でも使用できるDockerイメージを共有する仕組みがあります。DockerはデフォルトでDocker Hub RegistryでDockerイメージを検索するように設定されていますが、それを利用せず、プライベートレジストリや企業などが構築して公開しているレジストリを利用することもできます。
- Dockerコンテナ
Dockerコンテナは、DockerイメージとDockerコンテナを作成する際に設定した構成オプションで定義された実行環境のことです。各Dockerコンテナは分離されており、Dockerを実行する環境にインストールされているものと依存関係にありません。
Dockerイメージとは
Dockerイメージとは、Dockerを用いてコンテナを作成するためにアプリケーションとその実行環境、展開、操作方法(スクリプト)などをまとめて1つのパッケージにしたものです。
DockerイメージをDocker Engine上で起動したものがDockerのコンテナです。コンテナ内で必要なアプリケーションをインストールし、各部をカスタマイズした後にそれをディスクに保存すれば、新しいDockerイメージとして利用できます。イメージファイルには互換性があるので、基本的にはどのDockerホスト上でも動作します。
DockerコンテナではDockerイメージファイルは全て書き込みが禁止されており、書き込まれた内容は全て新しい「レイヤー」に保存されます。元のイメージの内容を保ったまま、更新された差分データだけを別ファイルとして取り扱うので、少ないディスク領域で多くのコンテナを実行することができます。
Dockerが採用している技術
Dockerは、Go言語で開発されています。また、DockerはLinuxカーネルの機能やLinux向けファイルシステムを利用しています。
Dockerが使用している主な技術は次の4つです。
- Linux Namespaces:コンピュータリソースの隔離
- Linux cgroups:コンピュータリソースの制限
- AUFS/Device Mapper Thin Provisioning:ファイル/ディレクトリの差分管理
- Linux iptables:他のホスト、他のコンテナとのネットワークの構成
おわりに
ここまでDockerについてざっくりと解説しました。Dockerはコンテナ型のアプリケーション実行環境を整備するためのシステムですが、多数のコンテナを管理したり、状態を確認したりすることは得意ではありません。これを解決すべく、コンテナの設定や管理を自動で行うOSSの「Kubernetes」が開発されました(5分で分かるKubernetes)。
Dockerについてのより詳しい解説は、下記の記事などで紹介しているので、こちらもぜひ併せて確認してみてください。
参考文献
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- 「Kubernetes v1.20」からコンテナランタイムとしての「Docker」が非推奨に
Kubernetesプロジェクトは最新版の「Kubernetes v1.20」から、コンテナランタイムとしての「Docker」が非推奨となることについて、公式ブログで解説した。 - コンテナが攻撃されたらホストも危ないの?――クラウド利用時の「コンテナセキュリティ」の基礎知識
親子の会話で出てくるような素朴な疑問点から、クラウド環境における情報セキュリティの技術を学習する連載。最終回は、クラウドでコンテナを使用する際のセキュリティの基礎知識について解説します。 - Docker Hubの使い方とGitHubからのDockerイメージ自動ビルド
公式Dockerレジストリ「Docker Hub」にDockerコンテナーを公開する方法や、Automated Buildを利用してGitHubからDockerイメージを自動ビルドする方法などを紹介します。