0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWSコンテナサービス入門 〜Docker・ECR・ECS・EKSの関係を整理する〜

0
Posted at

どーも。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 コンテナを管理・オーケストレーションするオープンソースシステム

コンテナ関連技術は登場人物が多く最初は混乱しやすいですが、それぞれの役割を整理すると全体像がつかみやすくなります。

本記事がどなたかの参考になれば幸いです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?