翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
EB CLI を使用して Docker 環境をローカルで実行する
Elastic Beanstalk コマンドラインインターフェイス (EB CLI) を使用して、AWS Elastic Beanstalk アプリケーションで設定された Docker コンテナをローカルで実行できます。EB CLI は、プロジェクトディレクトリにある Docker 設定ファイル(Dockerfile
または Dockerrun.aws.json
)とソースコードを使用して、Docker 内のローカルでアプリケーションを実行します。
トピック
Docker アプリケーションをローカルで実行するための前提条件
-
Linux OS または Mac OS X
-
EB CLI リポジトリを初期化するために、プロジェクトディレクトリで eb init を実行します。EB CLI を初めて使用する場合は、「」を参照してくださいEB CLI を使用した Elastic Beanstalk 環境の管理
-
自分自身を
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、または事前設定済み 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 コマンドには、port
とenvvars
の 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 を押してアプリケーションを停止します。
^C
Gracefully 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 イメージをローカルマシンから削除するには
-
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 -
docker rm
を使用して、2 の Docker コンテナを削除します。$
docker rm
73d515d99d2a 7061c76220de73d515d99d2a 7061c76220de
-
docker rmi
を使用して、イメージを削除します。$
docker rmi
Untagged: php:fpm Deleted: 68bc5150cffc0526c66b92265c3ed8f2ea50f3c71d266aa655b7a4d20c3587b0 Untagged: nginx:latest Deleted: 637d3b2f5fb5c4f70895b77a9e76751a6e7670f4ef27a159dad49235f4fe61e068bc5150cffc 637d3b2f5fb5