第8回 “紙の手順書”をなくす!? 「Dockerfile」とは何か古賀政純の「攻めのITのためのDocker塾」(2/2 ページ)

» 2015年09月16日 08時00分 公開
前のページへ 1|2       

紙の手順書をなくす新たなITインフラ構築手法とは

 「手順書がないと、何もできないよ!」と思われるかもしれません。手順書をなくすわけではありません。「紙」の手順書をなくすということです。

 「紙の手順書をなくす」と言っても、手順書を“プリンタで印刷しない”ではありません。ワープロソフトや表計算ソフトなどで手順書を保存しておくというものでもありません。彼らは、Dockerfileで「手順書をコード化」し、コンテナ技術を組み合わせて効率化する方法を思いついたのです。

 では、「コード化する」とは一体どういうことなのでしょう。Docker登場以前のシステム構築では、例えば、MySQL、Mediawiki、Apache Webサーバの3つを、人間が紙の手順書を目視で確認しながら構築していました。一方、Dockerでは「可能な限り、人間が目視で確認しなけばならない紙の構築手順書を排除しよう」という思想があります。もちろんDocker自体を全く知らない人は、Dockerの技術を習得するための紙のテキストや書籍、Webに掲載されている構築手順などを勉強する必要があるのですが、ここで言う「紙の手順書をなくし、コード化する」は、本番システムの構築や運用管理をコードで記述し、自動化、省力化することでミスを低減するという意味となります。

 つまり、人間が書く紙の手順書をなくし、Dockerfileと呼ぶOSやアプリの構築手順を記した設計書(コード)を記述するのです。その設計書に従ってOSとアプリが自動構築され、さらに構築した成果物をDockerイメージとして保管しておくというアイデアです。Dockerfileには、OSの入手やアプリのインストールなどの一連の構築手順を簡潔な書式で記述します。これで、構築の自動化を実現します。

 このDockerfileの自動化の仕組みのおかげで、紙の手順書をできるだけなくせます。Dockerfileがあれば、初心者でも熟練者でも同じように、ある程度の一定の品質を保ちつつWebサービスを構築できるようになるのです。さらに、Dockerfileを使えば、2回目以降の構築作業では、Dockerfile内の前回と同じ部分がシステムにキャッシュされているため、前回と同じ膨大な作業をスキップし、Dockerfileの中身が異なる部分だけの構築作業を実行するといった「構築の高速化」も実現できます。

 また、Dockerfileには、構築の作業工程がそのまま記載されていますので、手順書に書かれている設定と実際のシステムの設定が異なるといった問題が発生しません。運用管理を行う人にとっても、構築時に設定されたOSやアプリケーションのバージョンやパラメータをDockerfileから読み取ることができますので、問題切り分けの際の時間短縮にも貢献できるわけです。

photo 紙の手順書をできるだけなくし、Dockerfileで自動構築するという発想

Dockerfileと同様の考え方は古くから存在していた

 この「紙の手順書をなくす」という発想。実は、Dockerが誕生するはるか昔から存在し、実際に開発ツールとして存在していました。

 その開発ツールの一つに「Makefile」があります。UNIX/Linuxの世界では、ソフトウェアの大量のソースコード(=コンピュータプログラムの設計図ともいうべきコード)のコンパイル手順の自動化にMakefileが利用されます。大昔はソースコードの量が少なかったために、コンパイル作業を人間が1行ずつコマンドラインで行うこともあったのですが、ソースコードや読み込むライブラリなどが増えるにつれ、コンパイル作業が急激に複雑になりました。そこで、ソースコードのコンパイル手順をMakefileの簡素な文法に沿って記述しておけば、コンパイル作業の自動化が可能となり、ソフトウェアの開発効率が大幅に向上するのです。

 Makefileは今でも多くの開発現場で使われています。このような開発の省力化の考え方が、Dockerfileにも取り入れられています。Dockerfileにおいても、簡潔な文法に沿って構築手順を記述します。この簡潔な文法のおかげで、3層構成の構築の経験があまりない開発担当者や運用管理者でも、Dockerfileを参照すれば、アプリケーションがどのように構築されたのかを比較的容易に理解することができるのです。

photo Makefileの考え方はDockerfileにも受け継がれている

 紙の手順書は、人間のオペレーションミスやその作業者独特のクセなどが入り込む余地がありますが、Dockerfileならば、それらの手順がコード化されているためにミスが入り込みにくいメリットがあります。

 Dockerfileは、その中身を見ればある程度構築手順が分かるようになっており、ベンダーごとの暗黙知を極力排除し、誰もが読める構築手順書として使うことができます。Dockerコンテナの構築手順をコード化し、さらに、変更管理や履歴もコードで管理するわけです。

 これを一般的に「インフラストラクチャ・アズ・コード」と呼びます。あらゆる手順書をコード化し、インフラを自動構築・管理を行う手法の一種として運用管理者や開発者の間で現在積極的に採用されています。

 最近話題のChef(シェフ)やAnsible(アンシブル)は、このインフラストラクチャ・アズ・コードを実現する構成管理・自動化のオープンソースソフトウェアとして大きな注目を浴びています。Dockerfileも100%ミスを防げる魔法の杖では決してありませんが、今までの紙の構築手順書や運用手順書と比べると格段に人間のミスが入り込みにくい仕組みを提供してくれます。

 今まで紙の構築手順書や運用手順書を使っていた人からすると「私には、コードなんて書けないし、なんだか今までとガラっと変わってしまって、難しそうだ」と感じるかもしれません。

 しかし、人間のミスが入りこむ可能性のある紙の手順書と人手による手動介入を極力排除できるわけですから、使わない手はありません。しかも、構築手順は自動化されるため、初心者でも熟練者でも同じ結果が得られるはずです。

 なによりできあがったIT基盤の品質の確保が期待できますので、この機会にぜひDockerfileによるインフラストラクチャ・アズ・コードを実際のシステムに取り入れていただきたいものです。

(第9回はこちら


古賀政純(こが・まさずみ)

日本ヒューレット・パッカード株式会社 オープンソース・Linuxテクノロジーエバンジェリスト。兵庫県伊丹市出身。1996年頃からオープンソースに携わる。2000年よりUNIXサーバーのSE及びスーパーコンピューターの並列計算プログラミング講師、SIを経験。2006年、米国HPからLinux技術の伝道師として「OpenSource and Linux Ambassador Hall of Fame」を2年連続受賞。プリセールスMVPを4度受賞。現在は日本HPにて、Linux、FreeBSD、Hadoopなどのサーバー基盤のプリセールスSE、文書執筆を担当。Red Hat Certified Virtualization Administrator, Novell Certified Linux Professional, Red Hat Certified System Administrator in Red Hat OpenStack, Cloudera Certified Administrator for Apache Hadoopなどの技術者認定資格を保有。著書に「CentOS 7実践ガイド」「Ubuntu Server実践入門」などがある。趣味はレーシングカートとビリヤード



関連キーワード

Docker | CentOS | 攻めの経営 | Linux


前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