

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

# Amazon Elastic Container Registry の使用
Amazon ECR の使用

Amazon Elastic Container Registry (Amazon ECR) サービスには、VS Code の AWS Explorer から直接アクセスし、それを使用してプログラムイメージを Amazon ECR リポジトリにプッシュできます。開始するには、次の手順を実行する必要があります。

1. イメージの構築に必要な情報を含む Dockerfile を作成します。

1. その Dockerfile からイメージをビルドし、処理のためにイメージにタグを付けます。

1. Amazon ECR インスタンス内にリポジトリを作成します。

1. リポジトリにタグ付けされたイメージをプッシュします。

## 前提条件


VS Code Explorer から Amazon ECR サービスにアクセスするには、これらのステップを完了する必要があります。

### IAM ユーザーの作成


Amazon ECR などの AWS サービスにアクセスするには、認証情報を指定する必要があります。これにより、サービスのリソースにアクセスする権限の有無が確認されます。ルート AWS アカウントの認証情報を使用して AWS に直接アクセスすることはお勧めしません。代わりに、 AWS Identity and Access Management (IAM) を使用して IAM ユーザーを作成し、そのユーザーを管理権限を持つ IAM グループに追加します。その後、特別な URL と IAM ユーザーの認証情報 AWS を使用して にアクセスできます。

にサインアップした AWS が、自分で IAM ユーザーを作成しなかった場合は、IAM コンソールを使用して作成できます。

管理者ユーザーを作成するには、以下のいずれかのオプションを選択します。


****  

