追記: 2016-03-31 EB CLI 3.7.4で改善され、手元の環境(Docker 1.10.3)でも動作することが確認できました。
Release: EB CLI 3.7.4 on 2016-03-22 : Release Notes : Amazon Web Services
Elastic BeanstalkのEB CLIには、Multi Container Dockerのコンテナの場合、定義ファイル(Dockerrun.aws.json
)を元にローカル環境でコンテナを実行できるeb local run
という便利なコマンドがある。この使い方では、Docker Composeのようなもの、といった方がわかりやすいかもしれない。
追記: Docker Composeのようなもの、というかDocker Composeだった。eb local run
実行後、.elasticbeanstalk/docker-compose.yml
が生成されている。
ただし、現時点(2016/02/29)でbrewでインストールできる最新バージョンは1.10.2だが、EB CLIで必要としているバージョンは1.6.0なので、単純に動かそうと思っても動かない。
動かすためにちょっと苦労したので、手順をメモする。
環境
- OS X EL Capitan Version 10.11.3
- EB CLI 3.7.3 (Python 2.7.1)
- docker-machine version 0.6.0, build e27fb87
- VirtualBox 5.0.6 r103037
現象
Docker1.10.2で該当コマンドを実行するとエラーが発生する。
$ eb init
$ eb local run
ERROR: You must install Docker version 1.6.0 to continue. If you are using Mac OS X, ensure you have boot2docker version 1.6.0. Currently, "eb local" does not support Windows.
手順
Docker1.6.0をインストール
~/bin
にパスが通って無ければ通す。
$ echo 'export PATH=$PATH:$HOME/bin' >> ~/.bash_profile
$ source ~/.bash_profile
brewでDockerをインストールしている場合はアンリンク。
$ brew unlink docker
Docker1.6.0をインストール。
$ mkdir -p ~/bin && cd ~/bin
$ curl -LO https://get.docker.com/builds/Darwin/x86_64/docker-1.6.0
$ chmod +x docker-1.6.0
$ ln -s docker-1.6.0 docker
$ docker --version
Docker version 1.6.0, build 4749651
Docker Machine上でDocker1.6.0をインストール
DockerとDocker Machine上のDockerは同じバージョンである必要があるので、対応するboot2dockerでイメージを作成。
$ docker-machine create -d virtualbox \
--virtualbox-boot2docker-url https://github.com/tianon/boot2docker-legacy/releases/download/v1.6.0-rc7/boot2docker.iso \
b2d-160
$ eval $(docker-machine env b2d-160)
動作確認
公式デモのNginx+PHP-FPMを使うのでGitHubからClone。
$ git clone git@github.com:awslabs/eb-docker-nginx-proxy.git
$ cd eb-docker-nginx-proxy
本記事の目的のコマンドを実行。
$ eb local run
...
Attaching to elasticbeanstalk_phpapp_1, elasticbeanstalk_nginxproxy_1
phpapp_1 | [29-Feb-2016 13:49:39] NOTICE: fpm is running, pid 1
phpapp_1 | [29-Feb-2016 13:49:39] NOTICE: ready to handle connections
Nginx+PHP-FPMが動作していることを確認。
$ curl -i http://$(docker-machine ip b2d-160)
HTTP/1.1 200 OK
Server: nginx/1.9.11
Date: Mon, 29 Feb 2016 13:50:28 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
X-Powered-By: PHP/7.0.3
<h1>Hello World!!!</h1>
<h3>PHP Version 7.0.3</h3>
<a href="/static.html">Static HTML Page</a>%
HomeBrewでインストールしたバージョンに戻したい場合
再度リンクを張ればOK。~/.binの方が優先度低いので、brewでインストールしたバージョンになる。
$ brew link docker
Linking /usr/local/Cellar/docker/1.10.2... 4 symlinks created
$ docker --version
Docker version 1.10.2, build c3959b1
苦労の軌跡
- homebrew/versionsにhomebrew/versions/docker162があったが試す前に
brew install
に失敗 - dvmというDocker Version管理ツールを見つけたが1.6.0はインストールできない
最後に
ElasticBeanstalkのPrivate Registryの認証もDocker1.6なので、その辺りが関係していると思われる。eb local run
はすごく便利なのでもう少し簡単に動くようになれば、と思う。