クラウドプラットフォームを使用することで、さまざまなリソース構成とコンピューティング容量を利用できます。 ただし、コンテナ化されたアプリケーションをクラウドプラットフォームにデプロイすることは、特にそのプラットフォームの使用方法に関する専門知識がない新規ユーザーにとっては非常に困難であることが証明されています。 各プラットフォームは特定の API を提供する場合があるため、コンテナー化されたアプリケーションのデプロイを調整するのは面倒な場合があります。
Docker Composeは、Docker ホストにデプロイされたコンテナ化されたアプリケーションを管理するために使用される非常に人気のあるツールです。その人気は、おそらく、Composeファイルでアプリケーションとそのコンポーネントを定義する方法の単純さと、その展開を管理するためのコンパクトなコマンドによるものです。
コンテナ用のクラウドプラットフォームが登場して以来、それらにComposeアプリケーションをデプロイできることは、ローカル開発にDocker Composeを使用する多くの開発者にとって最も求められている機能です。
このブログ投稿では、Docker Compose を使用してコンテナ化されたアプリケーションを Amazon ECS にデプロイする方法について説明します。 ローカルの Docker 環境へのデプロイから Amazon ECS へのデプロイへの移行がいかに簡単で、両方の環境で同じ方法でアプリケーションが管理されるかを示すことを目的としています。
必要条件
このブログ投稿の例を実行するには、次のツールをローカルにインストールする必要があります。
- ウィンドウズとMacOS:Docker Desktopをインストールする
- Linux: Docker Engine と Compose CLIをインストールする
- Amazon ECS にデプロイするには: AWS アカウント
作成ファイルを Amazon ECS にデプロイするには、Docker CLI バイナリに埋め込まれた新しい Docker 作成実装に依存しています。 したがって、ドッカー作成コマンドの代わりにドッカー作成コマンドを実行します。 ローカルデプロイの場合、Docker Composeの両方の実装が機能するはずです。 使用している不足している機能を見つけた場合は、 課題トラッカーで報告してください。
このブログ投稿では、次の方法について説明します。
- 作成アプリケーションをビルドして出荷します。 Composeファイルで定義されたアプリケーションをローカルで実行する方法と、そのイメージをビルドしてDocker Hubに送信し、どこからでもアクセスできるようにする方法について説明します。
- Amazon ECS をターゲットとする ECS コンテキストを作成します。
- Amazon ECS で作成アプリケーションを実行します。
- 作成アプリケーションのビルドと出荷
次の構造のアプリケーション例を見てみましょう。
$ツリーマイプロジェクト/ |
ファイルの内容は ここにあります。 Compose ファイルでは、次のように 2 つのサービスのみを定義します。
$ cat compose.yaml |
このファイルを Docker エンジンにローカルにデプロイするのは非常に簡単です。
$ docker compose up -d |
アプリケーションがローカルで実行されていることを確認します。
$ ドッカー ps |
フロントエンドを照会します。
$カールローカルホスト:80 |
アプリケーションを削除するには:
$ ドッカー 作曲 ダウン |
このアプリケーションを ECS にデプロイするには、アプリケーションのフロントエンドとバックエンドのイメージを Docker Hub などのパブリック イメージ レジストリに格納する必要があります。 これにより、どこからでも画像をプルできます。
イメージを Docker Hub にアップロードするには、次のように作成ファイルにイメージ名を設定します。
$ cat compose.yamlservices: |
Docker Compose を使用してイメージをビルドします。
$ ドッカー作成ビルド |
ビルド出力では、Composeファイルの画像フィールドに従って画像に名前が付けられ、タグ付けされていることがわかります。
イメージを Docker Hub にプッシュする前に、ログインしていることを確認してください。
$ ドッカーログイン |
画像をプッシュします。
$ docker compose push |
これで、イメージが Docker Hub に格納されます。
- ECS ドッカーコンテキストを作成する
Docker Compose を Amazon ECS プラットフォームをターゲットにするには、まず ECS タイプの Docker コンテキスト を作成する必要があります。Docker コンテキストは、コマンドをさまざまな Docker ホストまたはクラウド プラットフォームにリダイレクトできるようにするメカニズムです。
この時点で、ECS プラットフォームで認証するためにローカル環境に AWS 認証情報が設定されていることを前提としています。
ECS コンテキストを作成するには、次のコマンドを実行します。
$ docker context create ecs myecscontext |
AWS 認証情報のセットアップと AWS ツールの使用に関する知識に基づいて、3 つのコンテキスト設定から選択するよう求められます。 AWS 認証情報の設定の詳細をスキップするには、環境変数を使用するオプションを選択します。
$ docker context create ecs myecscontext |
これには、Amazon ECS をターゲットとする Docker コマンドを実行するときに、ローカル環境で AWS_ACCESS_KEY と AWS_SECRET_KEY を設定する必要があります。
現在使用中のコンテキストは、コンテキストリストの出力で*でマークされます。
$ ドッカーコンテキスト ls名前 タイプ 説明 ドッカーエンドポイント デフォルト * moby 現在のDOCKER_HOSTベースの構成 unix:///var/run/docker.sockmyecscontext 環境から読み取られた ECS 認証情報 |
後続のすべてのコマンドが Amazon ECS をターゲットにするには、次のコマンドを実行して、新しく作成した ECS コンテキストを使用中のコンテキストにします。
$ docker context use myecscontext |
- Amazon ECS で作成アプリケーションを実行する
これをコンテキストとして使用する代わりに、ECS を対象とするすべてのコマンドにコンテキスト フラグを設定することもできます。
警告: ECS展開で発生する可能性のあるコストを事前に確認してください 2つのECSサービス、負荷分散(ALB)、クラウドマップ(DNS解決)など。
次のコマンドでは、ECS コンテキストを現在のコンテキストとして使用します。 ECS でコマンドを実行する前に、 ドキュメントで説明されているように、Amazon アカウントの認証情報でアプリケーションのリソースを管理するためのアクセス権が付与されていることを確認してください。
これで、コマンドを実行して、ECSに正常にアクセスできることを確認できます。
$ AWS_ACCESS_KEY="*****" AWS_SECRET_KEY="******" docker compose ls |
AWS 認証情報をエクスポートして、すべてのコマンドに設定しないようにします。
$ エクスポート AWS_ACCESS_KEY="*****" |
サンプルアプリケーションをECSにデプロイすると、ローカルデプロイと同じコマンドを実行できます。
$ ドッカー 構成する |
Docker Compose は、Compose ファイルを、一連の AWS リソースを定義する CloudFormation テンプレートに変換します。 リソース マッピングの詳細については、 ドキュメントを参照してください。 生成された CloudFormation テンプレートを確認するには、次のコマンドを実行します。
$ ドッカー作成変換 |
サービスの状態を確認するには、次のコマンドを実行します。
$ docker compose ps |
ローカル実行と同様に、アプリケーションのフロントエンドを照会できます。
$ カール mypro-LoadB-1ROWIHLNOG5RZ-1172432386.eu-west-3.elb.amazonaws.com:80 |
ECS コンテナからログを取得するには、ログの作成コマンドを実行します。
$ ドッカー作成ログ |
Compose アプリケーションを終了し、AWS リソースを解放するには、次のコマンドを実行します。
$ ドッカー 作曲 ダウン |
Docker のドキュメントには、Compose ファイル の例 、サポートされている機能、ECS で実行されている Compose アプリケーションのデプロイ方法と 更新 方法の詳細などが記載されています。
次の機能について詳しく説明します。
概要
Compose アプリケーションのローカルデプロイから Amazon ECS でのデプロイへの移行について説明しました。 Docker Compose クラウド機能の使用方法を示すために、最小限の一般的な例を使用しました。 Compose ファイルを更新し、特定の AWS 機能を使用する方法をよりよく理解するために、ドキュメントにはさらに多くの詳細が記載されています。
リソース:
- Docker CLI に埋め込まれた Docker Compose
- ECS サポートへの作成
- ECS 固有の作成の例:
- ECS への Docker コンテナのデプロイ:
- 作成コマンドのデモンストレーションに使用するサンプル: