はじめに
前回の記事では、インフラのプロビジョニングツールであるChefやVagrantを使ってローカルPCに仮想環境を構築し、Webアプリケーションの開発環境を自動で構築する手順を紹介しました。業務システム開発における開発環境構築は、負荷が大きな作業の1つです。ライブラリのバージョンが違う/依存関係にあるライブラリが無い/環境変数の設定が違うなどインフラ環境に依存する不具合は、コーディングミスなどによるバグに比べて、環境全体を理解していないと原因の切り分けや特定が難しく、初学者には難易度の高いものです。プロビジョニングツールをうまく使って、インフラ環境をコードで構築/管理し、開発チーム内で適切なバージョン管理を行えば、「こっちでは動くけど、あっちでは動かない」を減らすことができます。
このシステム開発の現場でおこるインフラ環境に起因する問題は、業務アプリケーションを開発環境から本番環境へリリースするときも発生します。これを解決できるツールとして今注目を集めているものが、コンテナ仮想化技術を使った「Docker」です。今回は、Dockerを紹介します。
対象読者
本記事は、次の方を対象にしています。
- コードを使ってインフラの構成管理がしたい人
- ネットワークやLinuxの基礎知識がある人
- Webシステムの開発環境を構築したことがある人
Dockerとは(1)
Docker(ドッカー)は、コンテナ仮想化環境でアプリケーションを管理/実行するためのオープンソースのミドルウエアです。DockerはLinux上で動作し、Go言語で書かれています。2013年よりDocker社が開発を行っており、執筆時の最新バージョンは1.5.0です。
公式サイトは次のとおりです。
Dockerはオンプレミス環境だけでなく、AWS(Amazon Web Services)やGCE(Google Compute Engine)などのクラウド環境でも動作します。またRed Hat社やMicrosoft社などの大手ベンダーが次々とサポートを表明しています。
前回の記事でご紹介したVagrantとChefを組み合わせると、コードをもとにインフラ環境が自動で構築ができましたが、非力なマシンだと仮想環境の起動にかなりの時間がかかったのではないのでしょうか?
Dockerは現在、非常に速いスピードで活発に開発が進んでいます。そこでまず、Dockerの使い方を皆さんにご紹介する前に、Dockerとはどのような特徴をもつミドルウエアで、なぜそれが今業務システム開発で注目されているのかを整理したいとおもいます。
どこででも動く、Dockerの高い移植性(ポータビリティ)
開発した業務アプリケーションを本番環境で稼働させるためには、次のような要素が必要です。
- 業務アプリの実行モジュール(プログラム本体)
- ミドルウエアやライブラリ群
- OS/ネットワーク設定などのインフラ設定
Dockerは、これらの要素を「コンテナ」にまとめて管理します。
通常の業務アプリケーション開発では、次のような流れで開発が進みます。開発環境やテスト環境では正しく動作していても、本番環境にデプロイすると、正常に動かないことがあります。
大規模なシステムの場合、開発環境の構築はアプリ開発者、テスト環境/本番環境はインフラエンジニア、本番稼働後の運用はオペレータなど、工程に応じてインフラ環境を管理する担当が分かれている場合がほとんどです。そのため、リリースした業務アプリが正しく動かないとなると、原因調査にも時間がかかりますし、ともすれば犯人捜しになってしまい、プロジェクトを迅速かつ円滑に進める妨げになったりすることもあります。
Dockerを使うと次のような流れで開発できます。
アプリケーション開発者はDockerを使って、開発したWebアプリケーションの実行に必要なすべてを「コンテナ」として1つにまとめます。このコンテナは、Dockerをインストールさえしている環境であればどこでも動作しますので、「開発/テスト環境では動くけど、本番環境では動かない」をなくすことができます。
1度作ってしまえばどこででも動くソフトウエアの特性のことを「移植性(ポータビリティ)」と言います。Dockerは、高い移植性を持っていますので、クラウドシステムとの親和性が高いのが特徴です。つまり、開発した業務アプリケーションを、オンプレミス環境-クラウドや、クラウドークラウド間などで、システム要件や予算に応じて容易に実行環境を選択できます。
システム開発では、アプリの実行環境に制約が多いと、特定ベンダーに依存したシステムになったり、開発のスピートが遅れたりすることがあります。現に、既存のオンプレミス環境で動作する基幹業務システムの中には、このインフラによる足かせで、必要以上に複雑な構成でシステムを運用せざるをえない状況になってしまったり、ビジネスのスピードに追従できない業務システムになってしまったりしているシステムもあります。そのため、高い移植性をもつDockerは、業務システム開発の現場で注目されています。