サーバ環境構築 あるいは(無知がもたらす予期せぬ徒労) ~ Vagrant, Docker, Chef ~


目次

  • はじめに
  • まとめ
  • Docker
  • Vagrant
  • Chef
  • 最後に

Ads by Google

はじめに

(サーバ)環境構築の自動化。

兼ねてから興味があった分野ですが、足を踏み入れると広い世界が広がっているんだろうと思って何となくで過ごしてきました。

Docker,Vagrant,Chef,ansible,Itamae,,,

言葉は聞いたことがあるけれど、実態はいまいち掴めていないです。

  • それぞれの機能が分かっていない (できることを一言で言えない)
  • それぞれの関係性が分かっていない (住み分けが不明)

そんなわけで、それぞれの機能と関係性について自分なりにまとめてみます。

画像のようにたくさん手があれば、自動化なんて必要ないかもしれないですけど、私達の手は二本しかないのです。。。なお、タイトルは「バードマン」にインスパイアされた結果です。

caffeinating, calculating, computerating

まとめ

いずれも「インフラをコードで管理するためのもの」です。

理解するときにまとめたノートが下記です。

Docker_Vagrant

以上(時間がない人はここだけ読めばOK)。

Docker

コンテナ型の仮想環境を管理(構築)することができます。

「仮想環境を管理する」という意味においてVagrantと本質は変わりません。しかし、管理できる仮想化方式が異なります。それぞれの仮想化方式に一長一短があるようです(仮想化方式の細かい種類や説明については最後に記載する参考リンクをご覧ください)。

場面毎に仮想化方式を適切に選定し、使用していく必要があります。

Vagrant

ホスト型、スーパーバイザー型の仮想環境を管理することができます。

上記の説明と同様です。

基本的には、DockerとVagrantを「同時に」使うといったような使い方はしないようですが、調べると「同時に」というような文脈で結構いっぱいでてきますよね。

「同時に」という風に語られている文脈の一例を示します。

  1. ローカルの環境に、Dockerを使って仮想サーバを構築する
  2. ローカルの環境に、Vagrantを使って仮想サーバを構築する
  3. 一方の仮想サーバから、他方の仮想サーバに何かしらのアクションを行う(Chefの練習に使われている例が出てきました。調理するサーバと調理されるサーバ)

上記のような例は、厳密には「同時に」ではなく「平行して」だと思います。

DockerとVagrantを「同時に」使うというのは「Vargrantで管理する仮想サーバの上にDockerで管理するコンテナを構築すること」を指すと自分では理解しています。

上記のような例では、何故DockerとVagrantを「平行して」使うのかは今の私には良く分かりません。Chefの練習をしたいだけなら、DockerかVagrantどちらかで両方のサーバを構築すれば良いのではないかと思ってしまいます。

まぁ、その辺が「実現したいことに併せて適切に仮想化方式を選ぶ」ということに繋がるのだと思います。

最後に繰り返します。基本的に、DockerとVagrantを同時に使うことはありません。

Chef

サーバの管理(環境構築)を自動化します。上の2つがOSなども含めた広範囲な環境を管理するのに対して、こちらはサーバのミドルウェア等をコードで管理することができるものです。

今までもシェルスクリプト(秘伝のタレ)を使えば、サーバの管理をコードで行うことは可能でした。しかし、シェルスクリプト(秘伝のタレ)は以下のような問題がありました。

  • 少し込み入ったことをすると複雑化して他人には読みづらくなる。(秘伝のタレ化)
  • エラー処理等が簡単に実装することができなかった。

このような背景から簡潔に柔軟な記述が可能なChef等が人気になったらしいです。

最後に

自分なりにアウトプットする過程で以下の記事を参考に致しました。先人たちに感謝。

参考リンク