Docker レジストリイメージを効果的に管理する方法

DockerBeginner
オンラインで実践に進む

はじめに

このチュートリアルでは、パブリックな Docker Hub やプライベートレジストリなど、レジストリ内の Docker イメージのリスト表示と管理方法について説明します。イメージの検索、リストのフィルタリング、Docker イメージのメタデータの検査方法を学び、コンテナ化されたアプリケーションを効果的に管理できるようになります。

Docker レジストリ入門

Docker レジストリとは?

Docker レジストリは、Docker イメージを格納、管理、配布するための集中型のリポジトリです。コンテナのデプロイと共有において重要なインフラストラクチャコンポーネントとなります。Docker レジストリは、開発者が異なる環境間でコンテナイメージをプッシュ、プル、管理することを可能にします。

Docker レジストリの主要コンポーネント

コンポーネント 説明
イメージリポジトリ Docker イメージの格納場所
イメージタグ 特定のイメージバージョンの固有識別子
認証 イメージ管理のためのアクセス制御メカニズム

Docker レジストリのアーキテクチャ

graph TD
    A[開発者] -->|イメージのプッシュ| B[Docker レジストリ]
    B -->|イメージのプル| C[コンテナホスト]
    B -->|イメージの保存| D[イメージリポジトリ]

普及している Docker レジストリ

  1. Docker Hub (公式のパブリックレジストリ)
  2. Amazon Elastic Container Registry
  3. Google Container Registry
  4. Azure Container Registry
  5. 独自ホストのプライベートレジストリ

基本的な Docker レジストリ操作

Docker Hub からイメージのプル

docker pull ubuntu:latest

レジストリへのイメージのプッシュ

docker login registry.example.com
docker tag my-image:v1 registry.example.com/my-image:v1
docker push registry.example.com/my-image:v1

Docker レジストリの利用事例

Docker レジストリは、以下のために不可欠です。

  • 集中化されたイメージの格納
  • コンテナイメージのバージョン管理
  • セキュアなイメージの配布
  • CI/CD (継続的インテグレーションと継続的デリバリー)
  • マルチ環境でのコンテナ管理

レジストリイメージの操作

イメージ管理ワークフロー

graph LR
    A[ローカル開発環境] -->|ビルド| B[Docker イメージ]
    B -->|タグ付け| C[イメージタグ付け]
    C -->|プッシュ| D[Docker レジストリ]
    D -->|プル| E[リモート環境]

基本的なイメージ操作

イメージの検索

docker search ubuntu
docker search --limit 5 python

レジストリからのイメージのプル

## 特定のイメージバージョンをプル
docker pull nginx:1.21
docker pull python:3.9-slim

## 最新のイメージをプル
docker pull alpine:latest

イメージタグ付けの戦略

タグの種類 説明
バージョンタグ myapp:1.0 特定のバージョンリリース
最新タグ myapp:latest 最新バージョン
環境タグ myapp:production 環境固有のイメージ

カスタムイメージの作成とプッシュ

## カスタムイメージのビルド
docker build -t myapp:v1 .

## レジストリ用にイメージをタグ付け
docker tag myapp:v1 registry.example.com/myapp:v1

## リモートレジストリへのプッシュ
docker push registry.example.com/myapp:v1

高度なイメージ管理

ローカルおよびリモートイメージのリスト表示

## ローカルイメージのリスト表示
docker images

## リモートレジストリ内のイメージのリスト表示
docker manifest inspect nginx

イメージのプルーニングとクリーンアップ

## 使用されていないイメージの削除
docker image prune

## 特定のイメージの削除
docker rmi nginx:latest

レジストリのセキュリティとベストプラクティス

認証とアクセス制御

graph TD
    A[ユーザー] -->|認証情報| B[Docker レジストリ]
    B -->|認証| C{アクセス制御}
    C -->|許可| D[イメージのプル/プッシュ]
    C -->|拒否| E[アクセス拒否]

レジストリ認証方法

方法 説明 セキュリティレベル
基本認証 ユーザー名/パスワード
トークンベース JWT 認証
OAuth 外部認証プロバイダ

セキュアなプライベートレジストリの構築

基本認証の設定

## htpasswd ユーティリティのインストール
sudo apt-get install apache2-utils

## パスワードファイルの生成
htpasswd -Bc /etc/docker/registry/htpasswd username

## 認証付きレジストリの構成
docker run -d \
  -p 5000:5000 \
  -v /etc/docker/registry/htpasswd:/etc/docker/registry/htpasswd \
  -e "REGISTRY_AUTH=htpasswd" \
  -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
  -e "REGISTRY_AUTH_HTPASSWD_PATH=/etc/docker/registry/htpasswd" \
  registry:2

イメージの脆弱性スキャンと脆弱性管理

Docker イメージの脆弱性スキャン

## Trivy セキュリティスキャナのインストール
sudo apt-get install wget apt-transport-https gnupg lsb-release
wget -qO - | sudo apt-key add -
sudo add-apt-repository "deb  $(lsb_release -sc) main"
sudo apt-get update
sudo apt-get install trivy

## Docker イメージの脆弱性スキャン
trivy image nginx:latest

イメージのバージョン管理とガバナンス

イメージタグ付け戦略の実装

## セマンティックバージョン管理の例
docker tag myapp:latest myapp:1.0.0
docker tag myapp:latest myapp:1.0.0-stable

## バージョン付きイメージのプッシュ
docker push myregistry.com/myapp:1.0.0
docker push myregistry.com/myapp:1.0.0-stable

ネットワークセキュリティに関する考慮事項

レジストリ通信のセキュリティ

## レジストリにTLSを有効化
docker run -d \
  -p 5000:5000 \
  -v /path/to/certs:/certs \
  -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
  -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
  registry:2

アクセス制御のベストプラクティス

  • 最小特権の原則を実装する
  • 強固で一意のパスワードを使用する
  • 定期的に認証情報を更新する
  • 多要素認証を有効にする
  • IP ホワイトリストを実装する

まとめ

このチュートリアルで説明した技術を習得することで、レジストリ内の Docker イメージを効率的にリスト化および管理できるようになります。コンテナ化されたアプリケーションに必要な適切なバージョンと構成にアクセスできるようになります。検索とフィルタリングからメタデータの検査、イメージ取得の自動化まで、Docker イメージの管理とデプロイプロセスを効率化するためのスキルを習得できます。