Amazon ECRとECSとは?Docker利用者向けにImage・Containerとの違いを整理
AWSの学習を始める前からDockerを使っていると、「Docker Imageを取得する」「Containerを立ち上げる」といった操作には慣れていても、AWS側のAmazon ECRやAmazon ECSが何を担当しているのかは意外と曖昧になりがちです。
私自身も、ローカル開発ではフロントエンド、バックエンド、DBをDockerで立ち上げ、AWS上の特定タグのイメージを取得する作業はしていました。しかし「そのイメージはどこに置かれているのか」「ECRとECSは何が違うのか」を説明しようとすると自信がありませんでした。
この記事では、Docker経験がある人を前提に、Image → Container → Registry → ECR → ECSの順で役割をつなげます。
まずDocker ImageとContainerを分けて考える
Docker Imageは、アプリケーションを動かすためのファイルや設定をまとめた「実行環境のひな形」です。一方、Containerは、そのImageをもとに実際に起動して動いている実体です。
Dockerfile ↓ build Docker Image ↓ run Container
たとえばバックエンド用のImageを1つ作っても、そのImageから複数のContainerを起動できます。Android開発の感覚に寄せるなら、「Imageが配布・起動の元になる成果物、Containerが実際に起動しているプロセス環境」と考えるとつかみやすくなります。ただしAPKとDocker Imageは仕組みが同じという意味ではなく、あくまで役割をつかむための比喩です。
Dockerを使うメリットは、アプリ本体だけでなく必要なライブラリや設定もImage側へまとめやすいことです。Windows、macOS、Linuxなどホスト側に違いがあっても、開発環境の差を小さくできます。ただしCPUアーキテクチャなどの違いまで完全になくなるわけではありません。
RegistryはDocker Imageを置く「倉庫」
作成したImageを別のPCやサーバーで使いたい場合、Imageをどこかに保存して共有する必要があります。その保存・配布場所がContainer Registryです。
開発PC │ docker push ▼ Container Registry │ docker pull ▼ 別のPC・サーバー
ここで重要なのは、Registryは基本的にImageを保管する場所であり、Containerを実行する場所ではないことです。この区別が分かると、Amazon ECRとAmazon ECSの違いも見えやすくなります。
Amazon ECRはImageを保存するAWSのRegistry
Amazon ECR = Amazon Elastic Container Registryです。名前の最後にあるRegistryの通り、コンテナイメージを保存・管理するAWSのサービスです。
AWS公式ドキュメントでも、ECRのプライベートリポジトリにあるDocker Imageはdocker pullでローカル環境へ取得できます。つまり「AWSから特定のタグが付いたDocker Imageをローカルへ持ってくる」という操作をしていた場合、その取得元はECSではなくECRである可能性が高い、という整理になります。

出典: AWS公式。Dockerfileから作ったImageをECR repositoryへPushする流れ。
Imageにはlatestやv1.2.0などのtag(タグ)を付けられます。タグは「どのImageを使うか」を人間が識別しやすくする名前です。実際の一意な内容はdigestでも識別されますが、最初は「タグでバージョンや用途を見分ける」と理解すれば十分です。
Amazon ECSはContainerを動かし続ける側
Amazon ECS = Amazon Elastic Container Serviceです。こちらはRegistryではなく、コンテナ化したアプリケーションをデプロイ・管理・スケールするためのサービスです。
Amazon ECR
「Imageを保管する」
│ Imageを取得
▼
Amazon ECS
「Containerをどう動かすか管理する」
│
▼
実行中のContainer
ECSでは、どのImageを使うか、CPUやメモリをどれくらい割り当てるか、何個のタスクを動かすか、といった実行側の管理につながっていきます。実際にContainerを動かす計算資源として、EC2やAWS Fargateなどを利用できます。

出典: AWS公式。ECSはコンテナを実行する容量、アプリを管理するコントローラー、操作手段という複数の層で構成されます。
ECRとECSを一言で区別する
| 用語 | 正式名称 | 一言でいうと |
|---|---|---|
| Image | Container Image | Containerを作るためのひな形 |
| Container | Container | Imageから起動して実際に動いている環境 |
| ECR | Amazon Elastic Container Registry | Imageの保管・配布場所 |
| ECS | Amazon Elastic Container Service | Containerの実行・管理を行うサービス |
最初に覚えるなら、「ECRは倉庫、ECSは実行管理」で十分です。ECRからImageを取得してローカルDockerで動かすこともできますし、ECRのImageをECSで動かす構成もあります。
まとめ:普段のDocker操作とAWSをつなげる
ローカルで行っている「Imageを取得する」「Containerを起動する」という操作は、AWSでも別物になるわけではありません。AWS側では、そのImageを置く場所としてECRがあり、Containerを継続的に動かす仕組みとしてECSがある、と役割を分けると理解しやすくなります。
次は、ContainerやAPIサーバーをAWS上のどんなネットワーク空間に置くのかを理解するために、VPCとSubnetの基本へ進みます。
