メニュー
AWS Elastic Beanstalk
開発者ガイド (API Version 2010-12-01)

EB CLI を使用して Docker 環境をローカルで実行する

Elastic Beanstalk コマンドラインインターフェイス(EB CLI)を使用して、AWS Elastic Beanstalk アプリケーションでローカルに設定された Docker コンテナを実行できます。EB CLI は、プロジェクトディレクトリにある Docker 設定ファイル(Dockerfile または Dockerrun.aws.json)とソースコードを使用して、Docker 内のローカルでアプリケーションを実行します。

EB CLI は、単一コンテナ、複数コンテナ、および事前設定済みコンテナのアプリケーションをローカルでサポートします。

Docker アプリケーションをローカルで実行するための前提条件

  • Linux OS または Mac OS X

  • EB CLI バージョン 3.3 以降

    EB CLI リポジトリを初期化するために、プロジェクトディレクトリで eb init を実行します。EB CLI を初めて使用する場合は、「EB CLI による Elastic Beanstalk 環境の管理」を参照してください。

  • Docker バージョン 1.6 以降

    自分自身を docker グループに追加し、一度ログアウトしてからログインし直して、sudo を使用せずに Docker コマンドを実行できることを確認します。

    $ sudo usermod -a -G docker $USER

    Docker デーモンが実行されていることを確認するために、docker ps を実行します。

    $ docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
  • Docker アプリケーション

    ご使用のローカルマシンのプロジェクトフォルダーに Docker アプリケーションが存在しない場合は、「Docker コンテナからの Elastic Beanstalk アプリケーションのデプロイ」を参照して、AWS Elastic Beanstalk での Docker の使用の概要を確認してください。

  • Docker プロファイル(オプション)

    アプリケーションで、非公開リポジトリにある Docker イメージを使用する場合は、docker login を実行し、プロンプトに従って認証プロファイルを作成します。

  • w3m(オプション)

    w3m は、コマンドラインターミナルで eb local run を使用して、実行中のウェブアプリケーションを表示するときに使用できるウェブブラウザです。デスクトップ環境でコマンドラインを使用する場合は、w3m は必要ありません。

セキュリティグループや、データ層またはワーカー枠を含め、アプリケーションを Elastic Beanstalk にデプロイするときは、Docker コンテナは、プロビジョニングされた AWS リソースをエミュレートせずに実行されます。

envvars オプションを使用して必要な接続文字列またはその他の変数を渡すことにより、データベースに接続するようローカルコンテナを設定できますが、割り当てられたセキュリティグループで適切なポートを開くか、デフォルトのゲートウェイまたは Elastic IP アドレスをアタッチすることにより、AWS のどのリソースにもローカルマシンからアクセスできるようにする必要があります。

EB CLI で使用するために Docker アプリケーションを準備する

Elastic Beanstalk にデプロイする場合と同様に、Docker 設定ファイルとソースデータを準備します。このトピックでは、このガイドの「チュートリアル - 複数コンテナの Docker」で例として挙げた PHP および nginx のプロキシの例を使用しますが、単一コンテナ、複数コンテナ、事前設定済みのいずれの Docker アプリケーションでも同じコマンドを使用できます。

Docker アプリケーションをローカルで実行する

プロジェクトディレクトリで eb local run コマンドを使用して、Docker アプリケーションをローカルで実行します。

~/project$ eb local run
Creating elasticbeanstalk_phpapp_1...
Creating elasticbeanstalk_nginxproxy_1...
Attaching to elasticbeanstalk_phpapp_1, elasticbeanstalk_nginxproxy_1
phpapp_1     | [23-Apr-2015 23:24:25] NOTICE: fpm is running, pid 1
phpapp_1     | [23-Apr-2015 23:24:25] NOTICE: ready to handle connections

EB CLI は、Docker 設定を読み込み、アプリケーションの実行に必要な Docker コマンドを実行します。プロジェクトを初めてローカルで実行するときは、Docker は、リモートリポジトリからイメージをダウンロードし、ローカルマシンに保存します。この処理には数分かかることもあります。

注記

eb local run コマンドには、portenvvars の 2 つのオプションパラメータがあります。

単一コンテナのアプリケーションのデフォルトのポートをオーバーライドするには、port オプションを使用します。

$ eb local run --port 8080

このコマンドは、ホストのポート 8080 を使用し、コンテナの公開ポートにマッピングするように EB CLI に指定します。ポートを指定しない場合は、EB CLI はホスト用にコンテナのポートを使用します。このオプションは、単一コンテナのアプリケーションでのみ機能します。

環境変数をアプリケーションコンテナに渡すには、envvars オプションを使用します。

$ eb local run --envvars RDS_HOST=$RDS_HOST,RDS_DB=$RDS_DB,RDS_USER=$RDS_USER,RDS_PASS=$RDS_PASS

環境変数は、データベース接続を設定するため、デバッグオプションを設定するため、またはアプリケーションに安全にシークレットを渡すために使用します。eb local サブコマンドでサポートされるオプションの詳細については、「eb local」を参照してください。

