Docker プラットフォームの使用 - AWS Elastic Beanstalk

Docker プラットフォームの使用

重要

Amazon Linux 2 プラットフォームバージョンは、(Amazon Linux 2 より前の) Amazon Linux AMI プラットフォームバージョンとは根本的に異なります。これらの異なるプラットフォーム世代は、いくつかの点で互換性がありません。Amazon Linux 2 プラットフォームバージョンに移行する場合は、「Elastic Beanstalk Linux アプリケーションを Amazon Linux 2 に移行する」の情報を必ずお読みください。

AWS Elastic Beanstalk は、Dockerfile で記述されているイメージを構築することによって、またはリモート Docker イメージをプルすることによって、Docker 環境を起動できます。リモート Docker イメージをデプロイする場合、Dockerfile を含める必要はありません 。代わりに、Docker Compose も使用している場合、使用するイメージと追加の設定オプションを指定する docker-compose.yml ファイルを使用します。Docker 環境で Docker Compose を使用していない場合、代わりに Dockerrun.aws.json ファイルを使用してください。

Prerequisites

このチュートリアルでは、Elastic Beanstalk の基本的なオペレーション、Elastic Beanstalk コマンドラインコマンドラインインターフェイス (EB CLI) および Docker についてある程度の知識があることを前提としています。まだ起動していない場合は、Elastic Beanstalk を使用して開始する の指示に従って、最初の Elastic Beanstalk 環境を起動します。このチュートリアルでは EB CLI を使用しますが、Elastic Beanstalk コンソールを使用して環境を作成し、アプリケーションをアップロードすることもできます。

このチュートリアルに従うには、以下の Docker コンポーネントも必要です。

  • Docker の稼働中のローカルインストール。詳細については、Docker ドキュメントウェブサイトの「Get Docker」を参照してください。

  • Docker Hub へのアクセス。Docker ハブにアクセスするには、Docker ID を作成する必要があります。詳細については、Docker ドキュメントウェブサイトの「Share the application」を参照してください。

Elastic Beanstalk プラットフォームでの Docker 環境の設定の詳細については、この同じ章の「Docker の設定」を参照してください。

Elastic Beanstalk アプリケーションをコンテナ化する

この例では、 からサンプルの Flask アプリケーションの Docker イメージを作成しますElastic Beanstalk への Flask アプリケーションのデプロイ アプリケーションは、1 つのメインファイル application.py で構成されます。Dockerfile も必要です。両方のファイルをディレクトリのルートに配置します。

~/eb-docker-flask/ |-- Dockerfile |-- application.py

~/eb-docker-flask/application.py

from flask import Flask # Print a nice greeting def say_hello(username = "World"): return '<p>Hello %s!</p>\n' % username # Some bits of text for the page header_text = ''' <html>\n<head> <title>EB Flask Test</title> </head>\n<body>''' instructions = ''' <p><em>Hint</em>: This is a RESTful web service! Append a username to the URL (for example: <code>/Thelonious</code>) to say hello to someone specific.</p>\n''' home_link = '<p><a href="/">Back</a></p>\n' footer_text = '</body>\n</html>' # Elastic Beanstalk looks for an 'application' that is callable by default application = Flask(__name__) # Add a rule for the index page application.add_url_rule('/', 'index', (lambda: header_text + say_hello() + instructions + footer_text)) # Add a rule when the page is accessed with a name appended to the site # URL application.add_url_rule('/<username>', 'hello', (lambda username: header_text + say_hello(username) + home_link + footer_text)) # Run the application if __name__ == "__main__": # Setting debug to True enables debug output. This line should be # removed before deploying a production application. application.debug = True application.run(host="0.0.0.0")

~/eb-docker-flask/Dockerfile

FROM python:3.6 COPY . /app WORKDIR /app RUN pip install Flask==1.0.2 EXPOSE 5000 CMD ["python", "application.py"]

コンテナをローカルでテストする

Elastic Beanstalk CLI (EB CLI) を使用して、Elastic Beanstalk にデプロイするローカルリポジトリを設定します。ディレクトリのルートにあるアプリケーションの Dockerfile を設定します。

~/eb-docker-flask$ eb init -p docker application-name

(オプション) eb local run コマンドを使用して、コンテナを構築し、ローカルで実行します。

~/eb-docker-flask$ eb local run --port 5000
注記

eb local コマンドの詳細については、「eb local」を参照してください。このコマンドは Windows ではサポートされていません。または、docker build コマンドと docker run コマンドを使用してコンテナを構築して実行することもできます。詳細については、「Docker ドキュメント」を参照してください。

(オプション) コンテナが実行しているときに、eb local open コマンドを使用して、ウェブブラウザでアプリケーションを表示します。または、ウェブブラウザで http://localhost:5000/ を開きます。

~/eb-docker-flask$ eb local open

Dockerfile を使用してコンテナをデプロイする

アプリケーションをローカルでテストした後、Elastic Beanstalk 環境にデプロイします。Elastic Beanstalk では、Dockerfile の指示を使用して、イメージを構築および実行します。

