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の仕様は変更されることがあります。実運用前には公式ドキュメントも確認してください。