アプリ開発者もインフラ管理者も知っておきたいDockerの基礎知識:いまさら聞けないDocker入門(1)
オープンソースのコンテナー管理ソフトウェアDockerについて主な機能と特徴、使用技術、動作環境などを紹介。ハイパーバイザー型とコンテナー型の仮想化の違いも解説します。
Dockerとは何なのか
「Docker」とは、Docker社(旧dotCloud)が開発するオープンソースのコンテナー管理ソフトウェアの1つです。
ハイパーバイザー型とコンテナー型の仮想化の違い
コンテナーとは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)などのクラウド環境で動作するのも大きな特徴です。
参考リンク
- レッドハット、クラウド時代の新たな抽象化レイヤとしてDockerコンテナを推進 - @IT
- 「AWS Elastic Beanstalk」でDockerコンテナの作成、管理が可能に - @IT
- Google Compute Engineが正式サービスへ。Docker、FreeBSD、CoreOSもサポート。ストレージは1GBあたり月額4円へ値下げ − Publickey
ハイパーバイザー型の仮想マシンを仮想マシン上で実行する“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"]
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の本番環境でデプロイすることもできる、素晴らしい機能追加だと思います。
代表的な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 © ITmedia, Inc. All Rights Reserved.
関連記事
共同プロジェクトも展開:Red Hat、Linuxコンテナ技術で米新興企業と提携
米Red Hatは、Linuxの次世代コンテナ技術に関して、米新興企業と提携を結んだと発表した。Red Hat Enterprise Linuxに「Docker」を組み合わせて、Red HatのPaaS製品の強化を目指す。認定ホスト間でのシームレスな機能を保証:米レッドハット、コンテナー化されたアプリケーションの認定プログラムを発表
米レッドハットは2014年3月11日、コンテナー化されたアプリケーションの認定プログラム「Red Hat Container Certification」を発表した。既存のアプリケーション認定プログラムの延長だ。ユーザーは「PaaS」「IaaS」を求めているわけではない:狭義の「PaaS」を超えようとするレッドハットのOpenShift
レッドハットは、PaaS製品/サービスの「OpenShift」で、アプリケーションデリバリメカニズムの一部になる一方、IaaSとの融合を目指している。米レッドハットのOpenShift責任者に聞いた。DevOps時代のJavaプログラマのためのオープンクラウド入門(1):“使用”より“構築”で学ぶオープンPaaS「OpenShift」
オープンなクラウドで重要性を増すJava。DevOps時代のJavaプログラマはアプリケーション開発者(Dev)もデプロイや運用(Ops)面におけるクラウド/インフラ技術への幅広い理解が必要となる。本連載では、さまざまなオープンクラウド技術を紹介していく。初回は、オープンソースのPaaSであるOpenShiftを紹介。どんな技術を使ってPaaSが実装されているのかを理解しよう