| 管理者を管理する方法を 1 つ選択します | 目的 | 方法 | 以下の操作も可能 | 
| --- | --- | --- | --- | 
| IAM アイデンティティセンター内 (推奨) | 短期の認証情報を使用して AWSにアクセスします。これはセキュリティのベストプラクティスと一致しています。ベストプラクティスの詳細については、「*IAM ユーザーガイド*」の「[IAM でのセキュリティのベストプラクティス](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#bp-users-federation-idp)」を参照してください。 | AWS IAM アイデンティティセンター ユーザーガイドの「[開始方法](https://docs.aws.amazon.com//singlesignon/latest/userguide/getting-started.html)」の手順に従います。 | AWS Command Line Interface ユーザーガイドの [を使用する AWS CLI ように を設定 AWS IAM アイデンティティセンター](https://docs.aws.amazon.com//cli/latest/userguide/cli-configure-sso.html)して、プログラムによるアクセスを設定します。 | 
| IAM 内 (非推奨) | 長期認証情報を使用して AWSにアクセスします。 | IAM ユーザーガイドの「[緊急アクセス用の IAM ユーザーを作成する](https://docs.aws.amazon.com/IAM/latest/UserGuide/getting-started-emergency-iam-user.html)」の手順に従います。 | IAM ユーザーガイドの「[IAM ユーザーのアクセスキーを管理する](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_credentials_access-keys.html)」の手順に従って、プログラムによるアクセスを設定します。 | 

この新しい IAM ユーザーとしてサインインするには、 AWS コンソールからサインアウトし、次の URL を使用します。次の URL では、*your\$1aws\$1account\$1id* はハイフンのない AWS アカウント番号です (たとえば、 AWS アカウント番号が の場合`1234-5678-9012`、 AWS アカウント ID は です`123456789012`)。

```
https://your_aws_account_id.signin.aws.amazon.com/console/
```

作成した IAM ユーザー名とパスワードを入力します。サインインすると、ナビゲーションバーに「*your\$1user\$1name* @ *your\$1aws\$1account\$1id*」が表示されます。

サインインページの URL に AWS アカウント ID を含めない場合は、アカウントエイリアスを作成できます。IAM ダッシュボードから [**カスタマイズ**] を選択し、[**アカウントエイリアス**] を入力します。これは、会社名です。詳細については、IAM [ユーザーガイドの「 AWS アカウント ID とそのエイリアス](https://docs.aws.amazon.com/IAM/latest/UserGuide/console_account-alias.html)」を参照してください。

アカウントエイリアスを作成した後、サインインするには、次の URL を使用します。

```
https://your_account_alias.signin.aws.amazon.com/console/
```

アカウントの IAM ユーザーのサインインリンクを確認するには、IAM コンソールを開き、ダッシュボードの [**IAM users sign-in link**] の下を確認します。

IAM の詳細については、「[AWS Identity and Access Management ユーザーガイド](https://docs.aws.amazon.com/IAM/latest/UserGuide/)」を参照してください。

### Docker をインストールして構成する


Docker をインストールして構成するには、[Docker エンジンのインストール](https://docs.docker.com/engine/install/) から好ましいオペレーティングシステムを選択し、指示に従います。

### CLI AWS バージョン 2 のインストールと設定


CLI バージョン AWS 2 ユーザーガイドから任意のオペレーティングシステムを選択して[、CLI バージョン 2 AWS をインストールおよび設定します](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html)。

## 1. Dockerfile の作成


Docker は Dockerfile というファイルを使用して、リモートリポジトリにプッシュおよび保存できるイメージを定義します。ECR リポジトリにイメージをアップロードする前に、Dockerfile を作成し、その Dockerfile からイメージをビルドする必要があります。

**Dockerfile の作成**

1. Toolkit for VS Code Explorer を使用して、Dockerfile を保存するディレクトリに移動します。

1. **Dockerfile** という名前の新しいファイルを作成します。
**注記**  
VS Code は、ファイルタイプまたはファイル拡張子を選択するように促す場合があります。この問題が発生した場合は、**プレーンテキスト**を選択します。Vs Code には「dockerfile」拡張子があります。ただし、使用することは推奨されていません。これは、拡張機能が特定のバージョンの Docker または他の関連アプリケーションと競合する可能性があるためです。

**VS Code を使用して Dockerfile を編集する**

Dockerfile にファイル拡張子がある場合は、そのファイルのコンテキスト (右クリック) メニューを開き、ファイル拡張子を削除します。

Dockerfile からファイル拡張子を削除したら、次の操作を行います。

1. 空の Dockerfile を VS Code で直接開きます。

1. 次の例の内容を Dockerfile にコピーします。  
**Example 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
   ```

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

1. Dockerfile を保存します。
**重要**  
Dockerfile の名前に拡張子が付いていないことを確認してください。拡張子を持つ Dockerfile は、Docker の特定のバージョンやその他の関連アプリケーションと競合する可能性があります。

## 2. Dockerfile からイメージをビルドする


作成した Dockerfile には、プログラムのイメージを構築するために必要な情報が含まれています。そのイメージを Amazon ECR インスタンスにプッシュする前に、まずイメージをビルドする必要があります。

**Dockerfile からイメージを作成する**

1. Docker CLI または Docker のインスタンスと統合された CLI を使用して、Dockerfile を含むディレクトリに移動します。

1. **Docker ビルド**コマンドを実行して、Dockerfile で定義されているイメージをビルドします。

   ```
             docker build -t hello-world .
   ```

1. **docker images** コマンドを実行して、イメージが正しく作成されたことを確認します。

   ```
   docker images --filter reference=hello-world
   ```  
**Example 出力例:**  

   ```
   REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
   hello-world         latest              e9ffedc8c286        4 minutes ago       241MB
   ```

1. 
**注記**  
この手順は、イメージの作成やプッシュには必要ありませんが、プログラムイメージの実行時の動作を確認できます。

   新しいビルトイメージを実行するには、**Docker 実行** コマンドを使用します。

   ```
   docker run -t -i -p 80:80 hello-world
   ```

   **-p** オプションは、前の例で指定され、コンテナ上の **80 ポート** からホストシステム **80 ポート** にエキスポートされます。。Docker をローカルに実行している場合は、ブラウザで [http://localhost:80](http://localhost:80) を参照します。プログラムが正常に実行された場合、「Hello World\$1」 ステートメントが表示されます。

   **Docker run** コマンドの詳細については、Docker ウェブサイトの「[Docker run reference](https://docs.docker.com/engine/reference/run/)」を参照してください。

## 3. 新規レポジトリを作成します


Amazon ECR インスタンスにイメージをアップロードするには、保存できる新しいリポジトリを作成します。

**Amazon ECR リポジトリを作成します。**

1. VSコード**アクティビティバー** から、**AWS Toolkit アイコン** を選択します。

1. ** AWS Explorer** メニューを展開します。

1.  AWS アカウントに関連付けられているデフォルトの AWS リージョンを見つけます。次に、それを選択して、VS Code の Toolkit を介したサービスのリストを表示します。

1. **ECR \$1** オプションを選択し、**リポジトリの新規作成**プロセスを開始します。

1. プロンプトに従ってプロセスを完了します。

1. 完了したら、 AWS Explorer メニューの **ECR** セクションから新しいリポジトリにアクセスできます。

## 4. イメージのプッシュ、プル、削除


Dockerfile からイメージを構築してリポジトリを作成したら、イメージを Amazon ECR リポジトリにプッシュできます。さらに、Docker と AWS CLI で AWS Explorer を使用すると、以下を実行できます。
+ イメージをリポジトリからプルします。
+ リポジトリに保存されているイメージを削除します。
+ リポジトリを削除します。

**デフォルトレジストリで Docker を認証する**

Amazon ECR インスタンスと Docker インスタンス間でデータを交換するには、認証が必要です。レジストリで Docker を認証するには

1. CLI AWS のインスタンスに接続されているコマンドラインオペレーティングシステムを開きます。

1. **get-login-password** を使用して、プライベート ECR レジストリを認証するメソッドです。

   ```
   aws ecr get-login-password --region region | docker login --username AWS --password-stdin AWS_account_id.dkr.ecr.region.amazonaws.com
   ```
**重要**  
上記のコマンドでは、 AWS アカウント固有の情報に **region** および **AWS\$1account\$1id** の両方を更新する必要があります。

**リポジトリにプッシュするイメージにタグを付けます。**

のインスタンスで Docker を認証したら AWS、イメージをリポジトリにプッシュします。

1. **Docker イメージ**コマンドを使用して、ローカルに保存したイメージを表示し、タグ付けするイメージを特定します。

   ```
   docker images
   ```  
**Example 出力例:**  

   ```
   REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
   hello-world         latest              e9ffedc8c286        4 minutes ago       241MB
   ```

1. **Docker コマンド**を使用してイメージをビルドします。

   ```
   docker tag hello-world:latest AWS_account_id.dkr.ecr.region.amazonaws.com/hello-world:latest
   ```

1. リポジトリに **Docker タグ**コマンドでタグ付けされたイメージをプッシュします。

   ```
   docker push AWS_account_id.dkr.ecr.region.amazonaws.com/hello-world:latest
   ```  
**Example 出力例:**  

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

タグ付けされたイメージがリポジトリに正常にアップロードされると、 AWS Explorer メニューに表示されます。

**Amazon ECR からイメージをプルする**
+ イメージは、**Docker タグ**コマンドのローカルインスタンスにプルできます。

  ```
  docker pull AWS_account_id.dkr.ecr.region.amazonaws.com/hello-world:latest
  ```  
**Example 出力例:**  

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

**Amazon ECR リポジトリからイメージを削除する**

VS Code からイメージを削除する方法は 2 つあります。最初の方法は AWS Explorer を使用することです。

1.  AWS Explorer から **ECR** メニューを展開します。

1. イメージを削除するリポジトリを展開します。

1. コンテキストメニュー (右クリック) を開いて、削除するイメージに関連付けられているイメージタグを選択します。

1. ・ウm**タグの削除...** オプションを選択して、そのタグに関連付けられているすべての保存されたイメージを削除します。

**CLI AWS を使用してイメージを削除する**
+ **AWS ecr batch-delete-image** コマンドを使用して、リポジトリからイメージを削除することもできます。

  ```
  AWS ecr batch-delete-image \
        --repository-name hello-world \
        --image-ids imageTag=latest
  ```  
**Example 出力例:**  

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

**Amazon ECR インスタンスからリポジトリを削除する**

VS Code からリポジトリを削除する方法は 2 つあります。最初の方法は AWS Explorer を使用することです。

1.  AWS Explorer から **ECR** メニューを展開します。

1. コンテキスト (右クリック) メニューを開き、削除するリポジトリを選択します。

1. **リポジトリの削除...** オプションを選択して、レポジトリを選択します。

**CLI から Amazon ECR AWS リポジトリを削除する**
+ リポジトリは、**AWS ecr delete-repository** コマンドで削除できます。　
**注記**  
デフォルトでは、イメージを含むリポジトリを削除することはできません。ただし、**--force** フラグはこれを許可します。

  ```
   AWS ecr delete-repository \
        --repository-name hello-world \
        --force
  ```  
**Example 出力例:**  

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