どーも。shihopowerです!今回はAWSコンテナサービスについてまとめました。SAP対策をやっていると、Dockerイメージやら、プライベートリポジトリやら、たくさんの用語が出てきてごちゃごちゃになってきたのと、「DockerイメージってEKSでも使えるのか」、「レジストリとリポジトリってどう違うんだっけ」といった問いが出てきたので調べてみました。
目次
はじめに
この記事では、AWSのコンテナ関連サービスである ECR・ECS・EKS と、その基盤となる Docker・Kubernetes の関係を基礎から整理します。
対象読者
- AWSを使い始めたばかりの方
- コンテナ技術に触れ始めた方
- ECR・ECS・EKSの違いがよくわからない方
1. Dockerとは
Dockerは、コンテナを作成・実行・管理するためのプラットフォームです。
Dockerが解決する問題
Docker登場以前、こんな問題がよく起きていました。
開発者のPC → 動く ✅
テスト環境 → 動く ✅
本番環境 → 動かない ❌ 「自分の環境では動いたのに…」
Dockerを使うと、環境ごとの差異をなくし、どこでも同じように動くようになります。
仮想マシン(VM)との違い
【仮想マシン】 【Docker】
┌──────────────────────┐ ┌───────┬───────┬───────┐
│ アプリ │ │ アプリA │ アプリB │ アプリC │
├──────────────────────┤ ├───────┴───────┴───────┤
│ ゲストOS(重い) │ │ Docker Engine │
├──────────────────────┤ ├───────────────────────┤
│ ハイパーバイザー │ │ ホストOS │
├──────────────────────┤ └───────────────────────┘
│ ホストOS │
└──────────────────────┘
| 比較項目 | 仮想マシン | Docker |
|---|---|---|
| 起動時間 | 数分 | 数秒 |
| サイズ | 数GB〜 | 数MB〜 |
| OSの共有 | しない | する |
| 軽量さ | 重い | 軽い |
DockerはOSを共有するため、仮想マシンより圧倒的に軽量・高速です。
Dockerの主な構成要素
| 構成要素 | 役割 |
|---|---|
| Docker Engine | コンテナを実行するエンジン(本体) |
| Dockerfile | イメージの作り方を記述するファイル |
| Dockerイメージ | コンテナの設計図 |
| コンテナ | イメージから起動した実行中のインスタンス |
| Docker Hub | イメージを共有する公式レジストリ |
2. Dockerイメージとは
Dockerイメージとは、コンテナを起動するための設計図(テンプレート) です。
イメージとコンテナの関係
Dockerイメージ →(起動)→ コンテナ(実行中のインスタンス)
(設計図) (実体)
料理に例えるなら、
- イメージ = レシピ
- コンテナ = そのレシピで作った実際の料理
1つのイメージから複数のコンテナを起動できます。
レイヤー構造
Dockerイメージはレイヤー(層)の積み重ねで構成されています。
┌─────────────────────┐
│ アプリコード │ ← 自分で追加したレイヤー
├─────────────────────┤
│ Node.js │ ← ミドルウェア
├─────────────────────┤
│ Ubuntu 22.04 │ ← ベースイメージ
└─────────────────────┘
変更があったレイヤーだけ差分更新できるため、効率的です。
Dockerfileの例
FROM ubuntu:22.04 # ベースイメージを指定
RUN apt-get install -y python3 # パッケージをインストール
COPY app.py /app/ # ファイルをコピー
CMD ["python3", "/app/app.py"] # 起動コマンド
3. ECRとは
ECR(Elastic Container Registry)は、DockerイメージなどのコンテナイメージをAWS上で保存・管理・配布するためのサービスです。
ECRが管理できるもの
ECRはDockerイメージだけでなく、OCI(Open Container Initiative)標準に準拠したアーティファクト全般を管理できます。
| 種類 | 説明 |
|---|---|
| Dockerイメージ | 最も一般的な用途 |
| OCIイメージ | Docker互換のオープン標準フォーマット |
| Helmチャート | KubernetesのパッケージマネージャーのチャートをOCIアーティファクトとして保存 |
| OCI互換アーティファクト | WebAssemblyモジュール、SBOMなど |
レジストリとリポジトリの違い
ECRを使う上で重要な概念が「レジストリ」と「リポジトリ」です。
図書館で例えると、
| 用語 | 図書館の例え | ECRでの意味 |
|---|---|---|
| レジストリ | 図書館全体 | AWSアカウント単位の最上位の保管場所 |
| リポジトリ | 特定ジャンルの棚 | アプリケーションごとのイメージ保管場所 |
| タグ | 本のバージョン | イメージのバージョン管理ラベル |
ECRの全体構造
レジストリ(AWSアカウント単位)
123456789012.dkr.ecr.ap-northeast-1.amazonaws.com
│
├── リポジトリ:my-app
│ ├── my-app:latest
│ ├── my-app:v1.0.0
│ └── my-app:v2.0.0
│
├── リポジトリ:my-api
│ ├── my-api:latest
│ └── my-api:v1.0.0
│
└── リポジトリ:my-batch
├── my-batch:latest
└── my-batch:v1.0.0
プライベートリポジトリ vs パブリックリポジトリ
ECRのリポジトリにはプライベートとパブリックの2種類があります。
ECR
├── プライベートリポジトリ
│ └── 特定のAWSアカウントのみアクセス可能(鍵付き)
│
└── パブリックリポジトリ(ECR Public)
└── 誰でも閲覧・取得可能(公開棚)
| 比較軸 | プライベートリポジトリ | パブリックリポジトリ |
|---|---|---|
| 公開範囲 | 特定のAWSアカウントのみ | 誰でも閲覧・取得可能 |
| 認証 | 必要 | 読み取りは不要 |
| 主な用途 | 社内・本番アプリのイメージ管理 | OSSの配布・公開 |
| 料金 | 保存・転送量に応じて課金 | 一定量まで無料 |
| ホスティングURL | アカウント固有のURL | gallery.ecr.aws |
| 推奨場面 | セキュリティが必要なケース | 広く配布したいケース |
使い分けの基準
社内アプリ・本番環境のイメージ → プライベートリポジトリ
OSSや公開ツールのイメージ → パブリックリポジトリ
4. ECSとEKSの違い
ECSとEKSはどちらもコンテナを管理・実行するプラットフォームです(コンテナそのものではありません)。
KubernetesとEKSの関係
Kubernetes(オープンソースのコンテナ管理システム)
↓ AWSがマネージド化(運用管理を肩代わり)
EKS(Elastic Kubernetes Service)
EKSはKubernetesをAWSが管理してくれるサービスです。kubectlなどKubernetes標準のツールがそのまま使えます。
なぜDockerイメージはECSでもEKSでも使えるのか
コンテナの世界ではOCI標準という共通規格があり、DockerイメージはこのOCI標準に準拠しています。
Dockerイメージ(OCI標準に準拠)
↓
┌─────┴──────┐
ECS EKS(Kubernetes)
(どちらでも動く)
ECS vs EKS 詳細比較
| 比較軸 | ECS | EKS |
|---|---|---|
| 管理の仕組み | AWS独自 | Kubernetes標準 |
| 学習コスト | 低い | 高い(Kubernetes知識が必要) |
| 移植性 | AWS限定 | マルチクラウド・オンプレ対応 |
| 設定ファイル | タスク定義(JSON) | マニフェスト(YAML) |
| エコシステム | AWSサービスとの連携 | Helm・Istioなど豊富なツール群 |
| 向いているケース | AWSで完結するシンプルな構成 | 複雑な構成・マルチクラウド |
移植性の違い(重要)
【ECS】
ECS設定(タスク定義)
└── AWSでしか使えない ❌ 他クラウドへの移行は作り直しが必要
【EKS】
EKS設定(Kubernetesマニフェスト)
└── GKE(Google)にそのまま移行 ✅
└── AKS(Azure)にそのまま移行 ✅
└── オンプレ環境にそのまま移行 ✅
どちらを選ぶか
AWSだけで完結・シンプルに使いたい
→ ECS
マルチクラウド・既存のKubernetes資産がある・複雑な構成が必要
→ EKS
5. 全体の関係図
これまでの内容を一枚の図に整理します。
【開発】
Dockerfile
↓ ビルド
Dockerイメージ(OCI標準)
↓ プッシュ
┌─────────────────────────────────────┐
│ ECR(レジストリ) │
│ ├── プライベートリポジトリ(社内用) │
│ └── パブリックリポジトリ(公開用) │
└─────────────────────────────────────┘
↓ プル
┌──────────────┴──────────────┐
↓ ↓
ECS EKS
(AWS独自・シンプル) (Kubernetes・マルチクラウド対応)
↓ ↓
コンテナ実行 コンテナ実行
↑
Kubernetesが管理
6. まとめ
| サービス・技術 | 役割 |
|---|---|
| Docker | コンテナを作成・実行・管理するプラットフォーム |
| Dockerイメージ | コンテナの設計図(OCI標準に準拠) |
| ECR | イメージを保存・管理・配布するレジストリ |
| ECR プライベートリポジトリ | 社内・本番用のイメージ管理(認証必要) |
| ECR パブリックリポジトリ | OSSなど公開用のイメージ配布(認証不要) |
| ECS | AWS独自のコンテナ管理プラットフォーム |
| EKS | KubernetesベースのコンテナマネージドサービスAWS版 |
| Kubernetes | コンテナを管理・オーケストレーションするオープンソースシステム |
コンテナ関連技術は登場人物が多く最初は混乱しやすいですが、それぞれの役割を整理すると全体像がつかみやすくなります。
本記事がどなたかの参考になれば幸いです。