【AWS】ECRとECSとは何か?違いとAWS上でDockerを運用する方法を実例画像で解説

aws-prograshi(プロぐらし)-kv AWS
記事内に広告が含まれていることがあります。
[PR]

AWSのECRとECSを使うとDockerをAWS上で運用することができる。

AWSのすべてのサービス一覧をみると、一番右端の隅にちょこんと記載されている。

Elastic Container RegistryがECR、Elastic Container ServiceがECS。


ECRとECSとは何か?

・ECRはDocker hubのAWSバージョン。レポジトリを作成しイメージをプッシュ・プルできる。

・ECSはDockerをAWSで起動させる場所**。ECRのイメージからコンテナを起動する。

Docker hubではなくAWS上にDockerイメージをプッシュしてチーム全体で共有したり(ECR)、AWS上でコンテナを起動して運用することができる(ECS)


ECR

  • Elastic Container Registryの略。
  • Dockerのレジストリサービス。
  • Docker hubのAWS版。

Elasticは弾性のある。ここでは要領変化への追従自由度が高いといった意味。
ContainerはDockerのコンテナ。Registryは保存場所。
まとめると、自由度の高いコンテナ保存場所といったニュアンス。

作成したイメージをECRにプッシュし、保存することができる。


ECRの詳細

ECRでできることは、

  1. レポジトリの作成
  2. イメージのプッシュ・プル
  3. イメージの詳細確認


PrivateとPublicを選択してレポジトリを作成することができる。


レポジトリ名をクリックすると作成されたイメージの一覧をみることができる。


イメージをクリックすると、その詳細が確認できる。


レポジトリの作成

画面右上のレポジトリの作成ボタンから作成画面に入れる。
作成は非常に簡単。基本的には、

  • Private or Publicの選択
  • リポジトリ名を入力
  • リポジトリの作成

の3stepのみ。


レポジトリにイメージをプッシュする

レポジトリに入り右上のプッシュコマンドの表示をクリックすると、イメージをレポジトリ にプッシュするための手順が確認できる。


step1 Dockerレジストリサーバーにログイン

#AWSの認証トークンを取得し、dockerのレポジトリサーバーにログイン
aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin [aws_account_id].dkr.ecr.[region].amazonaws.com

aws ecr get-login-password --region ap-northeast-1
aws ecrコマンドで指定リージョンのPW(トークン)を取得。


コマンドA | コマンドB
コマンドを「|」パイプで繋ぐと、コマンドAで取得したデータをコマンドBに渡す処理になる。


docker login [オプション] [サーバー]
--username AWS:ユーザー名をAWSとしてログイン

--password-stdin:パスワードは先ほど取得したトークンを標準入力(-stdin)
で渡す。

[aws_account_id].dkr.ecr.[region].amazonaws.com
サーバーにはawsのアカウントを指定。
サーバーの指定がない場合はDocker hubに接続する。

Docker loginコマンド


step2 Dockerファイルからイメージを作成

現在作業中のディレクトリにDockerfileがある場合に以下コマンドを実行する。

docker build -t [レポジトリ名] .


docker build [オプション] [Dockerファイルのパス]
-t [イメージ名:タグ名]:作成したイメージにタグを付与する。ここではレポジトリ名をタグとして指定している。

タグ名を指定しない場合はlatestとなる。

例えば、
docker build -t test-repository .の場合、
イメージ名はtest-repository:latestとなる。

.
Dockerfileのあるディレクトリのパス。現在のディレクトリにあると指定。


step3 イメージにレポジトリ名を設定

docker tag [レポジトリ名]:latest [aws_account_id].dkr.ecr.[region].amazonaws.com/[レポジトリ名]:latest

イメージにリポジトリ名を設定する。

docker tag [イメージ名] [リポジトリ名:タグ名]
[イメージ名]はイメージIDでも、イメージ:タグのどちらでも指定可能。

$ docker images
REPOSITORY                                                                                TAG              IMAGE ID                 CREATED          SIZE
[aws_account_id].dkr.ecr.[region].amazonaws.com/[AWS上のレポジトリ名]                              latest           test-repository:latest   33 minutes ago   802MB


step4 イメージをECRにプッシュ

docker push [aws_account_id].dkr.ecr.[region].amazonaws.com/test-repository:latest

docker push [レポジトリ名:タグ名]
指定したレポジトリに該当するタグ名のイメージをプッシュする。

以上でイメージのpushが完了。


ECS

  • Elastic Container Serviceの略
  • Dockerコンテナの実行環境

(参考)Docker公式 概要説明


ECSの詳細

ECSではAWSにプッシュしたイメージからコンテナを起動できる。

処理には大きく(1)クラスターと(2)タスク定義の二つの項目がある。

簡単にいうと、クラスターはサイトやアプリケーション、タスク定義はコンテナ作成の設定

▼ECSオブジェクトの関係性


クラスターとは何か?

クラスターとはタスクリクエストを実行できる1つ以上のコンテナ

つまり、1つのアプリケーションのこと。例えば、ブログサイトとコーポレートサイトを別々のサーバーで運用している場合、クラスターはブログサイトとコーポレートサイトの2つになる。

ブログサイトの中には、 Ruby on RailsとPostgreSQLなどのDBなど複数コンテナが動いているといったイメージ。


クラスターの作成

step1 クラスターテンプレートの選択

クラスターを簡単に作成するためのテンプレートを選択。


AWS Fargateとは何か?

ファーゲートと読む。ECS(およびEKS)専用のサービスでEC2サーバーやクラスターの管理をすることなく、コンテナを実行できるサービス。


step2 クラスター名を指定して作成


VPCとは何か?

Amazon Virtual Private Cloud (Amazon VPC)の略で、コンテナを起動する専用スペースのこと。


Container Insightsとは何か?

AWSの運用状況監視サービスCloudWatchに特定のデータ追加で送信できるようになる。

送信できるデータはいくつかああるが例えば、CpuUtilized(使用中のCPUユニット数)など。

AWS公式 ECSのContainer Insights

以上でクラスターの作成が完了。



タスク定義とは何か?

タスク定義は、コンテナを起動するためのイメージやCPUなどの基本設定の定義。

ECSでDockerコンテナを実行するには、タスク定義が必須。

▼タスク定義の内容

  • タスク内の各コンテナーで使用するDockerイメージ
  • 各タスクまたはタスク内の各コンテナで使用するCPUとメモリの量
  • 使用する起動タイプ。タスクがホストされるインフラストラクチャを決定します。
  • タスクのコンテナーに使用するDockerネットワークモード
  • タスクに使用するログ構成
  • コンテナが終了または失敗した場合にタスクを実行し続けるかどうか
  • コンテナの起動時に実行する必要のあるコマンド
  • タスクのコンテナで使用する必要のあるデータボリューム
  • タスクが使用する必要があるIAMロール
合わせて読みたい

ここでは、タスク定義の概要のみ解説しています。タスク定義の詳細な設定方法については下記をご参考ください。

【画像で解説】AWSのECSのタスク定義とは何か?コンテナ要件を定めたタスク定義の作成方法の実例


タスクの作成方法

step1 起動タイプの選択

 ↓

step2 タスクとコンテナの定義の設定

タスク名やコンテナに割り当てるCPUやメモリ量、コンテナの名前などを設定する。

▼主な設定内容

コンテナを起動するイメージをECRから指定。

AWS公式 タスク定義

タイトルとURLをコピーしました