今までは開発環境はVagrantを使ってプロジェクトごとにvagrant+ansibleで環境構築をしていました。
ansibleを使っているのでプロビジョニングの手間はそれほどないのですが、色々と問題が出てきたのでDockerを使ってみることにしました。
例えば、プロジェクトが増えるごとにVMが増えていくのでディスクの使用量を結構食ってしまうとか、プロジェクトを切り替える時にいちいちvagrant haltしてupしてというのが面倒になってきたことや、Parallels Desktopは1ライセンスにつきPC1台なので会社ではVMWare Fusionを使うようにしてしまって同じboxが使えなかったりとか...です。
目次
Docker Machineのインストール
MacだとDockerを直接実行できないので、一旦VM上でCoreOSやboot2dockerを実行してその上でDockerを実行させます。
Docker Machineを使うとそれを透過的に、比較的に簡単に実行できるようになります。
インストールはHomebrewでできます。
$ brew install docker-machine
Docker Machine Parallels Driverのインストール
Parallels DesktopでDocker Machineを動かす場合、Docker Machine Parallels Driverが必要になりますので、これもHomebrewでインストールします。
$ brew install docker-machine-parallels
【注意】Parallels DesktopはProかBusinessエディションでなければCLIツールが使えないのでstandardは対応していません!
Docker Machineの作成
あとはdocker-machineコマンドでマシンを作成します。
$ docker-machine create --driver=parallels prl-dev :(略) Docker is up and running! To see how to connect Docker to this machine, run: docker-machine env prl-dev
prl-devのところはマシン名なのでなんでもいいです。
"run: docker-machine env prl-dev" と出ているので、試しに実行してみます。
$ docker-machine env prl-dev set -gx DOCKER_TLS_VERIFY "1"; set -gx DOCKER_HOST "tcp://10.211.55.24:2376"; set -gx DOCKER_CERT_PATH "/Volumes/HDD750/home/abe/.docker/machine/machines/prl-dev"; set -gx DOCKER_MACHINE_NAME "prl-dev"; # Run this command to configure your shell: # eval (docker-machine env prl-dev)
これは、shellの種類など環境によって結果が異なる内容ですが、最後に "Run this command to configure your shell:〜" と出ていると思います。
要するにその最後のevalコマンドを実行することでDockerと接続する環境変数が設定できるということです。
実際にやってみます。
$ eval (docker-machine env prl-dev)
何も表示されませんが、実はこうするとMac上でdockerコマンドが実行できるようになります!
Dockerのインストール
今までと同様にHomebrewからインストールします。
$ brew install docker ==> Downloading https://homebrew.bintray.com/bottles/docker-1.9.1_1.el_capitan.b ######################################################################## 100.0% ==> Pouring docker-1.9.1_1.el_capitan.bottle.tar.gz ==> Caveats Bash completion has been installed to: /usr/local/etc/bash_completion.d zsh completion has been installed to: /usr/local/share/zsh/site-functions fish completion has been installed to: /usr/local/share/fish/vendor_completions.d ==> Summary 🍺 /usr/local/Cellar/docker/1.9.1_1: 10 files, 9.6M
と出てきます。
私が使っているのはFish Shellなのですが、上記のように completion がインストールされたとのことで、dockerの後にスペースを入れてタブを押すとコマンドが候補として出てきます。コマンドは結構忘れてしまうので便利です。
Docker Machineにsshログインする
作成したDocker Machineにsshでログインしてみます。
$ docker-machine ssh prl-dev ## . ## ## ## == ## ## ## ## ## === /"""""""""""""""""\___/ === ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ / ===- ~~~ \______ o __/ \ \ __/ \____\_______/ _ _ ____ _ _ | |__ ___ ___ | |_|___ \ __| | ___ ___| | _____ _ __ | '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__| | |_) | (_) | (_) | |_ / __/ (_| | (_) | (__| < __/ | |_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_| Boot2Docker version 1.10.0, build master : b09ed60 - Thu Feb 4 20:16:08 UTC 2016 Docker version 1.10.0, build 590d5108 docker@prl-dev:~$
boot2dockerに入ることができましたので、dockerコマンドを実行してみます。
docker@prl-dev:~$ docker pull ubuntu:latest latest: Pulling from library/ubuntu 8387d9ff0016: Pull complete 3b52deaaf0ed: Pull complete 4bd501fad6de: Pull complete a3ed95caeb02: Pull complete Digest: sha256:457b05828bdb5dcc044d93d042863fba3f2158ae249a6db5ae3934307c757c54 Status: Downloaded newer image for ubuntu:latest docker@prl-dev:~$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu latest 3876b81b5a81 3 weeks ago 187.9 MB
無事にDockerのイメージを取得できました。
MacからのDockerコマンド実行の確認
先の段階でevalを実行していれば、Macからも透過的にdockerコマンドが実行できるようになっているはずです。
Docker Machineからctrl+D等でexitしてMacに戻ります。
Macに戻ったら先のimagesコマンドでMac側からDocker Machine内のイメージ一覧が確認できるかどうか試します。
$ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE ubuntu latest sha256:3876b 3 weeks ago 187.9 MB
出てきましたね!
これでとりあえず準備は完了です。次回はコンテナを作ってみます。
おまけ -VMWareの場合-
最初のparallels driverを入れるところやDocker Machineを作るところ以外はVirtualBoxでもVMWareでも同じですね。
というわけで、VMWareの場合は以下のようにします。
$ docker-machine create --driver vmwarefusion vmware-dev
VMWare Fusionの場合はDocker Machineにドライバが入っているので別に入れる必要がないみたいです。
【追記】DNSの設定について
createそのままだとDNSの設定がおかしくて例えばDockerfile内のapt-getで失敗することがあります。
その場合、以下のオプションを追加してDNSをGoogleのPublic DNSなどに設定しておけばうまくいきます。
$ docker-machine create --driver vmwarefusion --engine-opt dns=8.8.8.8 vmware-gdns
「Parallels Desktop+Dockerでつくる開発環境【準備編】」への2件のフィードバック