55
56

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

プログラマのためのDocker超入門 02.構成管理

Last updated at Posted at 2015-07-17

ansible_logo.png

まだDockerの話にはなりません・・

前提

インフラ?そんなの仕事じゃないよ?な方へ向けた記事です。
正確な説明や絶妙な比喩よりも、わかりやすさを優先します。

構成管理って

Dockerが注目されている理由やメリットを理解するためには
ここでいったん、仮想化とはちょっと違った視点で
構成管理にも触れなければなりません。

構成管理とは、簡潔すぎて微妙な言い方をすれば
ソフトウェアのインストールと設定を管理すること
です。

インストール・設定問題、山積

「ホームページ作って :stuck_out_tongue_closed_eyes: !」と言われたら ApacheNginxあたりをググりましょう。
でも「Ruby使いたい :kissing_smiling_eyes: 」とか「Pythonで書いてね :relaxed: 」と続いたら
そのプログラミング言語やWebフレームワーク1の用意が必要です。

これ、いざやろうとすると悩ましいことばかり。
たとえば

  • PHPはどのバージョンを使おう
  • そのPHPと相性のいいApacheのバージョンはどれだろう
  • データベースには何を使おう、MySQLだとしてバージョンはどれがいいのだろう
  • タイムゾーン2や文字セット3はどうやって管理すればいいのだろう

そして、悩んで決めて、インストールがうまくいっても、
将来誰かに引き継いだり、新人さんの環境を作ろうとすると

  • インストーラをどこからダウンロードしてきたのかわからない4
  • 設定、どれが初期値で何を変更したのかがわからない
  • そもそもどうやってインストールしたのか思い出せない
  • というか、手順書がない5 :cry:

...。
こんな悲劇を未然に防ぐのが構成管理ツールです。

構成管理ツール

有名どころは3つ ChefPuppetAnsibleです6

いずれも、あらかじめ定義した
「いつの」「何を」「どこから」「どうやって」設定するかという手順に従い
ソフトウェアをいい感じにコンピュータにインストールしてくれる優れものです。

もしソフトウェアをどこかにインストールすることになったら
どれかを使ってみるのお勧めします。
なぜなら

  • プロジェクトに必要なソフトウェアとそのバージョン、取得先を明示できる
  • 設定の何をどう変えたかも含め、すべての定義や作業が履歴管理7できる!
  • 冪等という素晴らしい状態が得られる!!・・かもしれない8
  • 一度定義が完成すれば、環境のコピーがワンクリック並みの手軽さでできる
  • 何より人間が作業しないので、人為的なミスが確実にゼロになる!!

からです。

一方で、構成管理の難しさ

これすごい!よさげ!!なわけですが
一方で

  • インストールしたいコンピュータのOSによっては動かない。Windowsとかね
  • 同じ定義書を利用しても、隣の人とまったく同じ環境になる保証がない9
  • ひとつのプロジェクトで、複数バージョンのソフトウェア10を同時に使うのは依然困難
  • そもそもプロジェクトごとに定義書作るのはやっぱり大変11

だったりはします。

難しいところはあり、万能ではないと把握しつつも
やはり強力なツールであることは間違いありません。
そこで、前回お話しした仮想化を組み合わせてみましょう。

構成管理を知った上で仮想化再び

さて前回の01.仮想化では、仮想化いいよねー :laughing: が結論でした。

しかし実は、開発環境を仮想化するにあたっては
この構成管理ツールを併用することで、もっと便利なことが起こります。

構成管理ツールを使って、アプリ開発に必要な環境を作ることを
プロビジョニングと言いますが、Vagrantは Chefや Puppetなどを
プロビジョニングツールとしてサポートしています。

ターミナルから

$ vagrant up

と仮想環境を起動するように命令するだけで
内部で構成管理ツールが動き、Macでも Windowsでも
誰がやっても同じような環境を作ることができるのです。

本番サーバのセットアップ

同様に
あなたの作ったサービスを稼働させる本番用のサーバでも
(Vagrantは使いませんが)構成管理ツールでプロビジョニングすれば
期待通りのソフトウェアがインストールされ、設定されるのです。
これは画期的ですね!!

インフラ業界でいう Infrastructure as Code の始まりです :chicken: :baby_chick:

プロビジョニングに冪等性があり、
環境が正しくセットアップされたことたしかめるテストも
ソースコードで自動化12されたのなら時代は 2014年。かなり今っぽい!

今回のまとめ

開発環境のセットアップを Wikiや Excelに手順書としてまとめるのは止め、
仮想環境+構成管理ツールの手法に変えてみませんか?
Windowsでももちろん可能です。

しかも今や、インフラもプログラマブルな時代です。
スキルを生かして便利な仕事環境を作りましょう!

Docker入門なのに、Dockerに今回も至らずすいません・・

03.クラウド
 

  1. Webサーバをかんたんに作るためのライブラリ・ソースコード集

  2. 日本で動かすサービスならAsia/Tokyo一択ですけどね

  3. 文字セットはUnicodeとしても、エンコーディングはDBまわりが意外とアレ

  4. どこのリポジトリを使ったのかわからない、とも

  5. もしくは「どのExcelが最新ですか?」問題

  6. 私はAnsibleに落ち着きました

  7. バージョン管理。GitやSubversionがない世界にはもうもどれませんね

  8. 冪等になれば幸せですが、ちゃんと作るのはけっこう大変

  9. 実行前のコンピュータの状態やインストールされる細かいバージョン差異など・・

  10. 異なるバージョンの依存ライブラリ、というケースの方が多いか

  11. git管理上横展開されたファイル・・コピペ職人とメンテナの戦い・・

  12. Serverspecなどを使います

55
56
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
55
56

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?