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

「翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。」

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

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

EB CLI は、Docker、Multicontainer Docker、Preconfigured Docker プラットフォームを使用して定義されたローカル実行のアプリケーションをサポートします。

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 設定ファイルとソースデータを準備します。このトピックでは、このガイドの Multicontainer Docker に関するチュートリアルで示した PHP および nginx プロキシの例を使用しますが、Docker、Multicontainer Docker、Preconfigured 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 つのオプションパラメータがあります。

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

$ eb local run --port 8080

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

環境変数をアプリケーションコンテナに渡すには、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