🌐 Docker Hubとは
Docker Hubは、Dockerイメージの巨大な倉庫(レジストリ)です。 GitHubがコードを共有する場所なら、Docker Hubはコンテナイメージを共有する場所です。
💡 Docker Hubの役割
- 📦 イメージの保管庫 - 世界中のイメージが集まる場所
- 🔍 イメージの検索 - 必要なイメージを探せる
- ⬇️ イメージのダウンロード - docker pullで取得
- ⬆️ イメージのアップロード - 自作イメージを公開
- 🔄 自動ビルド - GitHubと連携して自動でイメージ作成
📊 Docker Hubの規模(2024年時点)
- • 約830万のイメージリポジトリ
- • 月間約100億回のイメージpull
- • 累計3,180億回以上のpull(2014年〜)
- • 公式イメージは厳選された高品質なイメージ
💰 無料プランと有料プランの違い
| 無料(Personal) | 有料(Pro以上) | |
|---|---|---|
| pull(ダウンロード) | 100回/時間 | 無制限 |
| パブリックリポジトリ | 無制限 | 無制限 |
| プライベートリポジトリ | 1つまで | 無制限 |
💡 パブリック = 誰でもpullできる / プライベート = 自分だけ
※ 学習用途では無料プランで十分です
⚠️ 企業利用の注意(Docker Desktop)
Docker Desktopは以下の条件に該当する企業では有料プラン必須です:
- • 従業員 250人以上
- • または 年間売上 1,000万ドル(約15億円)以上
※ 個人利用・小規模企業・教育機関・非商用OSSは無料
※ コマンドラインのDocker Engineは誰でも無料で利用可能
🏢 他のコンテナレジストリ
Docker Hub以外にもコンテナレジストリはあります:
- • Amazon ECR - AWS用
- • Azure Container Registry - Azure用
- • Google Artifact Registry - GCP用
- • GitHub Container Registry - GitHubと統合
公式イメージはDocker Hubにあるため、基本はDocker Hubを使います。
企業では本番環境用に各クラウドのレジストリを使うことが多いです。
🔍 実際にDocker Hubを見てみよう
ブラウザでDocker Hubにアクセスして、実際のイメージを見てみましょう。
Docker Hubのトップページ
ここから世界中のイメージを探せます
👀 Nginxイメージを詳しく見てみる
公式のNginxイメージページを開いてみましょう:
https://hub.docker.com/_/nginx
nginx
Official build of Nginx.
Available Tags
✨ Docker Hubで確認できること
- 📋 イメージの説明 - 何のためのイメージか
- 🏷️ 利用可能なタグ - バージョンや種類
- 📊 ダウンロード数 - 人気度の指標
- ⭐ スター数 - 評価の指標
- 📝 使い方のドキュメント - 詳細な利用方法
- 🔐 公式イメージマーク - 信頼性の証
📛 イメージの命名規則を理解する
Docker Hubのイメージには明確な命名規則があります。これを理解すると、イメージ選びが楽になります。
🔤 イメージ名の構成
フル表記と省略形
実は普段使っている nginx は省略形です:
| フル表記 | 省略形 | 説明 |
|---|---|---|
docker.io/library/nginx:latest |
nginx |
公式イメージ |
docker.io/library/nginx:1.28 |
nginx:1.28 |
公式 + バージョン指定 |
docker.io/myuser/myapp:v1 |
myuser/myapp:v1 |
ユーザー作成イメージ |
📝 省略ルール(Docker Hubの場合)
- •
docker.io→ 省略可能(Docker Hubがデフォルト) - •
library→ 公式イメージのみ省略可能 - •
:latest→ 省略可能(タグなし = latest)
🔬 ハンズオン:フル表記で実行してみる
省略形だけでなく、フル表記でも動くことを確認してみましょう。
1フル表記でコンテナを起動
2ブラウザで確認
http://localhost:8080 にアクセス → Nginxの画面が表示されればOK!
3起動を確認
フル表記で指定しても、IMAGEは nginx:1.28 と表示されます。
4停止(--rmで自動削除)
--rm を付けて起動したので、停止と同時にコンテナが自動削除されます。
💡 ポイント
nginx:1.28 も docker.io/library/nginx:1.28 も同じです。
Dockerfileの FROM でもフル表記が使えます。
⚠️ 他のレジストリは省略できない
ghcr.io/myuser/myapp:v1 |
GitHub Container Registry |
123456789.dkr.ecr.ap-northeast-1.amazonaws.com/myapp:v1 |
Amazon ECR |
Docker Hub以外のレジストリはURLを省略できません。
⚠️ タグの重要な注意点
- ❌
latestは「最新」だが、いつ変わるか分からない - ❌ タグなしは自動的に
latestになる - ✅ 本番環境では必ず特定のバージョンタグを使用
- ✅ 例:
nginx:1.28.0のように明確に指定
🔬 イメージのレイヤー構造を見る
Docker Hubでイメージのレイヤー構造を確認できます。これがDockerの効率性の秘密です!
🔍 レイヤー情報の確認方法
Docker Hub上でイメージの「Tags」タブをクリックし、特定のタグを選択すると詳細が見れます。
nginx:latest のレイヤー構造(実際の表示例)
🔬 ハンズオン:レイヤーの共有を体験する
レイヤーが共有される仕組みを実際に確認してみましょう。
1nginx:1.27 をpull
すべてのレイヤーを新規ダウンロードします。
2nginx:1.28 をpull
Already exists = ローカルに同じレイヤーがあるのでスキップ!
3ディスク使用量を確認
見た目は合計 376MB ですが...
実際は約195MBしか使っていない!
共通レイヤーは1つだけ保存され、両方のイメージが参照しています。
🧹 後片付け
🧩 なぜ共有できる? - レイヤーはハッシュで識別
各レイヤーはハッシュ値(SHA256)で識別されます。同じハッシュ = 同じ内容なので、1つだけ保存して共有できます。
💡 レイヤー共有のまとめ
| 場面 | 何が起きる? |
|---|---|
| pullする時 | ローカルにあるレイヤーは Already exists でスキップ |
| ローカル保存 | 共通レイヤーは1つだけ保存 → ディスク節約 |
| buildする時 | 変更がない行はキャッシュを使う → ビルドが速い |
🛠️ レイヤー情報をコマンドで確認
ローカルにあるイメージのレイヤーを確認することもできます:
各レイヤーがどのコマンドで作られたか、サイズはどれくらいかが分かります。
🔄 イメージをpull/pushしてみよう
Docker Hubは「イメージの倉庫」です。実際にダウンロード(pull)とアップロード(push)を体験してみましょう!
⬇️ イメージをpullする
まずは公式イメージをダウンロードしてみます。
1nginxイメージをpull
2ダウンロードしたイメージを確認
⬆️ 自作イメージをpushする
自分で作ったイメージをDocker Hubにアップロードしてみましょう。
📝 事前準備
Docker Hubのアカウントが必要です。まだの方はこちらから無料で作成できます。
3Docker Hubにログイン
4イメージに別名を付ける
pushするにはユーザー名/イメージ名:タグの形式が必要です。
docker image tagで既存イメージに別名(エイリアス)を付けます。
これはコピーではなく、同じイメージに別名を付けるだけです。
🤔 なぜ別名が必要?
nginx をそのままpushしたいところですが、できません。
nginx = library/nginx は公式イメージの名前空間で、自分にはpush権限がないからです。
だから myuser/my-nginx のように自分のユーザー名を付けた名前が必要です。
5イメージをpush
6Docker Hubで確認
ブラウザで https://hub.docker.com/r/myuser/my-nginx にアクセス!
自分のイメージがDocker Hubに公開されています。
💡 pull/pushのまとめ
docker image pull イメージ名 |
Docker Hubからダウンロード |
docker image push イメージ名 |
Docker Hubにアップロード |
docker image tag 元 新 |
イメージに別名(タグ)を付ける |
🧹 後片付け
🏅 信頼できるイメージの見分け方
🔐 イメージの種類と信頼度
| 種類 | マーク | 信頼度 | 例 |
|---|---|---|---|
| Docker Official Image | ✓ Official | ⭐⭐⭐⭐⭐ | nginx, mysql, redis |
| Verified Publisher | ✓ Verified | ⭐⭐⭐⭐ | microsoft/dotnet, amazon/aws-cli |
| Docker Sponsored OSS | Sponsored | ⭐⭐⭐ | bitnami/postgresql |
| Community Images | なし | ⭐⭐ | username/imagename |
📋 各カテゴリの詳細
✓ Docker Official Image
- メンテナンス:各プロジェクトのチーム(nginx→NGINX社、mysql→Oracle等)
- Docker社の役割:審査・認定、セキュリティスキャン、ガイドライン策定
- 特徴:Dockerのベストプラクティスに準拠
✓ Verified Publisher
- 条件:Docker Partner Programに参加している企業
- 特徴:身元が確認された企業(Microsoft、Amazon、Oracle等)
Docker Sponsored OSS
- 条件:Dockerが支援する人気オープンソースプロジェクト
- 特徴:Docker Hubの特典を無料で利用可能
Community Images
- 条件:誰でも公開できる(アカウントがあれば)
- 特徴:審査なし → 信頼度が低い
⚠️ イメージ選びの注意点
- ✅ 公式イメージを優先 - セキュリティとサポートが保証
- ✅ ダウンロード数を確認 - 多いほど実績がある
- ✅ 最終更新日を確認 - 古すぎるものは避ける
- ❌ 知らないユーザーのイメージ - セキュリティリスクあり
- ❌ タグがlatestのみ - バージョン管理されていない可能性
💡 安全にイメージを使うコツ
- 1. まず公式イメージを探す
- 2. なければVerified Publisherを探す
- 3. それでもなければスター数とダウンロード数を確認
- 4. Dockerfileが公開されているか確認(GitHubリンク)
- 5. 定期的に更新されているか確認
😱 驚き!イメージサイズの違い
同じ「Python」でも、タグによってサイズが全然違います。実際に確認してみましょう!
🔬 ハンズオン:Pythonイメージのサイズを比較
1Pythonイメージをダウンロード
※ 通常版(約1GB)は大きすぎるのでスキップ
2サイズを確認
🧹 後片付け
📝 Pythonイメージのサイズ比較(2025年時点)
| タグ | サイズ | 説明 |
|---|---|---|
3.13 |
約1GB | 通常版(重い) |
3.13-slim |
約150MB | 軽量版(おすすめ) |
3.13-alpine |
約50MB | 超軽量版(注意が必要) |
※ Python 3.14が最新ですが、安定性を考慮して3.13を推奨
📝 なぜこんなに違うの?
| タグ | ベースOS | 含まれるもの |
|---|---|---|
3.13 |
Debian(フル版) | 開発ツール、コンパイラ、多くのライブラリ |
3.13-slim |
Debian(最小構成) | Python実行に必要な最小限 |
3.13-alpine |
Alpine Linux | 超軽量OS + Python |
⚠️ 軽いほど良いわけではない
- • alpineはmusl libcを使用 → 一部のPythonライブラリ(numpy, pandas等)でビルドエラーが起きることがある
- • slimは多くの場合で問題なく動く(おすすめ)
- • 通常版はC拡張ライブラリのビルドが必要な時に便利
💡 迷ったらslimから始めるのがおすすめ!
🔓 公式イメージの中身が丸見え!
実は、公式イメージのDockerfileはGitHubで公開されています。 「このイメージ、どうやって作られてるんだろう?」が全部分かります!
👀 NginxのDockerfileを見てみよう
1Docker Hubでnginxのページを開く
2「Dockerfile」リンクを探す
ページの「Quick reference」や「Supported tags」セクションに
GitHubへのリンクがあります。
3Dockerfileの中身を確認
nginx/mainline/debian/Dockerfile(抜粋)
FROM debian:bookworm-slim
LABEL maintainer="NGINX Docker Maintainers <docker-maint@nginx.com>"
ENV NGINX_VERSION 1.25.3
RUN set -x \
&& groupadd --system nginx \
&& useradd --system --no-create-home -g nginx nginx \
&& apt-get update \
&& apt-get install --no-install-recommends -y nginx \
...
COPY docker-entrypoint.sh /
ENTRYPOINT ["/docker-entrypoint.sh"]
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
💡 Dockerfileを見るメリット
- 📚 学習になる - プロの書き方が分かる
- 🔧 カスタマイズのヒント - どこを変えればいいか分かる
- 🔍 セキュリティ確認 - 何がインストールされているか分かる
- 🐛 トラブルシューティング - 問題の原因を特定しやすい
📝 このセクションのまとめ
✅ 学んだこと
- Docker Hubはイメージの巨大な倉庫
- イメージには命名規則がある(レジストリ/ユーザー/イメージ:タグ)
- イメージはレイヤー構造で効率的に管理される
- 公式イメージを優先的に使うべき
- タグでバージョンを明確に指定することが重要
- alpine / slim / 通常版でサイズが大きく違う
- 公式イメージのDockerfileが公開されている
🎉 Dockerfileとの繋がり
前のセクションで学んだDockerfileの命令(FROM, RUN, COPY など)が、
Docker Hubでレイヤーとして表示されていることが分かりましたね!
Dockerfile → ビルド → イメージ → Docker Hub という流れが見えてきました。
🎯 次のステップ
Dockerfileとイメージの関係が分かったので、次は複数のコンテナを連携させる方法を学びます。
まずは手動で複数コンテナを起動して、その大変さを体験してみましょう!