BLOG ブログ

エンジニアブログ

2016.09.14

Windows + Vagrant + Dockerな開発環境

オズビジョンエンジニアの佐久間です。

突然ですがDockerをご存知でしょうか?
私は最近やっと存在をしりました。

今私は新規のサービスを作るチームに所属しています。

その時に使うローカル環境を既存のものではなく、
せっかくなので新しく構築し直そうと思い、その時にDockerを使うことにしました。

これから作る新規サービスを稼働させるサーバはAWSを使いLinuxOSで立ち上げています。
しかし手元のマシンはWindowsのPCでした。

新規サービスと同様の環境を用意するためにWindows + Vagrant + Dockerで環境を構築しました。
なぜわざわざVagrantを挟んでいるかというと、Dockerはホスト側のカーネルを共有しているためです。

環境を構築していくときに困った点と導入して良かった点を挙げようと思います。

困った点1

・docker pushできない

この問題に一番ハマりました。
docker push hoge/fuga すると途中でとまる。調べようと思うとなぜかvagrantがおかしくなる。
一度vagrantへのsshを抜けて再接続しようと思うとできなかったりもしました。

こうなるともうvagrant destroyして作り直すしかなく、
一体何が原因なのかしばらくわかりませんでした。

結果、このとき起きていたのは、vagrantのディスク容量が100%になっていました。

vagrantの中でいらないものを削除したりすれば解決できたかもしれませんが
いっそのことなので仮想ディスク領域を拡張しました。

困った点2

・Vagrantでディスクのマウントができない

ディスク容量を増加したあと確認していたらvagrantで、
ディスクのマウント部分でエラーがでてしまいました。

仮想領域を触ったことで何か問題がでたのかなーと調べていましたがよくわからなかったのでVagrantの
マウント部分のモジュールをもう一度たたいてみました。

/opt/VBoxGuestAdditions-5.0.12/init/vboxadd setup

ちなみに/opt配下にあるのはCentOS7系からです。

その後ホストに戻りもう一度Vagrantを再起動したら治りました。
ほかにも細かいところでいろいろと不都合は起きていますが、都度直してなんとかやってます。

良かった点1

・どれだけ壊してもすぐに作り直せる

こんなのあたりまえ、といえば当たり前ですがDockerを使う場合Dockerfileに記述できる点が
よりメリットになったという印象があります。

というのも、現在チームで開発をするにあたり、
より自分たちに合う良い方法を探しながら環境の構築をしていたのですが、

今までだと構築した環境をほかの人に教えるためにコマンドのメモを取ったり、
その人のPCで代わりに作業したりしないといけなかったのですが、Dockerfileに記述しておくことで
「あとはbuildしておいてね」という一言で済むようになります。

ベースの環境がDockerfileにあればどれだけ壊してもすぐに作り直せますし、
大きな変更を加えないのであればDockerHubに上げてチームで共有すれば
あとはdocker pullするだけでチームで全く同じ環境が整うのは
今までの苦労を考えるととても楽になりました。

良かった点2

・複数ポートで同時検証ができる

皆さんはチームで開発するときにほかの人のコードの検証をしたいときどのようにしていましたか?
私の場合は自分の作業をGitHubにpushしてブランチを変えてpullして検証していました。

新しく環境を作るときはもう少し簡単にできないか、と思っていたとき
Vagrant + Dockerならそれができることに気づきました。

やりかたは簡単で、
①Vagrantのポートフォワーディングで複数ポートを開けておく
②DockerのポートフォワーディングでVagrantで開けたポートを割り当ててコンテナを立ち上げる
③それぞれのコンテナに検証したいコードをマウントする

以上です。

一度①、②の作業を済ましてしまえばあとは決めたVagrant上の決めたディレクトリでブランチを変えれば
誰のコードでもDocker上で検証可能ですし、同時に走らせての検証もできるようになりました。

・・・というか別のポートを開けてまで検証したいというニーズがほかの人にもあるのかわかりませんが。

以上となります。
まだまだDockerを生かし切れていない感はありますが、これからもっといろいろと試してみて
よい方法があればまたブログに書きたいと思います。

  • Happi+ 「ハピタス」とは?