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

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

重要

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

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

前提条件

このチュートリアルでは、Elastic Beanstalk の基本的なオペレーション、Elastic Beanstalk コマンドラインインターフェイス (EB CLI) の使用、および Docker についてある程度の知識があることを前提としています。このチュートリアルを実行するには、ローカルに Docker がインストールされている必要があります。Docker のインストールの詳細については、Docker インストールガイドを参照してください。

まだ起動していない場合は、Elastic Beanstalk の開始方法の指示に従って、最初の Elastic Beanstalk 環境を起動します。このチュートリアルでは EB CLI を使用しますが、Elastic Beanstalk コンソールを使用して環境を作成し、アプリケーションをアップロードすることもできます。Docker 環境の設定の詳細については、「Docker の設定」を参照してください。

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

この例では、Elastic Beanstalk への flask アプリケーションのデプロイ からサンプルの Flask アプリケーションの Docker イメージを作成します。アプリケーションは、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 にプッシュします。

注記

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

イメージを構築してプッシュしたら、Dockerrun.aws.json ファイルで Elastic Beanstalk にデプロイできます。Flask アプリケーションの Docker イメージを構築して、Docker Hub にプッシュするには、次のコマンドを実行します。前の例と同じディレクトリを使用しますが、アプリケーションのコードを使用して任意のディレクトリを使用できます。

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

イメージをプッシュする前に、docker login を実行しなければならないことがあります。

これで、Dockerrun.aws.json ファイルのみを使用してアプリケーションをデプロイできます。Dockerrun.aws.json ファイルの詳細については、Docker の設定を参照してください。

新しいディレクトリを作成し、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 環境にデプロイします。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 コンソールを開き、[リージョン] のリストで AWS リージョンを選択します。

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

    注記

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

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

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

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

EB CLI の場合:

~/remote-docker$ eb terminate environment-name