direnvで、使用するdocker-machineを指定する

.envにこんな風に書けるようにします。

# .env
use docker-machine my-rails-app

ディレクトリに移動すると、自動的にdocker-machineを(まだ起動していないなら)起動し、docker-machine env環境変数をセットします。

$ cd ~/Documents/my-project
direnv: loading ~/.direnvrc
direnv: loading .envrc
direnv: using docker-machine my-rails-app
Starting "my-rails-app"...
Machine "my-rails-app" is already running.
direnv: export +DOCKER_CERT_PATH +DOCKER_HOST +DOCKER_MACHINE_NAME +DOCKER_TLS_VERIFY
$ docker ps # my-rails-app のコンテナ一覧が表示される

インストール

git clone git@github.com:doloopwhile/direnv_use_docker-machine.git ~/direnv_use_docker-machine
echo '. ~/direnv_use_docker-machine/direnv_use_docker-machine.sh' >> ~/.direnvrc

使用目的

docker-machineではdefaultホスト1個しか立ち上げていない人が多いと思います。

docker-composeなどを使えば、コンテナ名が被らないようにできるので、 それで困ってないのかもしれません。

しかし、プロジェクト毎にDockerホストを立ちあげると便利なことも。

  • ポート番号がかぶらない(複数のWEBアプリを同時にdocker-compose upさせておける)
  • ホストごとにDocker Engineの設定を変えられる
  • docker psなどのリストがスッキリする
  • 混乱した時はdocker rm -f $(docker ps -a -q)してリセットできる。

反面、イメージをホスト毎にインストールする手間などもあります。

Docker開発はまだ試行錯誤が多いのですが、この方法も案外便利かもしれませんよ。