Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

業務アプリ開発者のための、コンテナ仮想化ツールDockerをつかったインフラ構築ことはじめ

インフラ構成管理ツールを使いこなす! コードではじめるサーバ構築 第5回

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2015/03/18 14:00

 本連載は、SI業界に入ったばかりの新米業務アプリケーション開発者や、SI業界を目指す学生さんを対象とした、インフラ構成管理ツールを使ってコードでインフラを構築するための講座です。また、インフラエンジニア/システムオペレータで、物理環境でのインフラ構築/運用管理は経験があるけど、プログラミングが苦手という方にも読み進めていただけるように、文法などの解説を入れながら説明します。今回は、コンテナ仮想化ツール「Docker」の紹介と、Dockerをつかったインフラ構築について説明します。

目次

はじめに

 前回の記事では、インフラのプロビジョニングツールである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を使ったシステム開発の流れ
Dockerを使ったシステム開発の流れ

 アプリケーション開発者はDockerを使って、開発したWebアプリケーションの実行に必要なすべてを「コンテナ」として1つにまとめます。このコンテナは、Dockerをインストールさえしている環境であればどこでも動作しますので、「開発/テスト環境では動くけど、本番環境では動かない」をなくすことができます。

 1度作ってしまえばどこででも動くソフトウエアの特性のことを「移植性(ポータビリティ)」と言います。Dockerは、高い移植性を持っていますので、クラウドシステムとの親和性が高いのが特徴です。つまり、開発した業務アプリケーションを、オンプレミス環境-クラウドや、クラウドークラウド間などで、システム要件や予算に応じて容易に実行環境を選択できます。

 システム開発では、アプリの実行環境に制約が多いと、特定ベンダーに依存したシステムになったり、開発のスピートが遅れたりすることがあります。現に、既存のオンプレミス環境で動作する基幹業務システムの中には、このインフラによる足かせで、必要以上に複雑な構成でシステムを運用せざるをえない状況になってしまったり、ビジネスのスピードに追従できない業務システムになってしまったりしているシステムもあります。そのため、高い移植性をもつDockerは、業務システム開発の現場で注目されています。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • WINGSプロジェクト 阿佐 志保(アサ シホ)

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂...

  • 山田 祥寛(ヤマダ ヨシヒロ)

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XMLD...

バックナンバー

連載:インフラ構成管理ツールを使いこなす!コードではじめるサーバ構築
All contents copyright © 2005-2018 Shoeisha Co., Ltd. All rights reserved. ver.1.5