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?

0. 初めに

「あれってどうやるんだっけ?」を素早く調べられるように、Dockerイメージ管理を逆引き形式でまとめました。

Dockerイメージの作成から共有、運用時の注意点、コンテナレジストリの選び方まで、実務でよく使う内容を中心に解説しています。


1. 「イメージを作りたい・送りたい」ときのコマンド

Dockerイメージは「アプリケーションを動かすために必要なものをひとまとめにした箱」のようなものです。

基本的な流れは次のとおりです。

Dockerfileを書く
↓
イメージを作る
↓
タグを付ける
↓
レジストリへ送る
↓
別の環境で取得する

▶ イメージを作りたい

docker build -t my-app:1.0 .

Dockerfileをもとにイメージを作成します。


▶ イメージに送り先用の名前を付けたい

docker tag my-app:1.0 myregistry.com/my-app:1.0

レジストリへ送る前に、そのレジストリ向けの名前を付けます。


▶ レジストリへログインしたい

docker login myregistry.com

Docker Hubの場合は省略できます。

docker login

▶ イメージをアップロードしたい

docker push myregistry.com/my-app:1.0

▶ イメージを取得したい

docker pull myregistry.com/my-app:1.0

▶ ローカルにあるイメージを確認したい

docker images

または

docker image ls

▶ イメージを削除したい

docker rmi my-app:1.0

▶ 一連の流れ(Docker Hubの例)

# イメージを作成
docker build -t my-username/my-web-app:v1.0 .

# Docker Hubへログイン
docker login

# レジストリへ送信
docker push my-username/my-web-app:v1.0

# 別マシンで取得
docker pull my-username/my-web-app:v1.0

2. 「どこに保管すればいい?」の選び方

Dockerイメージの保管場所を「コンテナレジストリ」と呼びます。

公開したいのか、社内だけで使うのか、クラウドと連携したいのかで選択肢が変わります。


▶ 個人利用・勉強用 → Docker Hub

Docker公式のレジストリです。

特徴:

  • 最も利用者が多い
  • すぐ使える
  • 公式イメージが豊富

注意点:

  • 無料・未認証ユーザーには6時間単位のpullレート制限がある
  • Pro/Team/Businessなど有料プランは実質無制限(フェアユース方針あり)

※ 具体的な回数は時期によって変更されているため、最新の制限値はDocker公式ドキュメントで確認してください。

大規模運用では他のレジストリを利用することもあります。


▶ GitHubを使っている → GHCR

GitHub Container Registry(GHCR)

特徴:

  • GitHub Actionsとの相性が良い
  • GitHubの権限をそのまま利用できる
  • OCI Artifactに対応

保管例:

ghcr.io/my-org/my-app:v1.0

▶ AWSを使っている → Amazon ECR

特徴:

  • IAM統合
  • 脆弱性スキャン
  • AWSサービスとの連携

AWS利用時の第一候補です。


▶ Google Cloudを使っている → Artifact Registry

特徴:

  • Dockerイメージ以外も管理可能
  • npm
  • Maven
  • Python Package

などをまとめて管理できます。


▶ Azureを使っている → Azure Container Registry (ACR)

特徴:

  • Azure Entra IDとの統合
  • レプリケーション機能
  • Azure Kubernetes Serviceとの連携

▶ 自社管理したい → Harbor

HarborはもともとVMwareが開発し、現在はCNCFのGraduated Projectとして運営されているOSSのコンテナレジストリです。

向いているケース:

  • 社内専用
  • オフライン環境
  • 厳格なセキュリティ要件
  • 自社運用

主な機能:

  • イメージスキャン
  • 署名検証
  • RBAC
  • レプリケーション
  • 監査ログ

▶ サービス比較

サービス 運営 向いている用途
Docker Hub Docker 個人・学習
GHCR GitHub GitHub利用者
Amazon ECR AWS AWS利用
Artifact Registry Google Cloud GCP利用
Azure Container Registry Microsoft Azure利用
Harbor CNCF Graduated Project(元VMware) 自社運用

3. 運用を良くするためのポイント

▶ latestタグを本番で使わない

よくある誤解ですが、

latest

は「最新バージョン」ではありません。

単に

latest

という名前のタグです。

例えば

