Amazon ECS における Docker の基本 - Amazon Elastic Container Service

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

Amazon ECS における Docker の基本

Docker は、Linux コンテナに基づいて分散アプリケーションの構築、実行、テスト、デプロイするためのツールを提供するテクノロジーです。Amazon ECS は、タスク定義の Docker イメージを使用して、クラスター内のタスクの一部としてコンテナを起動します。

AWS と Docker が提携して、Docker ツールを使用して直接 Amazon ECS にコンテナをデプロイして開発できる簡素化されたデベロッパーエクスペリエンスを実現しました。これで、Docker Desktop と Docker Compose を使用してコンテナをローカルで構築およびテストした後、Fargate の Amazon ECS にコンテナをデプロイできるようになります。Amazon ECSと Docker 統合を開始するには、Docker Desktop をダウンロードし、オプションで Docker ID にサインアップします。詳細については、「Docker Desktop」と「Docker ID サインアップ 」を参照してください。

Docker には、Amazon ECS にコンテナをデプロイするためのチュートリアルが用意されています。詳細については、「Amazon ECS での Docker コンテナのデプロイ」を参照してください。

このガイドのドキュメントは、読者が Docker の概念と機能を基本的に理解していることを前提としています。Docker の詳細については、「Docker とは」、「Docker の概要」を参照してください。

Docker のインストール

重要

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

Docker Desktop は、Mac または Windows 環境用のインストールが簡単なアプリケーションで、コンテナ化されたアプリケーションやマイクロサービスを構築して共有することができます。Docker Desktop には、Docker Engine、Docker CLI クライアント、Docker Compose、および Amazon ECS で Docker を使用するときに役立つその他のツールが含まれています。使用するオペレーティングシステムに Docker Desktop をインストールする方法の詳細については、「Docker Desktop の概要」を参照してください。

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

Amazon EC2 インスタンスに Docker をインストールするには

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

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

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

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

    Amazon Linux 2

    sudo amazon-linux-extras install docker

    Amazon Linux。

    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 や Docker Hub など) にプッシュして、Amazon ECS タスク定義で使用できるようにします。

シンプルなウェブアプリケーションの Docker イメージを作成するには

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

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

    FROM ubuntu:18.04 # Install dependencies RUN apt-get update && \ apt-get -y install apache2 # Install apache and write hello world message RUN echo 'Hello World!' > /var/www/html/index.html # Configure apache RUN echo '. /etc/apache2/envvars' > /root/run_apache.sh && \ echo 'mkdir -p /var/run/apache2' >> /root/run_apache.sh && \ echo 'mkdir -p /var/lock/apache2' >> /root/run_apache.sh && \ echo '/usr/sbin/apache2 -D FOREGROUND' >> /root/run_apache.sh && \ chmod 755 /root/run_apache.sh EXPOSE 80 CMD /root/run_apache.sh

    この Dockerfile は Ubuntu 18.04 イメージを使用します。RUN の手順により、パッケージキャッシュが更新され、ウェブサーバー用のいくつかのソフトウェアパッケージがインストールされてから、「Hello World!」のコンテンツがウェブサーバーのドキュメントルートに書き込まれます。EXPOSE 命令はコンテナ上のポート 80 を公開し、CMD 命令はウェブサーバーを起動します。

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

    注記

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

    docker build -t hello-world .
  4. docker images を実行して、イメージが正しく作成されたことを確認します。

    docker images --filter reference=hello-world

    出力:

    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    hello-world         latest              e9ffedc8c286        4 minutes ago       241MB
  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 server's 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 Container Registry 製品の詳細ページを参照してください。

このセクションでは以下が必要になります。

  • AWS CLI がインストールされ、設定されている。AWS CLI がシステムにインストールされていない場合は、『AWS Command Line Interface ユーザーガイド』の「AWS Command Line Interface のインストール」を参照してください。

  • ユーザーには Amazon ECR サービスにアクセスするために必要な IAM アクセス許可があります。詳細については、「Amazon ECR管理ポリシー」を参照してください。

イメージにタグを付け、Amazon ECR にプッシュするには

  1. hello-world イメージを保存する Amazon ECR リポジトリを作成します。出力の repositoryUri に注目してください。

    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 | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.region.amazonaws.com

    出力:

    Login Succeeded
    重要

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

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

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

クリーンアップ

Amazon ECR イメージの試用を終了したら、レポジトリを削除し、イメージストレージに対して課金されないようにします。

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