LoginSignup
51

More than 5 years have passed since last update.

Windows10 環境で Docker を使った快適な開発環境を作ろうとして諦めた話

Last updated at Posted at 2016-07-20

10年以上 Macbook ユーザーな私ですが、MSのカンファレンス、de:code で色々刺激を受けたのと、最近 Bash on Ubuntu on Windows とか使えるようになったり、オープンソースコミュニティと仲良くし始めたりと、なかなかおもしろいなーと思って、Surface Pro4 を購入して「Macbookから乗り換えできるか?」というチャレンジをしてみました。
それから約1ヶ月経った今、この記事を Macbook Pro から書いています。結構頑張ったし、Windows10のいいところもいろいろ発見したんですが、結論から言えば、 「Docker の実装がまだ中途半端」 ということで、私にとっては快適な開発環境は作れませんでした。

あくまで、私の技術不足でうまくいかなかっただけかもしれませんので、「そんなことないぞ」という反論を是非お待ちしております。

やりたかったこと

Docker を使って、Rails の開発をしたかった。
通常、OSX であれば、以下の手順でさくっとDocker上にRailsのプロジェクトを作ることができます。

  1. Docker 、Docker Toolbox をインストール
  2. docker-machine create で Docker Machine を作る
  3. Dockerfile 作る
  4. Gemfile 作る
  5. docker-compose.yml 作る
  6. docker-compose buid で gem インストールなど
  7. docker-compose up でサーバ立ち上げ
  8. docker-compose run で rails プロジェクト作成したり、guard を実行したり
  9. Gemfile を更新したら再度 docker-compose build

ここまでできたら、github などにDockerfileと合わせてpushしておけば、git clone したあと docker-compose up --build を実行すれば、開発環境を簡単に再現できます。

しかし!Windows ではそんなに事がうまくは運びませんでした・・・
色々試行錯誤した結果をログとして残しておきます。2016年6月時点での話なので、あなたがこの記事を読んでいる頃には、解消されている可能性もあります。

そもそも、docker-machine create の時点で結構大変

期待していた Bash on Ubuntu on Windows では VM は動かないようです。というわけで Windows 用の Docker を使うのですが、docker-machine create の時点で一苦労でした。
Windows10 では Hyper-V という仮想環境マネージャがデフォルトになっておりまして、virtualbox のドライバが使えません。
ちゃんと動かすには、

  • Hyper-Vマネージャーの GUI から外部ネットワークの仮想スイッチを作成
  • docker-machine create -d hyperv --hyperv-virtual-switch [作った仮想スイッチ名] default で Docker machine を作成

という手順を踏む必要がありました。

docker-compose run で Interactive mode が使えない

http://qiita.com/tksok2009/items/b21d11716dd912506789
にもあるように、-d をつけないと docker-compose ではコンテナ上のコマンドが実行できません。
-d をつけると、アウトプットが出なかったりするので、コマンドの実行結果がわからなくなってしまいます。
結局 docker exec -it [container] bash とかでログインしてコマンドを叩くことに・・・
もしくは docker run でも良いみたいですがその場合は -v オプションとか適切につけなくてはいけない。
面倒!

docker-compose run --rm web bundle exec guard --force-polling

とかやりたいのです僕は。

ネットワークがオフラインになると docker-machine も動かない

OSXのDockerであればネットワークがオフラインになってもDocker自体は普通に使えるのですが、Windows上だと停止してしまいます。移動の多い私にとってこれは大変に不便。
あと、Wifi環境だとうまく仮想スイッチが作れないというのもありました。(これは私の仮想スイッチの作り方がいけないのかも)

ホストOSのディレクトリがマウントされない

更にこれが辛かった。本来 docker-machine を立ち上げるとホスト側のユーザディレクトリが自動的にマウントされ、コンテナを作る際にも -v とかで指定のフォルダをコンテナ上にマウントできるわけですが、HyperV 環境だとすんなりとはマウントさせてくれないのです。docker-machine start をすると何事も無かったかのように普通に起動するんだけど、docker-machine ssh でアクセスして ls /Users とかやってみても、空のフォルダがあるだけ。したがって、docker-compose.yml 上で volume mount 指定をしていても、当然マウントされません。
色々調べてみた結果、
http://stackoverflow.com/questions/38261392/cant-mount-windows-host-directory-to-docker-container
にあるように、docker-machine 側から

sudo mount -t cifs //HOST-IP-HERE/c/Users /Users -o username=HOST_USERNAME_HERE -o password=pass

といったコマンドを実行すればマウントすることができました。また、
/mnt/sda1/var/lib/boot2docker/bootlocal.sh
というファイルに上記のmount文をいれておけば、毎回 ssh する必要は無いとか。

でも、このHOST IPを docker-machine 側から知る方法がわからなかったり、そもそも仮想スイッチ毎に docker-machine が必要だったりするので、やたらめんどくさい。
このへんで、キーっとなって OSX に戻ってきてしまいました。

でも改めて今調べてみたら、下記のページのようにHyperVマネージャーで共有フォルダ作ればよかったのか?
http://acchi-muite-hoi.hatenablog.com/entry/2016/06/20/042002

結論:HyperV + Docker は結構大変

というわけで、長年使い慣れた MacBook Pro に戻ってきてしまった話でした。ターミナルも快適ですしねー。
Windows10そのものはそんなに悪くなくて、Docker周り以外の部分は慣れれば結構快適だったので、こうすればできるよ!という方がいらっしゃったら是非教えていただきたいと思います。

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
51