Amazon ECS で使用するコンテナイメージの作成  - Amazon Elastic Container Service

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon ECS で使用するコンテナイメージの作成 

Amazon ECS は、タスク定義で Docker イメージを使用して、コンテナを起動します。Docker は、コンテナ内の分散アプリケーションの構築、実行、テスト、デプロイするためのツールを提供するテクノロジーです。Docker には、Amazon ECS にコンテナをデプロイするためのチュートリアルが用意されています。詳細については、「Docker Compose CLI - Amazon ECS」を参照してください。

ここでは、最初の Docker イメージを作成し、そのイメージを Amazon ECS タスク定義で使用するために、コンテナレジストリである Amazon ECR にプッシュするステップを説明します。このチュートリアルは、Docker の概念と機能を基本的に理解していることを前提としています。Docker の詳細については、「Docker とは」、「Docker の概要」を参照してください。

前提条件

開始する前に、以下の前提条件を満たしていることを確認します。

  • Amazon ECR のセットアップステップを完了したことを確認します。詳細については、Amazon Elastic Container Registry ユーザーガイドの「Amazon ECR の設定」を参照してください。

  • ユーザーは、Amazon ECR サービスにアクセスし、使用するために必要な IAM 権限を持ちます。詳細については、「Amazon ECRマネージドポリシー」を参照してください。

  • Docker をインストールします。Amazon Linux 2 の Docker インストールステップについては、「AL2023 への Docker のインストール」を参照してください。他のすべてのオペレーティングシステムについては、[Docker Desktop overview] (Docker デスクトップの概要) の Docker ドキュメントを参照してください。

  • AWS CLI がインストールされ、設定されています。詳細については、「AWS Command Line Interface ユーザーガイド」の「AWS Command Line Interface のインストール」を参照してください。

ローカル開発環境がない、または不要で、Amazon EC2 インスタンスを使って Docker を使用したい場合は、Amazon Linux 2 を使用してAmazon EC2 インスタンスを起動し、Docker Engine と Docker CLI をインストールするためのステップを以下に示します。

Docker は、Ubuntu のような最新の Linux ディストリビューションから macOS や Windows まで、さまざまなオペレーティングシステムで使用できます。特定のオペレーティングシステムに Docker をインストールする方法の詳細については、Docker インストールガイド を参照してください。

Docker を使用するには、ローカルの開発システムは必要ありません。Amazon EC2 をすでに使用している場合は、Amazon Linux 2023 インスタンスを起動し、Docker をインストールして開始できます。

Docker をインストール済みの場合は、この手順をスキップして「Docker イメージの作成」に進んでください。

Amazon Linux 2023 AMI を使用して Amazon EC2 インスタンスに Docker をインストールするには
  1. 最新の Amazon Linux 2023 AMI を使用してインスタンスを起動します。詳細については、Linux インスタンス用 Amazon EC2 ユーザーガイドの「インスタンス起動ウィザードを使用したインスタンスの起動」を参照してください。

  2. インスタンスに接続します。詳細については、Linux インスタンス用 Amazon EC2 ユーザーガイドの「Linux インスタンスへの接続」を参照してください。

  3. インスタンスでインストールされているパッケージとパッケージキャッシュを更新します。

    sudo yum update -y
  4. 最新の Docker Community Edition パッケージをインストールします。

    sudo yum install docker
  5. Docker サービスを開始します。

    sudo service docker start
  6. ec2-userdocker グループに追加すると、sudo を使用せずに Docker コマンドを実行できます。

    sudo usermod -a -G docker ec2-user
  7. ログアウトし、再びログインして、新しい docker グループアクセス権限を取得します。これは、現在の SSH ターミナルウィンドウを閉じて、新しいウィンドウでインスタンスに再接続することで達成できます。新しい SSH セッションには適切な docker グループ権限があります。

  8. ec2-usersudo を使用せずに Docker コマンドを実行できることを確認します。

    docker info
    注記

    場合によっては、Docker デーモンにアクセスするための ec2-user に対するアクセス権限を提供するため、インスタンスを再起動する必要があります。次のエラーが表示された場合は、インスタンスを再起動してください。

    Cannot connect to the Docker daemon. Is the docker daemon running on this host?

Docker イメージの作成

Amazon ECS のタスク定義では、Docker イメージを使用してクラスター内のコンテナインスタンスでコンテナを起動します。このセクションでは、シンプルなウェブアプリケーションの Docker イメージを作成し、ローカルシステムまたは Amazon EC2 インスタンスでテストしてから、そのイメージを Amazon ECR コンテナレジストリにプッシュして、Amazon ECS タスク定義で使用できるようにします。

