はじめに
このチュートリアルでは、パブリックな Docker Hub やプライベートレジストリなど、レジストリ内の Docker イメージのリスト表示と管理方法について説明します。イメージの検索、リストのフィルタリング、Docker イメージのメタデータの検査方法を学び、コンテナ化されたアプリケーションを効果的に管理できるようになります。
Docker レジストリ入門
Docker レジストリとは?
Docker レジストリは、Docker イメージを格納、管理、配布するための集中型のリポジトリです。コンテナのデプロイと共有において重要なインフラストラクチャコンポーネントとなります。Docker レジストリは、開発者が異なる環境間でコンテナイメージをプッシュ、プル、管理することを可能にします。
Docker レジストリの主要コンポーネント
| コンポーネント | 説明 |
|---|---|
| イメージリポジトリ | Docker イメージの格納場所 |
| イメージタグ | 特定のイメージバージョンの固有識別子 |
| 認証 | イメージ管理のためのアクセス制御メカニズム |
Docker レジストリのアーキテクチャ
graph TD
A[開発者] -->|イメージのプッシュ| B[Docker レジストリ]
B -->|イメージのプル| C[コンテナホスト]
B -->|イメージの保存| D[イメージリポジトリ]
普及している Docker レジストリ
- Docker Hub (公式のパブリックレジストリ)
- Amazon Elastic Container Registry
- Google Container Registry
- Azure Container Registry
- 独自ホストのプライベートレジストリ
基本的な 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 イメージの管理とデプロイプロセスを効率化するためのスキルを習得できます。