コンテナが Docker で実行中になると、クライアントからのリクエストを処理できる状態になります。コンテナが実行中である間、eb local プロセスは開いたままです。プロセスとコンテナを停止する必要がある場合は、Ctrl-C を押します。

eb local プロセスの実行中に追加のコマンドを実行するには、別のターミナルを開きます。アプリケーションのステータスを表示するには、eb local status を使用します。

~/project$ eb local status
Platform: 64bit Amazon Linux 2014.09 v1.2.1 running Multi-container Docker 1.3.3 (Generic)
Container name: elasticbeanstalk_nginxproxy_1
Container ip: 127.0.0.1
Container running: True
Exposed host port(s): 80
Full local URL(s): 127.0.0.1:80

Container name: elasticbeanstalk_phpapp_1
Container ip: 127.0.0.1
Container running: True
Exposed host port(s): None
Full local URL(s): None

docker ps を使用すると、Docker の視点からコンテナのステータスを表示できます。

~/project$ docker ps
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS                         NAMES
6a8e71274fed        nginx:latest        "nginx -g 'daemon of   9 minutes ago       Up 9 minutes        0.0.0.0:80->80/tcp, 443/tcp   elasticbeanstalk_nginxproxy_1
82cbf620bdc1        php:fpm             "php-fpm"              9 minutes ago       Up 9 minutes        9000/tcp                      elasticbeanstalk_phpapp_1

次に、eb local open を使用して、動作中のアプリケーションを表示します。

~/project$ eb local open

このコマンドは、デフォルトのウェブブラウザでアプリケーションを開きます。デスクトップ環境でターミナルを実行している場合は、Firefox、Safari、Google Chrome のいずれかである可能性があります。ヘッドレス環境または SSH 接続経由でターミナルを実行している場合は、w3m などのコマンドラインブラウザが利用可能であれば、そのブラウザが使用されます。

アプリケーションプロセスを実行中のターミナルに一時的に切り替えて、追加の出力を確認しましょう。

phpapp_1     | 172.17.0.36 -  21/Apr/2015:23:46:17 +0000 "GET /index.php" 200

これは、Docker コンテナ内のウェブアプリケーションが index.php に対する HTTP GET リクエストを受け取り、ステータス 200(エラーなし)で正常に返されたことを示します。

eb local logs を実行して、EB CLI がログを書き込む場所を確認します。

~/project$ eb local logs
Elastic Beanstalk will write logs locally to /home/user/project/.elasticbeanstalk/logs/local.
Logs were most recently created 3 minutes ago and written to /home/user/project/.elasticbeanstalk/logs/local/150420_234011665784.

Docker アプリケーションのローカルでの実行後にクリーンアップする

ローカルでのアプリケーションのテストが完了したら、アプリケーションを停止し、eb local run を実行したときに Docker がダウンロードしたイメージを削除することができます。イメージを削除するかどうかはオプションです。将来使用するために保持することもできます。

eb local プロセスを実行しているターミナルに戻り、Ctrl-C を押してアプリケーションを停止します。

^CGracefully stopping... (press Ctrl+C again to force)
Stopping elasticbeanstalk_nginxproxy_1...
Stopping elasticbeanstalk_phpapp_1...

Aborting.
[1]+  Exit 5                  eb local run

EB CLI は、Docker コマンドを使用して、実行中のコンテナを適切に停止するよう試みます。すぐにプロセスを停止する必要がある場合は、もう一度 Ctrl-C を押します。

アプリケーションが停止したあとに、Docker コンテナも停止されるはずです。docker ps を使用して確認します。

$ docker ps --all
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS                      PORTS               NAMES
73d515d99d2a        nginx:latest        "nginx -g 'daemon of   21 minutes ago      Exited (0) 11 minutes ago                       elasticbeanstalk_nginxproxy_1
7061c76220de        php:fpm             "php-fpm"              21 minutes ago      Exited (0) 11 minutes ago                       elasticbeanstalk_phpapp_1

all オプションを使用すると、停止されたコンテナが表示されます(このオプションを省略すると出力は空になります)。前述の例では、Docker では、両方のコンテナがステータス 0(エラーなし)で終了したことが示されています。

Docker および EB CLI のローカルコマンドを使用し終えたら、領域を節約するためにローカルマシンから Docker イメージを削除することができます。

Docker イメージをローカルマシンから削除するには

  1. docker images を使用して、ダウンロードしたイメージを表示します。

    $ docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
    php                 fpm                 68bc5150cffc        1 hour ago          414.1 MB
    nginx               latest              637d3b2f5fb5        1 hour ago          93.44 MB
  2. docker rm を使用して、2 の Docker コンテナを削除します。

    $ docker rm 73d515d99d2a 7061c76220de
    73d515d99d2a
    7061c76220de
  3. docker rmi を使用して、イメージを削除します。

    $ docker rmi 68bc5150cffc 637d3b2f5fb5
    Untagged: php:fpm
    Deleted: 68bc5150cffc0526c66b92265c3ed8f2ea50f3c71d266aa655b7a4d20c3587b0
    Untagged: nginx:latest
    Deleted: 637d3b2f5fb5c4f70895b77a9e76751a6e7670f4ef27a159dad49235f4fe61e0