「Vagrant で Docker コンテナ立ち上げて Ansible でプロビジョニングして開発環境を用意しよう!」のその2です。
今回は利用するツールについて記載していきたいと思います。
まずは Vagrant についてです。
https://www.vagrantup.com/
Vagrant は HashiCorp 社が開発した作業環境を提供するツールです。
リリースされた当初は話題になったかと思いますが、 Docker がでてきてからはすっかり鳴りを潜めた感じでしょうか。
たまに Vagrant と Docker を比較して「Vagrant は遅い!重い!Docker は軽い!早い!時代は Docker だ!」といった記事を見かけるのですが、自分はこの比較は意味がないと思っています。比較対象が同列なものではないためです。
Vagrant は作業環境を提供するツールですが、自分はインターフェイスと考えています。
実際にはバックで VirtualBox や VMware などの仮想化ソフトウェアが動いているためです。
さらにいえば、下記のURLの通り Vagrant を通して Docker を動かすこともできます。
https://www.vagrantup.com/docs/docker/
このため、Vagrant を使ってなにを動かすか?が大事なので Vagrant と Docker を比較するのは筋が違う、というわけです。
それに Windows10 Home では Docker を簡単に動かせないので、そのような環境では Vagrant + VirtualBox といった構成はまだまだ現役なのではないでしょうか?
(ただ、来年でてくる WSL2 で Docker が動くようになると、さすがに状況が変わるかもしれませんね!期待!)
次は上でも出てきた Docker です。
https://www.docker.com/
Docker は Docker 社が提供しているコンテナ型仮想化ツールです。
仮想化の方式には VirtualBox のようなハイパーバイザ型の仮想化を行うものや(ハイパーバイザ型にも種類があるのですが今は省略)、Docker のようなコンテナ型の仮想化を行うものがあります。
使い分けとしては下記のようなイメージです。
– OSのリソースを別々に制御する場合はハイパーバイザ型
– OSのリソースを共有して制御する場合にはコンテナ型
Docker の詳しい説明は他のサイトに譲るとして。
今回は開発環境に Docker を利用したいと思います。
VirtualBox を利用してもよいのですが、やはり新しい技術を使って触ってみるのがエンジニアとして大事な心構え(?)だと思います。
ということで、今回は Vagrant から Docker を動かす形になります。
最後に Ansible です。
https://www.ansible.com/
Ansible は レッドハット社が開発する構成管理ツールです。
このツールを使うことで、アプリケーションを動かすためのライブラリやパッケージ、ミドルウェアのインストールや設定を自動化することができます。
構成管理ツールとしては Ansible のほかに Puppet や Chef といったツールがあります。
Ansible の詳しい説明についても他のサイトに譲るとして。
以下は個人的な考えとなりますが。。
Ansible と Docker は相性が良くないと考えています。
なぜならば、Docker には Dockerfile という構成管理の仕組みがあるためです。
「じゃあ Ansible いらないのでは?」という考えに傾くのですが、本番環境で Docker を使わないとなると Docker の構成管理である Dockerfile が使えません。
その場合には別途に構成を管理する必要があると思います。
ということで、今回は汎用性を考慮して Ansible を使っていきたいと思います。
また、自分は使ったことないのですが Ansible では Docker についてサポートしている模様です。
https://docs.ansible.com/ansible/latest/scenario_guides/guide_docker.html?highlight=docker
詳しくは見れていませんが Ansible だけで Docker の構成管理もできるかと思うと期待が高まりますね!
ということで各ツールの紹介でした。
次回は vagrant up だけで PHP を動かすようにしていきたいと思います!
よしけー