Help us understand the problem. What is going on with this article?

MacでElastic Beanstalk + Multi Container Dockerの `eb local run` を動かす

More than 3 years have passed since last update.

追記: 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はすごく便利なのでもう少し簡単に動くようになれば、と思う。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away