今日は、Docker エコシステムの新しい開発環境を概説します。まず、Docker とは 何かについて簡単に説明します。そして、アプリケーションをパッケージ化し、それらを簡単に配布するツールから、緩くまたは密に連携したクラウドソリューションを統合し管理するためのツールセットへと、Docker がどのように発展したのかについても概説します。
可愛い画像と私の「ラジオボイス」 (ゴホン) をお望みの方は、下記ビデオをご覧ください。そうでない方は引き続き以下をお読みください。
Docker とは ?
ここ数ヶ月、あるいはここ数年起こっている Docker の爆発的人気をご存じない方のために、Docker とは 何かについて簡単に概説させて頂きます。
プロジェクトの範囲はどんどん拡大していますが、多かれ少なかれ 4 つの概念にまとめることができます。
- Docker とは クラウドアプリケーション用の共通フォーマット、パッケージングフォーマットです。
- Docker は、アプリケーションとコンテナをリンクする軽量な方法を定義しています。一度アプリケーションをパッケージ化すると、アプリケーションが使用するポートやボリュームを他のコンテナや外部ホストに公開することができます。
- Docker では、アプリケーションの開発に必要なステップを全てキャッシュできます。コミュニティではあらかじめ技術スタックを用意しています。またあなたの独自アプリケーションに高速なアップグレードパスを提供しています。
- Docker では、必要であれば、アプリケーションを保存するためのグローバル名前空間を中央レジストリに提供します。また、必要に応じて独自のプライベートレジストリをホストすることもできます。
コンテナ vs 仮想マシン
Docker とは 何かについて 1 つの定義を上述しました。もう 1 つの定義として仮想マシンとの比較をします。
クラウドベースの開発およびデプロイ環境として最近非常に人気があるのは、仮想マシンでアプリケーションをパッケージングしたりそれを仮想マシンにインストールする方法でしょう。この方法は効率的ですが欠点もあります。
大きな欠点は、アプリケーションを配布するたびに毎回仮想 OS 全体をブートすることです。あなたのアプリケーション (わずか数 MB かもしれません) と一緒に、仮想イーサネットドライバや、 全バイナリとライブラリを含む OS 全体、OS で必要となる静的または動的にリンクした C ライブラリも配布するのです。
それはやり過ぎではないでしょうか?
Docker エンジンは単一のホスト OS 上に存在するプロセスで、特別にパッケージ化されたコンテナを独立して管理および実行します。
コンテナ自体はプロセスの動作を監視するだけです。コンテナは、特殊な層状の「コピーオンライト」ファイルシステムにアクセスでき、これによりシステムが他の基礎ストレージから分離されています。コンテナ内部のアプリケーションからは、マシン全体にアクセスできるように見えます。
OS 全体を起動する必要がないため、コンテナは極めて高速で起動します。仮想マシンよりもずっと多くのコンテナを 1 つのホストに搭載することができます。
進化する Docker エコシステム
最近では、Docker を使用してマイクロサービスアーキテクチャへ向かう傾向があります。例えば、現在一般的な Web アプリケーションは、複数のコンポーネントを有しています。データベース、フロントエンドコード、静的アセット配信などがあるかもしれません。また、高速な key/value ストアやリレーショナルデータベースへのアクセスが必要かもしれません。
これらすべてのコンポーネントは管理および統合される必要があり、ひとつのまとまったユニットとしてリンクされています。Docker エコシステムは、これらのワークフローをサポートする方向に進んでいます。
わずか数日前、Docker の管理者が、このパズルの新しい 3 つのピースをベータ版として公開しました。
1 つ目は Docker machine です。これは、ローカルおよびクラウドプロバイダー上で、非常にシンプルで使いやすいコマンドを用いて環境をプロビジョニングするツールです。私は先日、Docker machine の使い方を説明するショートビデオを公開しました。
2 つ目はクラスター管理ソリューションの Docker Swarm です。異なるホストに Docker をインストールしたら、それを 1 つのユニットとしてコントロールすることができ、また、制約により自動バランスや Docker Swarm へのアプリケーションのデプロイができるようになります。
3 つ目は Docker Compose です。これは以前は Fig として知られていました。アプリケーションの各コンポーネントをどのようにリンクしたら良いかを記述するために使用します。
上述した内容に関して、いくつかの簡単な例と設定をご覧になりたい方は、以下の動画をご覧ください。セクションを飛ばして視聴したい方のために時間指定リンクをこちらに用意しています。
動画全編
最後に
これら 3 つのパズルピースにより、Docker は単なるアプリケーションのフォーマットをはるかに超えたものになりました。今では、Docker を多くのホストにインストールするツールがあります。アプリケーションをクラスターに宣言的にデプロイしたり、各アプリケーションをリンクする方法を記述するツールがあります。これらをまとめ合わせることで、クラウドインフラストラクチャを越えて非常に素晴らしく感動的な抽象化ができるでしょう。それは最高なことです。
今はこれら新ツールの初期段階にあります。Docker システムは非常に早く進展していますが、将来性は絶大です。私はこれらの新しい開発環境にとてもワクワクしています。あなたにもこの便利さを理解して頂けることを願っています。
お読み頂きありがとうございます。 @atlassiandev または @durdn までご意見をお聞かせください。
*本ブログは Atlassian Developers の翻訳です。本文中の日時などは投稿当時のものですのでご了承ください。
*原文 : 2015 年 3 月 12 日投稿 "Docker triad: composing the future"