docker push my-app:latest

を実行したものがlatestになります。

そのため、

image: nginx:latest

のような運用は再現性が失われます。

おすすめ:

v1.2.3
main-a1b2c3d
20260620-1230

変更されないタグを使いましょう。


▶ Digest固定を利用する

本番環境ではタグよりDigest指定の方が安全です。

image:
  repository: ghcr.io/my-org/app
  digest: sha256:xxxxxxxx

メリット:

  • 改ざん防止
  • 完全再現
  • GitOps向け

Argo CDやFluxでも推奨される方法です。


▶ 不要なイメージを掃除したい

不要なイメージはディスクを圧迫します。

未使用イメージを削除:

docker image prune

停止済みコンテナやキャッシュを削除:

docker system prune

未使用イメージも含めて削除:

docker system prune -a

実行前に削除対象を確認しましょう。


▶ イメージサイズを小さくしたい

マルチステージビルドを利用します。

FROM golang:1.26-alpine AS builder

WORKDIR /app

COPY . .

RUN go build -o app .

FROM alpine:3.24

COPY --from=builder /app/app /usr/local/bin/app

CMD ["app"]

ビルド用ツールを最終イメージへ含めないため、小さく安全になります。


▶ イメージの脆弱性を確認したい

代表的なツールはTrivyです。

trivy image nginx:latest

確認できる内容:

  • OSパッケージ脆弱性
  • ライブラリ脆弱性
  • 設定ミス

HarborやECRなどもスキャン機能を提供しています。


▶ SBOMを生成したい

SBOM(Software Bill of Materials)は、ソフトウェア部品表です。

代表的なツール:

syft ghcr.io/my-org/my-app:v1.0

用途:

  • 脆弱性調査
  • ライセンス確認
  • サプライチェーン管理

近年はSBOM提出が求められるケースも増えています。


▶ イメージが本物か確認したい(署名)

コンテナイメージのサプライチェーン対策として署名が重要になっています。

かつてはDocker Content Trust(DCT)が利用されていましたが、現在は廃止方向となっており、CosignやNotationへの移行が進んでいます。

代表例:

cosign sign ghcr.io/my-org/my-app:v1.0

Cosignは

  • 鍵ベース署名
  • OIDCを利用したキーレス署名

の両方に対応しています。

Kubernetesでは

署名済みイメージのみ実行

というポリシーを設定することもできます。


▶ IntelサーバーとApple Siliconの両方で動かしたい

マルチアーキテクチャビルドを利用します。

docker buildx build \
  --platform linux/amd64,linux/arm64 \
  -t ghcr.io/my-org/my-app:v1.0 \
  --push .

対応例:

アーキテクチャ
linux/amd64 Intel・AMDサーバー
linux/arm64 Apple Silicon・Graviton

注意:

  • ビルド時間が長くなる
  • --push が必要
  • ローカル確認時は --load を利用

▶ 自動化したい

CI/CDを利用します。

例:

Git Push
↓
GitHub Actions
↓
Docker Build
↓
GHCRへPush
↓
Argo CD検知
↓
Kubernetesへ反映

これにより、

  • 手作業削減
  • ヒューマンエラー防止
  • デプロイ速度向上

が期待できます。


4. 終わりに

Docker運用では次のポイントが重要です。

  • latestではなく固定タグを使う
  • 本番ではDigest固定を検討する
  • 不要イメージを定期削除する
  • イメージサイズを小さくする
  • 脆弱性スキャンを実施する
  • SBOMを生成する
  • Cosignなどで署名する
  • マルチアーキテクチャ対応を行う
  • CI/CDで自動化する

レジストリ選びの目安は以下です。

  • 個人利用 → Docker Hub
  • GitHub利用 → GHCR
  • AWS利用 → ECR
  • GCP利用 → Artifact Registry
  • Azure利用 → ACR
  • 自社運用 → Harbor

まずはDocker HubまたはGHCRから始め、運用規模やセキュリティ要件に応じて他のレジストリを検討するとよいでしょう。

補足:Docker Hubの利用条件(特にPullレート制限の具体的な数値)やクラウドサービスの機能、HarborやCosignの仕様は変更されることがあります。実運用前には公式ドキュメントも確認してください。

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?