0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ECS Fargateの基礎知識 ― Docker・タスク定義・デプロイの流れを整理する

0
Posted at

はじめに

個人開発でRails APIをAWS ECS Fargateにデプロイしました。ECS/Docker周りの概念が最初わかりにくかったので、整理してまとめます。


Dockerイメージとは

「アプリを動かすのに必要な全部入りパッケージ」 です。

Dockerイメージの中身:
├── OS (Ruby用の軽量Linux)
├── Ruby 3.3.8
├── Gem(Rails等のライブラリ)
├── アプリのソースコード
└── 起動コマンド(rails server)

イメージとコンテナの関係

イメージ コンテナ
例え クラスの定義 インスタンス(newしたもの)
状態 静的(ファイル) 動いてるプロセス
何個でも 同じイメージから 複数のコンテナを起動できる
Dockerfile(レシピ)
    ↓ docker build
イメージ(パッケージ)
    ↓ docker run(ECSがやってくれる)
コンテナ(実際に動くやつ)

Dockerfile = イメージの作り方イメージ = 作られた成果物コンテナ = それを動かしたもの です。


ECSとFargateの関係

ECSとFargateは別物ではなく、ECSの中にFargateがある関係です。

ECS(Elastic Container Service)
  = コンテナを管理・実行するサービス

  起動タイプを選ぶ:
  ├── EC2      → 自分でサーバーを用意して、その上でコンテナを動かす
  └── Fargate  → サーバーはAWSにお任せ。コンテナだけ定義すればいい
EC2起動タイプ Fargate起動タイプ
イメージ 自分で土地を買って家を建てる マンションの一室を借りる
サーバー管理 自分でやる(OS更新、スケーリング等) AWS任せ
コスト 安い(常時稼働向き) 高め(小規模・可変負荷向き)
設定の手間 多い 少ない

個人開発ではサーバー管理が不要なFargateが向いています。


ECSの全体像

タスク定義とは

「コンテナの設計図」 です。「どのイメージを、どんなスペックで、どんな設定で動かすか」を定義します。

ECSクラスター(箱)
  └── ECSサービス(運用ルール)
        ├── 「この設計図のコンテナを1台維持して」
        ├── 「ALBと繋いで」
        └── 「落ちたら自動で再起動して」
              │
              └── タスク定義(設計図)
                    ├── イメージ: ECRのRailsイメージ
                    ├── スペック: 0.25 vCPU / 512MB
                    ├── 環境変数: RAILS_ENV等
                    └── シークレット: DB接続情報等
                          │
                          └── タスク(実際に動くコンテナ)
概念 役割 例え
クラスター コンテナを動かす場所 工場
タスク定義 コンテナの設計図 製品の設計図
タスク 設計図から作られた実体 実際の製品
サービス 「常に1台動かせ」等の運用ルール 生産管理部門

起動コマンドはどこにあるか

ECSタスク定義にはコマンドの指定がなく、Dockerイメージ側のCMD がそのまま使われます。

# Dockerfile
ENTRYPOINT ["/rails/bin/docker-entrypoint"]  # 前処理(DB初期化等)
CMD ["./bin/rails", "server"]                  # Railsサーバー起動
ECSがコンテナを起動
  → ENTRYPOINT実行(前処理)
  → CMD実行(rails server、ポート3000)

デプロイの流れ

GitHub Actionsが:
  1. backend/Dockerfile を元に docker build → イメージ作成
  2. ECRにイメージをpush(保管)
  3. ECSに「新しいイメージでコンテナ起動して」と指示

ECSが:
  4. ECRからイメージをpull(取得)
  5. タスク定義のスペック(CPU/メモリ等)でコンテナを起動
  6. Dockerfile の CMD ["./bin/rails", "server"] が実行される

まとめ

概念 一言で
Dockerfile イメージの作り方(レシピ)
イメージ アプリの全部入りパッケージ
コンテナ イメージを動かしたもの
ECR イメージの保管場所
ECS コンテナの管理・実行サービス
Fargate サーバー管理不要のECS起動タイプ
タスク定義 コンテナの設計図(スペック・環境変数等)
サービス 「常にN台動かす」等の運用ルール
0
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?