連載
» 2014年05月16日 18時00分 UPDATE

いまさら聞けないDocker入門(1):アプリ開発者もインフラ管理者も知っておきたいDockerの基礎知識

オープンソースのコンテナー管理ソフトウェアDockerについて主な機能と特徴、使用技術、動作環境などを紹介。ハイパーバイザー型とコンテナー型の仮想化の違いも解説します。

[大瀧隆太,クラスメソッド株式会社]
「いまさら聞けないDocker入門」のインデックス

連載目次

Dockerとは何なのか

 「Docker」とは、Docker社(旧dotCloud)が開発するオープンソースのコンテナー管理ソフトウェアの1つです。

Docker

ハイパーバイザー型とコンテナー型の仮想化の違い

 コンテナーとはWebサーバーなどアプリケーションの実行環境を抽象化する技術であり、VMware ESXiやLinux KVMなどの「ハイパーバイザー型の仮想化」に対して、「コンテナー型の仮想化」と呼ばれることもあります。

ハイパーバイザー型とコンテナー型の仮想化の違い

 コンテナー管理ソフトウェア自体の歴史は古く、UNIX/Linuxであれば「FreeBSD Jails」「OpenVZ」「LXC(Linux Container)」Windowsアプリケーション向けでは「VMware ThinApp」などがあります。

Dockerの主な機能と特徴

 Dockerは、コンテナーでアプリケーションを実行するために以下の機能を持ちます。

  • コンピューターリソースの隔離および制限
  • 他のホスト、他のコンテナーとのネットワークの構成
  • ファイル/ディレクトリの世代と差分の管理

 Dockerの特徴の1つとして、新しい独自技術はほとんど使っていないということがあります。コンテナー管理に必要となる既存のOSS(オープンソースソフトウェア)を組み合わせて、コマンドラインおよびREST APIで手軽かつ効率良くコンテナー管理ができるようになっていることが、Dockerが広く支持され、注目されている理由だと思います。

レッドハット、AWS、グーグルもDockerを採用

 例えば、レッドハットのPaaS(Platform as a Service)であるOpenShiftの次期プラットフォームではDockerが採用されるようです。また、AWS(Amazon Web Services)やGCE(Google Compute Engine)などのクラウド環境で動作するのも大きな特徴です。

 ハイパーバイザー型の仮想マシンを仮想マシン上で実行する“Nested仮想マシン”(二重の仮想化)は、クラウド環境ではサポートされないことがほとんどである一方、コンテナー型の仮想化はそのような制約が無いため、多くのクラウド環境で動作します。

アプリ開発者とインフラ管理者がDockerを使うべき理由

 では、Dockerを使用することでどのような利点があるのでしょうか。アプリ開発者とインフラ管理者の双方が協調する「DevOps」のためのツールとしてさまざまなメリットがあります。

Dockerがインフラ管理者にもたらすもの

  • アプリケーションを少ないリソースで効率良く実行できる

 コンテナー型の仮想化はハイパーバイザー型の仮想化に比べ、CPUなどコンピューターリソースのオーバーヘッド(仮想化のために必要になる余分なリソース)が少ないため、リソースの少ないハードウェアでも実行できます。

  • Immutable Infrastructureの実装

 最近注目されているITキーワードとして「Immutable Infrastructure(不変のインフラ構成)」があります。Immutable Infrastructureはアプリの実行環境を使い捨てとし、環境を都度作り直すことにより構成変更を行う、アプリの実行環境をより管理しやすくする考え方です。

 詳細は記事「継続的デリバリ/デプロイを実現する手法・ツールまとめ」を参照してください。

 DockerはImmutable Infrastructureを実現するために必要な機能が一通りそろっており、実際の環境に適用できます。

  • Infrastructure as Codeの実践

 また、Dockerはコンテナーの構成を全て「Dockerfile」というテキストファイルに記述できるため、「Infrastructure as Code(インフラ構成をGitHubなどのコードリポジトリで管理)」を実践するツールとしても利用できます。モダンなインフラ構成管理にうってつけのツールです。

    FROM ubuntu:14.04
    
    RUN echo deb http://archive.ubuntu.com/ubuntu trusty main > /etc/apt/sources.list
    RUN apt-get update
    RUN apt-get install -y nginx
    RUN echo "daemon off;" >> /etc/nginx/nginx.conf
    EXPOSE 80
    CMD ["nginx"]
Dockerfileの例(Ubuntu 14.04でnginxを実行)

