VagrantとDockerを使ってRedis, Elasticsearch, MySQLをセットアップする
前回に引き続きVagrantネタを。
Redis + Elasticsearchを利用した開発環境をローカルマシンに構築しようと思い、ググっていたところ以下の記事を見つけた。postd.cc
Redis + Elasticsearchでまさに求めていた内容!ということで試してみたが、docker imageのpullが失敗してうまくできない。。ということで、ちょっと修正してみた。
また、元記事ではUbuntuにてVMを起動しDBにPostgreSQLを利用してるが、CentOSで動かしたいのとDBはMySQLを使いたかったので、こちらも合わせて変更した。
ちなみに動作確認マシンはMacBookProです。
事前準備
まずは、Homebrew, VirtualBox, Vagrantは元記事と同様にインストール。
プロキシVMのVagrantfile
プロキシVMのVagrantfile(ファイル名はVagrantfile.proxy)は以下のように修正
VAGRANTFILE_API_VERSION = "2" Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| config.vm.box = "hfm4/centos-with-docker" config.vm.provision "docker" config.vm.provision "shell", inline: "ps aux | grep 'sshd:' | awk '{print $2}' | xargs kill" config.vm.network :forwarded_port, guest: 6379, host: 6379 config.vm.network :forwarded_port, guest: 3306, host: 3306 config.vm.network :forwarded_port, guest: 9200, host: 9200 end
プロキシVM用のイメージはhfm4/centos-with-dockerのCentOS6.5を使用している。このBoxを選んだ理由は、Discover Vagrant Boxes | Atlas by HashiCorpにて
CentOS+dockerのキーワードでヒットしたから。他のBoxでもいいのかも。
なお、Port ForwardingはPostgreSQLの5432をMySQLの3306に変更。
DockerコンテナのVagrantfile
次に、DockerコンテナのVagrantfile(ファイル名はVagrantfile)はコチラ。
VAGRANTFILE_API_VERSION = "2" Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| config.vm.define "redis" do |v| v.vm.provider "docker" do |d| d.image = "redis" d.volumes = ["/var/docker/redis:/data"] d.ports = ["6379:6379"] d.vagrant_vagrantfile = "./Vagrantfile.proxy" end end config.vm.define "elasticsearch" do |v| v.vm.provider "docker" do |d| d.image = "elasticsearch" d.ports = ["9200:9200"] d.vagrant_vagrantfile = "./Vagrantfile.proxy" end end config.vm.define "mysql" do |v| v.vm.provider "docker" do |d| d.image = "mysql" d.volumes = ["/var/docker/mysql:/data"] d.ports = ["3306:3306"] d.env = { MYSQL_DATABASE: "test_db", MYSQL_ALLOW_EMPTY_PASSWORD: "yes" } d.vagrant_vagrantfile = "./Vagrantfile.proxy" end end end
元記事からの変更点としては、各コンテナのimageの値を変更。あとはPostgreSQLをMySQLに変更。MySQLの環境変数(MYSQL_DATABASEなど)はここmysql Repository | Docker Hub Registry - Repositories of Docker ImagesのEnvironment Variablesを参考に設定。上記の設定はパスワード未指定でログイン可能にしているので、流用時はよしなに設定を変更してください。
起動&停止
あとは、元記事と同じくvagrantを起動。
$ vagrant up --provider=docker
「vagrant up」だけではプロキシVMが起動しないようなので、providerオプションは必要みたい。
初回実行時はプロキシVMとDockerコンテナのDLに時間がかかるのでしばし待つ。エラーが発生しなければ、下記コマンドで状態を確認できる。
$ vagrant status Current machine states: redis running (docker) elasticsearch running (docker) mysql running (docker)
global-statusを指定するとプロキシVMも確認できる。
$ vagrant global-status id name provider state directory ------------------------------------------------------------------------------------------------ 29d4e38 default virtualbox running /Users/kajitiluna/_Work/vagrant 5c659c2 mysql docker running /Users/kajitiluna/_Work/vagrant 7d841ac redis docker running /Users/kajitiluna/_Work/vagrant 4f5cab0 elasticsearch docker running /Users/kajitiluna/_Work/vagrant
なお、「vagrant halt」で停止するとプロキシVMだけは止まらないので、プロキシVMを止める場合は追加で「vagrant halt <id>」を実行する必要あり。