∧,,∧
(`・ω・)〆ゑゐ、 < docker-machineはじめました
| つニニニフ
しーJ
生のdockerは実行時にオプションを大量に付けなくてはいけないので、いくら速くても面倒だったので敬遠していました。しかし最近docker-machineというdockerのホストマシンを簡単に作成できるアプリが公式から提供されたので、現在Vagrantからdockerに移行中なのです。
docker-machineとは?
私も最初なにこれ?と思ったのですが、Vagrantに例えると解りやすいかもしれません。
Vagrantの場合は以下が定番ですね。
dockerコンテナ(CnetOS 7とか) |
---|
CoreOS(dockerホスト) |
Virtualbox, VMwareFusion ...etc |
Vagrant |
mac |
docker-machineだとこうなります。
dockerコンテナ(CnetOS 7とか) |
---|
Virtualbox, VMwareFusion ...etc |
docker-machine(dockerホスト) |
mac |
Vagrantがdocker-machineに代わり、更にdocker-machineがCoreOSも内包してしまっているようなイメージです。
linux環境でもmacの部分がlinuxになるだけだし、windows環境でも同じなので「ほとんどの環境で同じdocker環境が簡単に構築できる」のがdocker-machineです。Vagrant+CoreOSでも同様の事ができますが、docker-machineの方が速く・簡単に環境が構築できます。
内部的にはboot2dockerを使っているようで、mac上のdockerコンテナの中にdockerコンテナを作成する(合ってるのか?)ようですね。
docker-machineを試してみる
mac環境では大まかに以下の手順でdockerホストマシンが作成できます。
また、この例ではdriverにはVMwareFusionを指定していますが、Virtualboxでも可です。
1,macにdockerをインストール
homebrewでインストールします。
brew install docker
2、macにdocker-machineをインストール
# mac用docker-machineをダウンロード tree-no-iMac:~ tree$ curl -L https://github.com/docker/machine/releases/download/v0.2.0/docker-machine_darwin-amd64 > /usr/local/bin/docker-machine # 実行権限付与 tree-no-iMac:~ tree$ chmod +x /usr/local/bin/docker-machine
docker-machineはシングルバイナリのようで、適当にパスが通っているところにDLし、実行権限を付けます。
docs.docker.com
3、dockerホストを作成
tree-no-iMac:~ tree$ docker-machine create --driver vmwarefusion test-machine INFO[0000] Creating SSH key... INFO[0000] Creating VM... INFO[0000] Starting test-machine... INFO[0002] Waiting for VM to come online... INFO[0041] "test-machine" has been created and is now the active machine. INFO[0041] To point your Docker client at it, run this in your shell: eval "$(docker-machine env test-machine)"
大体30秒くらいでホストマシンが作成できます。「test-machine」というのはホスト名なので、自由に付けて下さい。(あまり長いと今後のコマンド入力が大変なので短めの名称を推奨)
もしVMwareFusionが無ければ、-dオプションに「virtualbox」を指定するとVirutualboxにdockerホストマシンが作成できます。
4、環境変数をセット
# docker環境変数をセット tree-no-iMac:~ tree$ eval "$(docker-machine env test-machine)" # 確認 tree-no-iMac:~ tree$ env | grep -i docker DOCKER_HOST=tcp://172.16.53.129:2376 DOCKER_TLS_VERIFY=1 DOCKER_CERT_PATH=/Users/tree/.docker/machine/machines/test-machine
evalのコマンドは、docker-machine createした時のログに「このコマンド実行しろや」と書いてあるので、そのまま実行します。永続的に環境変数を設定する場合は ~/.bash_profile 等のログインシェルで読み込まれる部分に書きましょう。
5,macからdockerホストにアクセスしてみる
tree-no-iMac:~ tree$ docker-machine ssh ## . ## ## ## == ## ## ## ## === /""""""""""""""""\___/ === ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~ \______ o __/ \ \ __/ \____\______/ _ _ ____ _ _ | |__ ___ ___ | |_|___ \ __| | ___ ___| | _____ _ __ | '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__| | |_) | (_) | (_) | |_ / __/ (_| | (_) | (__| < __/ | |_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_| Boot2Docker version 1.5.0, build vmware-support : e883254 - Fri Feb 27 18:00:02 UTC 2015 Docker version 1.5.0, build a8a31ef
これでホストマシンにsshできます。もし複数のホストマシンを作成している場合は、「docker-machine ssh ホスト名」として下さい。
準備OK!!
これでdockerホストが作成できました。目茶苦茶簡単ですね。
dockerコンテナを作成・実行してみる
さて、dockerホストが作成できたので、今度はdockerホスト上でdockerコマンドを使ってdockerコンテナを作成してみましょう。
dockerホストにsshしてホスト上でdockerコマンドを叩いてもいいのですが、macからdockerホストに直接コマンドを実行する事が可能なので、今回はそちらでいきます。
では早速mac上からcentos7のコンテナを実行してみます。
tree-no-iMac:~ tree$ docker $(docker-machine config test-machine) run centos:7 echo test Unable to find image 'centos:7' locally FATA[0000] Error response from daemon: client and server don't have same version (client : 1.18, server: 1.17)
!?
なんかエラーでました。このエラーはmac側のdockerのバージョンとdocker-machineのdockerのバージョンの不一致が原因で起きています。
最初の手順でhomebrewでdockerをインストールしましたが、その時は最新のdocker1.6系がインストールされましたが、docker-machine上のdockerはver1.5なのです。
ではmac側のdockerを1.6から1.5にダウングレードしましょう。homebrewならこういう時簡単なんですよね〜
homebrewでdockerをバージョンダウンする
さて余裕余裕っと。
tree-no-iMac:~ tree$ brew versions docker
Error: Unknown command: versions
!?
1,既存のdockerをアンインストール
homebrewでインストールしたdockerをアンインストールします。
tree-no-iMac:~ tree$ brew uninstall docker
2,homebrew/versionsリポジトリを追加
versionsコマンドの代わりにversionsリポジトリを使います。リポジトリを追加すると、brew search等で旧バージョンが検索・インストールできるようになります。
tree-no-iMac:~ tree$ brew tap homebrew/versions
3,dockerを検索
tree-no-iMac:~ tree$ brew search docker
boot2docker boot2docker133 boot2docker141 docker docker-compose docker-machine docker-swarm docker133 docker141 docker150
homebrew/completions/boot2docker-completion Caskroom/cask/boot2docker-status Caskroom/cask/docker-compose
homebrew/completions/docker-completion Caskroom/cask/boot2docker Caskroom/cask/docker-machine
v1.5、ありましたね。「docker150」がお目当てのバージョンです。
4,docker v1.5をインストールする
tree-no-iMac:~ tree$ brew install docker150 ==> Installing docker150 from homebrew/homebrew-versions ==> Downloading https://homebrew.bintray.com/bottles-versions/docker150-1.5.0.yosemite.bottle.tar.gz Already downloaded: /Library/Caches/Homebrew/docker150-1.5.0.yosemite.bottle.tar.gz ==> Pouring docker150-1.5.0.yosemite.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 ==> Summary 🍺 /usr/local/Cellar/docker150/1.5.0: 9 files, 7.2M
5,mac側とdocker-machine側のdockerバージョンを確認
まずはmac側。
tree-no-iMac:~ tree$ docker --version
Docker version 1.5.0, build a8a31ef
続いてdocker-machine側。
tree-no-iMac:~ tree$ docker-machine ssh test-machine "docker --version" Docker version 1.5.0, build a8a31ef
よし。一致しました。
6,macからdocker runしてみる
「docker $(docker-machine config test-machine) run ほげほげ」とすると、macからdockerホストを介して直接dockerコマンドを叩く事ができます。ちなみにdocker-machine test-machine configを実行すると、以下が表示されます。
tree-no-iMac:~ tree$ docker-machine config test-machine --tlsverify --tlscacert="/Users/tree/.docker/machine/machines/test-machine/ca.pem" --tlscert="/Users/tree/.docker/machine/machines/test-machine/cert.pem" --tlskey="/Users/tree/.docker/machine/machines/test-machine/key.pem" -H=tcp://172.16.53.129:2376
何やら接続オプションらしきものが表示されましたね。これを手で入力するのは大変だし、dockerホストを再作成したりして情報が変わると大変なので、「docker $(docker-machine config ホスト名)」とします。では実行してみましょう。
公式のCentOS7をpullし、echoさせてみます。
tree-no-iMac:~ tree$ docker $(docker-machine config test-machine) run centos:7 echo hogeeeeeee Unable to find image 'centos:7' locally Pulling repository centos fd44297e2ddb: Download complete 6941bfcbbfca: Download complete 41459f052977: Download complete Status: Downloaded newer image for centos:7 hogeeeeeee
できました。docker pullしない状態でrunすると、自動的にイメージがダウンロードされます(OSのサイズに比例してDLに時間かかります)。
雑感
率直な感想ですが、docker-machineの登場で環境の整備は簡単になりました。しかしdockerは高速な代わりにVagrantよりも学習コストが高いので、まだまだ勉強が必要になりそうです。
docker-machine upgrade とかやると応答が無くなってしまったり、まだまだ不安定なようですが、いちいちVagrant上にCoreOSを用意する必要が無くなるので、これは楽ですね。様々な環境に簡単にdockerホストを作成できるので、これは間違いなく流行るというかデファクトスタンダードになりそうです。
docker-swarm と docker-compose(旧fig)についてはおいおい試していこうと思います。とりあえずは先日書いたredmine2.6 or 3.0のansibleのplaybookをdockerコンテナに適用するのが当面の目標です。
Docker入門 Immutable Infrastructureを実現する
- 作者: 松原豊,米林正明
- 出版社/メーカー: 技術評論社
- 発売日: 2014/04/25
- メディア: Kindle版
- この商品を含むブログ (5件) を見る
Jenkins、Chef、Redmine、Dockerで業務効率アップ 10倍速の開発・運用ツール (日経BPムック)
- 作者: 日経SYSTEMS
- 出版社/メーカー: 日経BP社
- 発売日: 2015/05/14
- メディア: ムック
- この商品を含むブログ (2件) を見る
<試読版>Linuxコンテナー最新ツール Dockerを支える技術(日経BP Next ICT選書) 日経Linux技術解説書【試読版】
- 作者: 中井悦司
- 出版社/メーカー: 日経BP社
- 発売日: 2015/03/25
- メディア: Kindle版
- この商品を含むブログを見る