Dockerがアプリ開発者にもたらすもの

  • 開発環境が簡単に用意でき、かつ本番環境と共通化できる

 Dockerには、コンテナーの元となるDockerイメージを異なるホスト間で共有する、「Docker Registry」「Docker Export/Import」という機能があります。これらを利用することで、チーム開発において例えば開発用マシンで作成したイメージを他のメンバーのマシンに簡単にコピーできます。さらにコピー先を本番マシンにすれば、アプリケーションのデプロイツールとして利用することも可能です。

 コンテナーにはアプリケーションを実行するための構成が全てそろっているため、かっこいい言い方をすればアプリケーションのポータビリティ(移植性)インターオペラビリティ(相互運用性)を高める手段として活用できるともいえます。

  • アプリ実行環境を高速にデプロイできる

 コンテナーは、Dockerを実行するホスト上で他のアプリケーションと同様のプロセス単位で管理されるため、ハイパーバイザー型の仮想化マシンでいうOSのブート処理が必要ありません。そのため、コンテナーの起動はハイパーバイザー型の仮想マシンに比べ、かなり高速です(参考:Software Defined Boden: KVM and Docker LXC Benchmarking with OpenStack)。

コラム PaaSとDocker

 先日、AWS Elastic BeanstalkというAWSのPaaSライクなサービスでDockerサポートが追加されました。

 従来のElastic Beanstalkではあらかじめ決められたプログラミング言語やミドルウェアしかサポートされなかったのに対し、Dockerコンテナーであればそれらを自由に構成できるようになりました。また、開発用マシンで作成したDockerイメージをAWSの本番環境でデプロイすることもできる、素晴らしい機能追加だと思います。

Elastic Beanstalkの構成の変化

 代表的なPaaSであるHerokuやOSSのPaaSプロジェクトである「Cloud Foundry」でも、「Buildpacks」というミドルウェアや環境設定をカスタマイズする仕組みが追加されており、PaaSは構成に柔軟性が持てるように進化していることがうかがえます。

 また、DockerにせよBuildpacksにせよ、複数のPaaSで環境をカスタマイズする仕組みが共通で提供されれば、PaaS間の相互互換性を保つことができ、開発者にとってより使いやすいものになるのではないでしょうか。


Dockerが使用している技術

 Dockerは、Go言語で開発されています。また、Linuxカーネルの機能やLinux向けファイルシステムに依存するため、Linuxでのみ動作します。

  • Linux Namespaces:コンピューターリソースの隔離
  • Linux cgroups:コンピューターリソースの制限
  • AUFS/Device Mapper Thin Provisioning:ファイル/ディレクトリの差分管理
  • Linux iptables:他のホスト、他のコンテナーとのネットワークの構成

Dockerの動作環境

 前述の通り、DockerはLinuxカーネルおよびファイルシステムの機能に依存します。比較的新しい機能を利用するため、対応するLinuxディストリビューションのバージョンに注意してください。

  • Ubuntu Linux:Ubuntu 12.04 LTS、13.04以降64bitのみ
  • CentOS/RHEL:CentOS/RHEL 6.5以降64bitのみ
  • Fedora:Fedora 19以降 64bitのみ
  • (Mac)OS X/Windows:VirtualBoxなどでboot2docker(Dockerインストール済みのLinux VM)を実行

 またDockerの開発は現在非常に活発で、たびたび仕様変更があるため、各動作環境で利用できるDockerの最新バージョン(原稿執筆時点では0.11.1)を可能な限り使うようにしましょう。

次回はDockerのインストールと使い方

 今回はDockerの概要ということで、Dockerの特徴と機能、動作環境を紹介しましたが、いかがでしたでしょうか。次回は、Dockerのインストールと使い方を解説しますので、お楽しみに。

著者プロフィール

大瀧隆太

大瀧隆太

所属/職種:クラスメソッド株式会社 シニアソリューションアーキテクト

ビール片手に邦楽ロックバンドのライブ/フェスへの参加をこよなく愛する。業務ではAWS導入支援やAWS研修の講師に携わる一方、自動化/デプロイツールの活用でクラウドエンジニアがどこまでスケールできるのか日々試行錯誤している。

ブログURL:http://dev.classmethod.jp/


Copyright© 2016 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

素材感が溢れるツートンカラーの「VAIO C15」、プレゼント!

この記事に関連するホワイトペーパー

編集部からのお知らせ

@IT編集部では、編集記者を募集しています。ご興味のある方は奮ってご応募ください。

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。