AWS CLI を使用した Amazon ECR の開始方法 - Amazon ECR

英語の翻訳が提供されている場合で、内容が矛盾する場合には、英語版がオリジナルとして取り扱われます。翻訳は機械翻訳により提供されています。

AWS CLI を使用した Amazon ECR の開始方法

以下では、Docker CLI と AWS CLI を使用して初めてコンテナイメージを Amazon ECR にプッシュするために必要な手順について説明します。

さまざまな AWS SDK、IDE ツールキット、および Windows PowerShell コマンドラインツールを含む、AWS リソースを管理するためのその他のツールの詳細については、http://aws.amazon.com/tools/ を参照してください。

前提条件

開始する前に、必ず「Amazon ECR でのセットアップ」の手順を完了してください。

最新の AWS CLI と Docker がまだインストールされておらず、使用する準備ができていない場合は、次の手順を使用してこれら両方のツールをインストールします。

AWS CLI をインストールする

AWS コマンドラインツールを使用して、システムのコマンドラインでコマンドを発行することで、Amazon ECR および他の AWS タスクを実行できます。これは、コンソールを使用するよりも高速でより便利になります。コマンドラインツールは、AWS のタスクを実行するスクリプトの作成にも便利です。

AWS CLI を Amazon ECR とともに使用するには、最新の AWS CLI バージョンをインストールします (Amazon ECR の機能は、バージョン 1.9.15 から AWS CLI で利用可能)。AWS CLI のバージョンは、aws --version コマンドで確認できます。AWS CLI のインストールまたは最新バージョンへのアップグレードについては、AWS Command Line Interface ユーザーガイドの「AWS CLI バージョン 2 のインストール」を参照してください。

Docker のインストール

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

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

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

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

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

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

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

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

    sudo amazon-linux-extras 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?

ステップ 1: Docker イメージを作成する

このセクションでは、シンプルなウェブアプリケーションの Docker イメージを作成し、ローカルシステムまたは EC2 インスタンスでテストしてから、コンテナレジストリ (Amazon ECR や Docker Hub など) にプッシュして、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 コンテナを停止します。

ステップ 2: デフォルトレジストリに対して認証する

AWS CLI のインストールと設定が完了したら、デフォルトレジストリに対して Docker CLI を認証します。これにより、docker コマンドは Amazon ECR を使用してイメージをプッシュおよびプルできます。AWS CLI には、認証プロセスをシンプルにする get-login-password コマンドが用意されています。

get-login-password を使用して Amazon ECR レジストリに対して Docker を認証するには、aws ecr get-login-password コマンドを実行します。認証トークンを docker login コマンドに渡すときに、ユーザー名の AWS 値と認証先の Amazon ECR レジストリの URI を指定します。複数のレジストリに対して認証する場合は、レジストリごとにコマンドを繰り返す必要があります。

重要

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

  • get-login-password (AWS CLI)

    aws ecr get-login-password --region region | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.region.amazonaws.com
  • Get-ECRLoginCommand (AWS Tools for Windows PowerShell)

    (Get-ECRLoginCommand).Password | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.region.amazonaws.com

ステップ 3: レポジトリを作成する

これで Amazon ECR にプッシュするイメージが用意できたので、それを保持するレポジトリを作成する必要があります。この例では、hello-world イメージを後でプッシュする、hello-world:latest と呼ばれるレポジトリを作成します。レポジトリを作成するには、次のコマンドを実行します。

aws ecr create-repository \ --repository-name hello-world \ --image-scanning-configuration scanOnPush=true \ --region us-east-1

ステップ 4: イメージを Amazon ECR にプッシュする

ここで、前のセクションで作成した Amazon ECR リポジトリにイメージをプッシュできます。docker CLI を使ってイメージをプッシュしますが、この作業を正しく完了するために満たす必要がある前提条件がいくつかあります。

  • docker の最小バージョン 1.7 がインストールされている。

  • Amazon ECR 認証トークンが docker login で設定されている。

  • Amazon ECR リポジトリが存在し、リポジトリにプッシュするアクセス権がユーザーにある。

これらの前提条件が満たされたら、アカウントのデフォルトレジストリで新しく作成されたレポジトリにイメージをプッシュできます。

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

  1. ローカルに保存したイメージをリストし、タグを付けてプッシュするイメージを識別します。

    docker images

    出力:

    REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
    hello-world         latest              e9ffedc8c286        4 minutes ago       241MB
  2. リポジトリにプッシュするイメージにタグを付けます。

    docker tag hello-world:latest aws_account_id.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
  3. イメージをプッシュします。

    docker push aws_account_id.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest

    出力:

    The push refers to a repository [aws_account_id.dkr.ecr.us-east-1.amazonaws.com/hello-world] (len: 1)
    e9ae3c220b23: Pushed
    a6785352b25c: Pushed
    0998bf8fb9e9: Pushed
    0a85502c06c9: Pushed
    latest: digest: sha256:215d7e4121b30157d8839e81c4e0912606fca105775bb0636b95aed25f52c89b size: 6774

ステップ 5: Amazon ECR からイメージをプルする

イメージが Amazon ECR リポジトリにプッシュされたら、他の場所からプルできます。docker CLI を使ってイメージをプルしますが、この作業を正しく完了するために満たす必要がある前提条件がいくつかあります。

  • docker の最小バージョン 1.7 がインストールされている。

  • Amazon ECR 認証トークンが docker login で設定されている。

  • Amazon ECR リポジトリが存在し、リポジトリからプルするアクセス権がユーザーにある。

これらの前提条件が満たされたら、イメージをプルできます。Amazon ECR からイメージの例をプルするには、次のコマンドを実行します。

docker pull aws_account_id.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest

出力:

latest: Pulling from hello-world
0a85502c06c9: Pull complete
0998bf8fb9e9: Pull complete
a6785352b25c: Pull complete
e9ae3c220b23: Pull complete
Digest: sha256:215d7e4121b30157d8839e81c4e0912606fca105775bb0636b95aed25f52c89b
Status: Downloaded newer image for aws_account_id.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest

ステップ 6: イメージを削除する

いずれかのリポジトリで、イメージが必要なくなったと判断した場合、batch-delete-image コマンドで削除できます。イメージを削除するには、イメージがあるレポジトリ、およびイメージの imageTag または imageDigest の値を指定する必要があります。次の例では、イメージタグが hello-world で、latest リポジトリにあるイメージを削除します。

aws ecr batch-delete-image \ --repository-name hello-world \ --image-ids imageTag=latest

出力:

{
    "failures": [],
    "imageIds": [
        {
            "imageTag": "latest",
            "imageDigest": "sha256:215d7e4121b30157d8839e81c4e0912606fca105775bb0636b95aed25f52c89b"
        }
    ]
}

ステップ 7: リポジトリを削除する

イメージのリポジトリ全体が必要ないと判断した場合は、リポジトリを削除できます。デフォルトでは、イメージを含むリポジトリを削除することはできません。ただし、--force フラグを使用すると、この操作を行うことができます。イメージ (およびその中に含まれるすべてのイメージ) を含むリポジトリを削除するには、次のコマンドを実行します。

aws ecr delete-repository \ --repository-name hello-world \ --force