eb create コマンドを使用して、環境を作成し、アプリケーションをデプロイします。

~/eb-docker-flask$ eb create environment-name

環境が起動したら、eb open コマンドを使用してウェブブラウザで表示します。

~/eb-docker-flask$ eb open

リモート Docker イメージをテストする

次に、前のセクションから Flask アプリケーションの Docker イメージを構築し、Docker Hub にプッシュします。

Notes
  • 以下のステップでは、一般利用可能な Docker イメージを作成します。

  • ローカルの Docker インストールから Docker コマンドと、Docker Hub の資格情報を使用します。詳細については、前のセクション「Prerequisites」を参照してください。

イメージをビルドしてプッシュしたら、Docker 環境で Docker Compose を使用している場合は、docker-compose.yml ファイルを使用して Elastic Beanstalk にデプロイできます。(Docker 環境で Docker Compose を使用していない場合、代わりに Dockerrun.aws.json ファイルを使用してください)。Flask アプリケーションの Docker イメージを構築して、Docker Hub にプッシュするには、次のコマンドを実行します。前の例と同じディレクトリを使用しますが、アプリケーションのコードを使用して任意のディレクトリを使用できます。docker-id に、あなたの Docker ID を入力して Docker Hub にサインインします。

~/eb-docker-flask$ docker build -t docker-id/beanstalk-flask:latest . ~/eb-docker-flask$ docker push docker-id/beanstalk-flask:latest
注記

イメージをプッシュする前に、docker login を実行しなければならないことがあります。パラメータなしでコマンドを実行すると、Docker Hub の資格情報の入力を求められます。

Docker Compose ツールを使用して Docker 環境を管理している場合、docker-compose.yml ファイルのみを使用してアプリケーションをデプロイできるようになりました。docker-compose.yml ファイルの詳細については、「Docker の設定」を参照してください。

Docker Compose を使用していない場合、代わりに Dockerrun.aws.json ファイルを使用してください。詳細については、「Dockerrun.aws.json v1 (Docker Compose なし) を使用してデプロイする」を参照してください。

新しいディレクトリを作成し、docker-compose.yml ファイルを作成します。

~/remote-docker/docker-compose.yml

version: '3.8' services: beanstalk-flask: image: "username/beanstalk-flask" ports: - "80:5000"

Docker Compose ツールを使用して Docker 環境を管理していない場合、Dockerrun.aws.json ファイルのみを使用してアプリケーションをデプロイできるようになりました。Dockerrun.aws.json ファイルの詳細については、「Docker プラットフォームの設定 (Docker Compose なし) 」を参照してください。

新しいディレクトリを作成し、Dockerrun.aws.json ファイルを作成します。

~/remote-docker/Dockerrun.aws.json

{ "AWSEBDockerrunVersion": "1", "Image": { "Name": "username/beanstalk-flask", "Update": "true" }, "Ports": [ { "ContainerPort": "5000" } ] }

EB CLI を使用して、Elastic Beanstalk にデプロイするローカルリポジトリを設定します。

~/remote-docker$ eb init -p docker application-name

(オプション) eb local run を使用して、コンテナを構築し、ローカルで実行します。eb local コマンドの詳細については、「eb local」を参照してください。

~/remote-docker$ eb local run --port 5000

(オプション) コンテナが実行しているときに、eb local open コマンドを使用して、ウェブブラウザでアプリケーションを表示します。または、ウェブブラウザで http://localhost:5000/ を開きます。

~/remote-docker$ eb local open

リモート Docker イメージを Elastic Beanstalk にデプロイする

コンテナをローカルでテストした後、Elastic Beanstalk 環境にデプロイします。Docker Compose を使用している場合、Elastic Beanstalk は docker-compose.yml ファイルを使用してイメージをプルし実行します。それ以外の場合、Elastic Beanstalk は代わりに Dockerrun.aws.json を使用します。

EB CLI を使用して、環境を作成し、イメージをデプロイします。

~/remote-docker$ eb create environment-name

環境が起動したら、eb open を使用してウェブブラウザで表示します。

~/remote-docker$ eb open

クリーンアップ

Elastic Beanstalk での作業が終了したら、環境を終了できます。Elastic Beanstalk は、Amazon EC2 インスタンスデータベースインスタンスロードバランサー、セキュリティグループ、アラームなど、お客様の環境に関連付けられているすべての AWS リソースを終了します。

Elastic Beanstalk 環境を終了するには

  1. Elastic Beanstalk コンソールを開き、[Regions] (リージョン) リストで AWS リージョンを選択します。

  2. ナビゲーションペインで、[環境] を選択し、リストから環境の名前を選択します。

    注記

    環境が多数ある場合は、検索バーを使用して環境リストをフィルタリングします。

  3. [環境アクション] を選択してから、[環境の終了] を選択します。

  4. 画面上のダイアログボックスを使用して、環境の終了を確認します。

Elastic Beanstalk を使用すると、いつでもアプリケーション用の新しい環境を簡単に作成できます。

EB CLI の場合:

~/remote-docker$ eb terminate environment-name