シンプルなウェブアプリケーションの Docker イメージを作成するには
  1. Dockerfile という名前のファイルを作成します。Dockerfile は、Docker イメージに使用する基本イメージと、そのイメージにインストールして実行するものを記述するマニフェストです。Dockerfile の詳細については、「Dockerfile リファレンス」を参照してください。

    touch Dockerfile
  2. 前の手順で作成した Dockerfile を編集し、以下のコンテンツを追加します。

    FROM public.ecr.aws/amazonlinux/amazonlinux:latest # Install dependencies RUN yum update -y && \ yum install -y httpd # Install apache and write hello world message RUN echo 'Hello World!' > /var/www/html/index.html # Configure apache RUN echo 'mkdir -p /var/run/httpd' >> /root/run_apache.sh && \ echo 'mkdir -p /var/lock/httpd' >> /root/run_apache.sh && \ echo '/usr/sbin/httpd -D FOREGROUND' >> /root/run_apache.sh && \ chmod 755 /root/run_apache.sh EXPOSE 80 CMD /root/run_apache.sh

    この Dockerfile は、Amazon ECR パブリックでホストされているパブリック Amazon Linux 2 イメージを使用します。RUN の手順により、パッケージキャッシュが更新され、ウェブ サーバー用のいくつかのソフトウェアがインストールされてから、「Hello World!」 のコンテンツがウェブサーバーのドキュメントルートに書き込みされます。EXPOSE 命令は、コンテナのポート 80 がリッスンしているポートであり、 CMD命令はウェブサーバーを起動することを意味します。

  3. Dockerfile から Docker イメージを作成します。

    注記

    Docker の一部のバージョンでは、下に示す相対パスの代わりに、次のコマンドで Dockerfile への完全パスが必要になる場合があります。

    docker build -t hello-world .
  4. コンテナイメージを一覧表示します。

    docker images --filter reference=hello-world

    出力:

    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    hello-world         latest              e9ffedc8c286        4 minutes ago       194MB
  5. 新しく構築されたイメージを実行します。-p 80:80 オプションは、コンテナ上の公開されたポート 80 をホストシステム上のポート 80 にマッピングします。docker run の詳細については、「Docker run reference」を参照してください。

    docker run -t -i -p 80:80 hello-world
    注記

    Apache ウェブサーバーからの出力はターミナルウィンドウに表示されます。"Could not reliably determine the fully qualified domain name" メッセージは無視できます。

  6. ブラウザーを開き、Docker を実行している、コンテナのホストサーバーを参照します。

    • EC2 インスタンスを使用している場合、これはサーバーの [Public DNS] 値であり、SSH でインスタンスに接続するときに使用するアドレスと同じです。インスタンスのセキュリティグループでポート 80 上の受信トラフィックを許可していることを確認します。

    • Docker をローカルに実行している場合は、ブラウザで http://localhost/ を参照します。

    • Windows または Mac コンピュータdocker-machineで を使用している場合は、 docker-machine ip コマンドを使用して Docker をホストしている VirtualBox VM の IP アドレスを見つけます。machine-name は、使用している Docker マシンの名前に置き換えます。

      docker-machine ip machine-name

    ウェブページに「Hello, World!」が確認できます。表示されます。

  7. [Ctrl + C] キーを押して、Docker コンテナを停止します。

Amazon Elastic Container Registry にイメージをプッシュします

Amazon ECR はマネージド AWS Docker レジストリサービスです。Docker CLI を使用して、Amazon ECR リポジトリ内のイメージをプッシュ、プル、および管理できます。Amazon ECR 製品の詳細、主なお客様導入事例、FAQ については、Amazon Elastic コンテナレジストリ 製品の詳細ページを参照してください。

イメージにタグを付け、Amazon ECR にプッシュするには
  1. hello-world イメージを保存する Amazon ECR リポジトリを作成します。出力の repositoryUri に注目してください。

    regionに置き換えます。例えば AWS リージョン、 ですus-east-1

    aws ecr create-repository --repository-name hello-repository --region region

    出力:

    {
        "repository": {
            "registryId": "aws_account_id",
            "repositoryName": "hello-repository",
            "repositoryArn": "arn:aws:ecr:region:aws_account_id:repository/hello-repository",
            "createdAt": 1505337806.0,
            "repositoryUri": "aws_account_id.dkr.ecr.region.amazonaws.com/hello-repository"
        }
    }
  2. 前のステップの repositoryUri の値で hello-world イメージにタグを付けます。

    docker tag hello-world aws_account_id.dkr.ecr.region.amazonaws.com/hello-repository
  3. aws ecr get-login-password コマンドを実行します。認証先のレジストリ URI を指定します。詳細については、Amazon Elastic Container Registry ユーザーガイドの「レジストリの認証」を参照してください。

    aws ecr get-login-password --region region | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.region.amazonaws.com

    出力:

    Login Succeeded
    重要

    エラーが発生した場合は、 AWS CLI の最新バージョンをインストールまたはアップグレードします。詳細については、AWS Command Line Interface ユーザーガイドの「AWS Command Line Interface のインストール」を参照してください。

  4. repositoryUri前のステップの値 を使用して、Amazon ECR にイメージをプッシュします。

    docker push aws_account_id.dkr.ecr.region.amazonaws.com/hello-repository

クリーンアップ

Amazon ECS タスク定義の作成、およびコンテナイメージを使用したタスク起動を続行するには、次のステップ に進んでください。Amazon ECR イメージの試用を終了したら、レポジトリを削除し、イメージストレージに対して課金されないようにします。

aws ecr delete-repository --repository-name hello-repository --region region --force

次のステップ

タスク定義にはタスク実行ロールが必要です。詳細については、「Amazon ECS タスク実行IAM ロール」を参照してください。

コンテナイメージを作成し、Amazon ECR にプッシュしたら、以下の次のステップを検討する必要があります。