コンテナは、アプリのすべてのコード、依存関係、構成を 1 つのイメージにパッケージ化し、単一の EC2 インスタンスを構成または管理することなく、Amazon の Elastic Container Service で実行できるようにします。
コンテナとは何ですか?どうすれば使用できますか?
コンテナは Unix の概念であり、仮想マシンの実行に伴うパフォーマンスの低下なしに、分離された仮想化環境でアプリケーションを実行できるようにします。
これらは、アプリの実行に必要なものがすべて含まれている CD のようなものと考えることができます。この CD を AWS に送信すると、AWS がそのコピーの作成と複数のワーカー サーバーへの配布を処理します。これらのサーバーは、CD にパッケージ化されたアプリを実行し、自動スケール グループの一部として迅速に起動および終了して、負荷の変化に合わせてコストを最適化することができます。
コンテナーはそれ自体非常に便利ですが、もう 1 つの重要な目的もあります。コンテナーは、インフラストラクチャと運用をコードと同じバージョン管理ワークフローに持ち込み、開発環境と運用環境を同期します。コードは、サーバー上と同様にローカル開発マシン上でも実行されます。また、サーバー構成はすべてこのコンテナの一部であるため、次の方法で管理できます。
git
ソースコードを管理するのと同じように。
ただし、コンテナーにはいくつかの制限があります。これらはほとんどが読み取り専用です。 ECS や Kubernetes などのオーケストレーション ツールは、ステートレスなコンテナを中心に設計されています。実際には、それらをコンピューティングにのみ使用し、ストレージには使用しないでください。予約された EC2 インスタンスでコンテナを実行している場合は、その上でデータベースを実行しても問題ありませんが、ECS で実行されるアプリケーションは柔軟な起動と実行ができるように設計されています。停止時間。それらに保存されるすべてのデータは、RAM と同様に一時的なものです。
アプリケーションがデータベースまたはローカル ストレージを使用している場合は、それを別のサービスに移動することを検討するとよいでしょう。いずれにせよ、EC2 で実行するよりもコストが安くなる可能性があります。 AWS には多くのマネージド データベース サービスがあり、 S3 は EBS や EFS と比較してストレージが非常に安価です。
Docker を使用してアプリをパッケージ化する
これは難しい部分であり、アプリに最も特有な部分、つまりコンテナの作成と構成です。皮肉なことに、これはサーバーの構成に非常に似ていますが、一度だけ行う必要があり、すべての構成が中央の場所に保存され、開発環境と運用環境を同期できる点が異なります。そのメリットは最初の頭痛を大きく上回ります。
ローカル マシン上でコンテナーを実行および管理できるように、オペレーティング システムに Docker Desktop をインストールする必要があります。
Docker のすべての構成を定義する主要なエントリ ポイントは、Dockerfile と呼ばれます。新しいプロジェクト ディレクトリを作成し、単純に名前を付けた新しい Dockerfile を作成します。
Dockerfile
拡張子なし:
Dockerfile にタッチする
このファイル内で、Docker コマンドを使用して、インスタンスの構築方法を Docker に指示します。まず、
FROM
コマンドを使用して、Ubuntu などの Docker Hub から既存のイメージをフォークすることをお勧めします。
ubuntuから
nginx などのソフトウェアがプリインストールされたイメージなど、さまざまな 事前構築済みの Docker イメージ から選択できます。
COPY
コマンドを使用して、このプロジェクト ディレクトリ内のローカル フォルダーをイメージ内の実際のフォルダーにリンクできます。たとえば、nginx のすべての設定を含む
nginx/
というプロジェクト フォルダーがある場合は、次のようにしてそれをコピーできます。
nginx /etc/nginx/をコピーします
これにより、最終的なコンテナーがデフォルトの nginx の場所に適切な構成を持つことが保証されます。
Docker はこれよりもはるかに複雑で、初期化スクリプトを実行したり、ステートフル情報をコンテナーに渡したり、起動時にアプリを実行したりするためのコマンドが多数あります。詳細については、Docker を使用してアプリケーションをパッケージ化するための完全なガイドをご覧ください。
Dockerfile を Amazon の ECS に送信する
イメージを ECR リポジトリにアップロードする必要があります。 ECR 管理コンソールに移動し、 一意の名前で新しいリポジトリを作成します。 [プッシュ コマンドの表示] を選択すると、Docker クライアントをリポジトリにリンクし、イメージを構築して ECR にアップロードするのに役立つダイアログが表示されます。
つまり、AWS 認証情報を使用してログインし、イメージを構築し、タグを付けて、次を実行する必要があります。
ドッカープッシュ
リポジトリの URI を使用します。
これが完了したら、 ECS 管理コンソール に移動し、[開始する] を選択します。画像の種類として「カスタム」を選択します。
画像の完全な URI を入力します。次のようになります。
aws_account_id.dkr.ecr.region.amazonaws.com/repository:latest
このダイアログの「詳細設定」には追加の設定が大量にあります。必ずすべてを読み、役立つ情報をすべて入力してください。重要なことの 1 つは、「CloudWatch Logs の自動構成」をチェックすることです。これにより、コンテナ化されたアプリのログが CloudWatch にリンクされます。
デフォルトでは、アプリは EC2 ではなく AWS Fargate でコンピューティング エンジンとして実行されます。 Fargate は、AWS の Kubernetes バージョンです。コンテナーの実行を調整および管理します。主な欠点は、実際のインスタンスにログイン アクセスできないため、Docker アップデートを通じて変更を加える必要があることです (とにかくそうすべきです)。 Fargate を使用したくない場合は、AWS ECS Container Agent を実行する標準の EC2 インスタンスを使用できます。
次の画面では、実行するコンテナーの数を定義し、コンテナー間にロード バランサーを作成するオプションが表示されます。
Auto Scaling を 使用するようにサービスを構成することもできます。これにより、需要に応じてアプリケーションをスケールアップまたはスケールダウンできます。
完了したら、「作成」をクリックしてクラスターを起動します。作成すると、 ECS 管理コンソール の「クラスター」タブに表示されるようになります。





