軽いだけではない!ソフトウェアをパッケージにまとめる機能とは?-Dockerコンテナと関連技術をやさしく解説 (その2)
2013年にDockerコンテナの技術が登場して、今年で9年。Dockerコンテナの技術はITの基盤技術として当たり前のものになろうとしている。連載2回目となる今回は、Dockerコンテナが備える「ソフトウェアのパッケージング機能」について解説する
Dockerコンテナのイメージファイルが備える「3つの特長」
Dockerを生み出したdotCloud社(現Docker社)の創業者であるSolomon Hykes氏は、プログラマーがPC上で開発したアプリケーションを簡単に同社のクラウドサービスであるdotCloudへ持ち込めるようにしたいと考えました。そして、そのために開発したのがDockerであることは前回の記事でも紹介しました。
その結果、Dockerにはソフトウェアを簡単にパッケージして別のマシンへ持ち込める機能と、持ち込んだ先で瞬時に起動できる軽量な仮想マシンという、2つの大きな特長を備えることになりました。
前回はこの2つの特長のうち、軽量な仮想マシンについて紹介しました。今回はソフトウェアのパッケージング機能について紹介しましょう。
プログラマーが自分のPCで開発したソフトウェアを別のマシンで動くようにするには、一般にさまざまな手順が必要とされます。ソフトウェアが単一の実行ファイルしかなくて、設定ファイルなども不要であれば、ファイルをコピーするだけで済むかもしれません。しかし現実のソフトウェアは、実行ファイルと多数のライブラリファイル、表示用のスタイルファイルや多言語対応のための国別メッセージファイル、設定ファイルなど、多数のファイルで構成されています。アプリケーションを正常に動作させるには、これらのファイルをすべて適切なディレクトリに配置し、パスを通し、環境変数を設定するといった構成が必要となります。
Dockerでは、この適切な構成となっている状態をそのままイメージファイルとしてパッケージにすることができます(以下、これをDockerイメージと呼びます)。このDockerイメージをDockerに対応したマシン上に展開することで、アプリケーションをさまざまなマシンへ簡単に持ち運ぶことができるわけです。
これはVMware vSphereのような仮想マシンのイメージファイルを、別の仮想マシン上へ簡単に持ち込んで実行できるのと似ています。ただしDockerには、従来の仮想マシンとは異なる大きな特長が3つあります。
それは、Dockerイメージを「ビルド」できること、イメージを共有するための「リポジトリ」サービスがあること、そしてイメージ構成が「標準化」されていることです。
ビルドによりコンテナイメージが作成可能に
Dockerイメージの1つめの特長である「ビルド」と呼ばれる処理によって、Dockerイメージは容易に構築することができます。
ビルドの処理の手順書となるのが「Dockerfile」です。Dockerfileのなかに、どのようなファイルをどこから取ってきて、どのような処理を行い、Dockerイメージに含めるのかなどを書くことができます。例えばソースコードを取得して、ライブラリと一緒にコンパイルして、イメージを作成するといった手順が指定できるのです。
これによって手作業ではなく、コマンド一発でDockerイメージが作成できます。またDockerfileはテキストファイルであるため、コピーや変更、バージョン管理など、コンテナイメージの作成手順を容易に共有、改変、管理できるようになっています。
ピンチアウトで拡大
コンテナイメージは共有・公開できる
2つめの特長として、ビルド処理で作成されたDockerイメージはリポジトリによって保存・共有できます。
もっとも有名なDockerイメージのリポジトリが「Docker Hub」でしょう。Docker HubにDockerイメージをアップロードし、公開することができます。すると誰でも、そのDockerイメージをダウンロードして自分のマシン上で実行できるのです。
またDocker Hubには、プライベートリポジトリの機能もありますし、オンプレミスで実行できるソフトウェア版もあります。サードパーティからもDocker Hubのように、Dockerイメージを保存・共有できるリポジトリ機能を提供するサービスやソフトウェアが提供されています。これによりGitやGitHubを使ってソースコードを保存・共有するように、Dockerイメージをパブリックにもプライベートにも共有・公開できるのです。
さらに、MySQLやWordpressなどさまざまな主要アプリケーションのDockerイメージは、Docker Hubを検索すればだいたい見つかります。そのため自分でDockerイメージをビルドしなくても、既存のDockerイメージをダウンロードして、そのまま便利に使わせてもらう、あるいはそれをベースに改変して使うといったことも可能です。
Dockerイメージの仕様はオープン
Dockerイメージの3つめの特長は、その仕様がオープンなものとして明確に決められていることです。
もともとDockerはDocker社が開発したものですが、2015年に同社を中心にマイクロソフトやGoogle、Amazonなどが集まって標準化団体「Open Container Initiative」が発足しました。
Dockerイメージのオープンな仕様として「OCI Image Format Specification」を策定し、またコンテナランタイムの標準仕様として「OCI Runtime Spec」を策定しました。これにより現在では、さまざまなコンテナランタイムが登場しています。これについては本連載の次回以降の記事でも紹介していきましょう。
今回の記事では、Dockerイメージによるソフトウェアのパッケージング機能がDockerfileと呼ばれる手順書によって簡単にビルドでき、さらにリポジトリ機能によって共有できるといった特長を紹介しました。
そしてDockerイメージがオープンであることもあり、例えばGitHubでソースコードを共有して複数のプログラマーがコラボレーションし、Dockerイメージもさまざまな開発者によって共有され、そこに機能追加や改善などが行われて、より高機能あるいは高性能なアプリケーションへとつながっているのです。
こうしたエコシステムが構築されていることは、Dockerが広く普及した要因として非常に大きかったと言えるでしょう。
※このコラムは不定期連載です。
※会社名および商標名は、それぞれの会社の商標あるいは登録商標です。
-
新野淳一/Junichi Niino
ブログメディア「Publickey」( http://www.publickey1.jp/ )運営者。IT系の雑誌編集者、オンラインメディア発行人を経て独立。新しいオンラインメディアの可能性を追求。