LoginSignup
161
165

More than 5 years have passed since last update.

OSXでdockerを使いたいだけならVagrantを捨てdinghyを使ってみるといいかもしれない

Last updated at Posted at 2016-03-18

OSXでdockerを使った開発環境を組もうとすると、docker入りのVagrant boxを自作しないとならなかったり、docker-machineのファイル共有をセットアップする必要があったりと、開発を始めるまでの手間が多い。

dinghyは上記のような手間を省略し、OSXとdocker環境をシームレスにしてくれるプロダクトで、次の特徴がある。

  • ホストマシン(OSX)側のファイルをコンテナにマウントできる
  • マウントだけでなくファイルシステムのイベントもサポートする。つまり、webpackなどのファイル更新を検出してタスクを走らせるツールと相性がいい。
  • DNSを内包しているので、Macの/etc/hostsを書き換えたり等、自前で名前解決が不要。
  • HTTPプロキシを内包しているので、1つのVMに複数のウェブアプリを簡単に起動できるようになっている。
  • docker-compose.ymlがそのまま使える。つまりdinghy用に大きなカスタムは不要。

導入方法

Docker三種の神器を入れておく。

💻ホストマシン
brew install docker docker-compose docker-machine

dinghyも入れる。

💻ホストマシン
brew tap codekitchen/dinghy
brew install dinghy

あと、Virtualboxも入ってなければ入れておく。

dinghyの仮想マシンを作る

仮想マシンを作る:

💻ホストマシン
dinghy create --provider=virtualbox

しばらくすると仮想マシンが起動するので、docker用の環境変数をdinghyで調べてセットする。

💻ホストマシン
dinghy shellinit
    export DOCKER_HOST=tcp://192.168.99.100:2376
    export DOCKER_CERT_PATH=/Users/suin/.docker/machine/machines/dinghy
    export DOCKER_TLS_VERIFY=1
    export DOCKER_MACHINE_NAME=dinghy

環境変数のセット:

💻ホストマシン
eval $(dinghy shellinit)

ホストマシンでdocker psを実行してみる。今回は、証明書がinvalidになっていたので、証明書を再作成して解決。

💻ホストマシン
% docker ps 
An error occurred trying to connect: Get https://192.168.99.100:2376/v1.22/containers/json: x509: certificate is valid for 192.168.99.101, not 192.168.99.100

証明書の再作成:

💻ホストマシン
docker-machine regenerate-certs dinghy

参考: x509 certificate error on switching networks · Issue #136 · codekitchen/dinghy

docker imagesで調べると、既にdinghyのリバースプロキシが入っている。

💻ホストマシン
% docker images
REPOSITORY                      TAG                 IMAGE ID            CREATED             SIZE
codekitchen/dinghy-http-proxy   2.0.3               1ad9531485c1        2 weeks ago         248.5 MB

docker-composeでファイル共有をやってみる

ホストマシン上のファイルをdockerコンテナに共有するためのdocker-composeの書き方を試してみる。今回はPHPのコンテナを起動してみる1

ホストマシン側に共有するコードを作っておく。

💻ホストマシン
mkdir src
echo '<?php phpinfo();' > src/index.php

docker-composeの設定を書く。ポイントは、volumesのホストマシン側のパスは相対パスにしておくこと。ちなみに、exposeのポート番号とenvironmentVIRTUAL_HOSTをセットしておくことで、dinghyがDNSにそのホスト名を登録してくれるので、ホストマシンからはそのホスト名でアプリにアクセスできるようになる。

docker-compose.yml
web:
  image: php
  command: php -S 0.0.0.0:8080
  expose:
    - "8080"
  environment:
    - VIRTUAL_HOST=php.docker
  working_dir: /code
  volumes:
    - ./src:/code
💻ホストマシン
docker-compose up -d

http://php.docker/ にアクセスするとPHPの情報が表示される。

ファイルを追加してみる:

💻ホストマシン
echo '<?php var_dump($_SERVER);' > src/server.php

http://php.docker/server.php にアクセスすると追加したプログラムの実行結果が表示される。

おわり

dinghyを使うことでVagrantをメンテしなくて良くなる。Vagrantまわりで苦労している場合は、dinghyを試してみてはいかがだろうか。

参考


  1. ファイル共有を試すだけならnginxでもよかったが、公式のnginxイメージはサーバ名がlocalhost固定で、dinghyが発行するサーバ名に対応するのが面倒だったのでPHPのビルトインサーバを使うことにした。 

161
165
1

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
161
165