はい、承知いたしました。Docker Hubの使い方について、イメージの検索から取得、さらにその先の活用方法までを網羅した詳細な記事を約5000語で記述します。
Docker Hubの使い方完全ガイド:イメージ検索から取得、そしてその先へ
はじめに:DockerとDocker Hubの重要性
ソフトウェア開発とデプロイの世界は、近年急速に変化しています。その変化の中心にある技術の一つが「Docker」です。Dockerは、アプリケーションとその実行に必要なすべての依存関係(ライブラリ、フレームワーク、設定ファイルなど)を「コンテナ」と呼ばれる軽量かつ独立した実行環境にパッケージ化する技術です。これにより、「開発環境では動いたのに、本番環境では動かない」といった問題を解消し、アプリケーションのポータビリティ(可搬性)と再現性を大幅に向上させます。
Dockerを利用する上で欠かせない存在が、「Docker Hub」です。Docker Hubは、Docker社が提供するクラウドベースのレジストリサービスであり、Dockerイメージの公開、共有、管理を行うためのプラットフォームです。世界中の開発者が作成した数百万ものDockerイメージがここに集約されており、私たちは必要なイメージを簡単に検索して取得できます。また、自分で作成したイメージを公開したり、チーム内で共有したりすることも可能です。
本記事では、Docker Hubを使いこなすためのステップを、初心者の方にも分かりやすく、かつ詳細に解説します。具体的には、Docker Hubの基本的な概念から、アカウントの作成、イメージの検索・取得、そして自分でイメージを作成してDocker Hubにプッシュする方法までを網羅します。さらに、組織での利用やセキュリティに関する情報にも触れ、Docker Hubをフル活用するための知識を提供します。
この記事を読むことで、あなたは以下のことを習得できます。
- Docker Hubの役割と主要機能
- Docker Hubアカウントの作成と基本的な使い方
- 目的のDockerイメージを効率的に検索する方法
- Docker Hubからイメージを取得し、利用する方法
- 独自のDockerイメージを作成し、Docker Hubに公開する方法
- Docker Hubの組織・チーム機能を使った共同作業
- Docker Hubにおけるセキュリティの考慮事項
さあ、Docker Hubの世界に飛び込み、コンテナ技術の可能性を最大限に引き出す旅を始めましょう。
Docker Hubとは? Dockerエコシステムの中心
Docker Hubは、Dockerエコシステムにおける中心的なハブの役割を担っています。例えるならば、スマートフォンアプリにおけるApp StoreやGoogle Playのような存在です。開発者はここにイメージをアップロードし、ユーザーはここからイメージをダウンロードして利用します。
クラウドベースのレジストリサービス
Docker Hubは、Dockerイメージを保存・管理するための「レジストリ」機能を提供します。レジストリは、イメージを名前とタグで識別し、構造化して保管する場所です。Docker Hubは、このレジストリをクラウドサービスとして提供しており、インターネット経由でどこからでもアクセス可能です。これにより、地理的な制約なくイメージを共有できます。
Dockerイメージの共有・管理プラットフォーム
単なる保存場所としてだけでなく、Docker Hubはイメージを共有・管理するための様々な機能を提供します。
- Public Repositories (公開リポジトリ): 誰でも検索・閲覧・取得できるイメージを公開できます。オープンソースソフトウェアや一般的なミドルウェアのイメージなどがここに公開されています。
- Private Repositories (プライベートリポジトリ): 特定のユーザーやチームだけがアクセスできるイメージを保管できます。社内アプリケーションや機密性の高いイメージの管理に適しています。
- Official Images (公式イメージ): Docker社が厳選し、定期的に更新・セキュリティチェックを行っている信頼性の高いイメージ群です。CentOS, Ubuntu, Nginx, MySQLなどの基本的なOSやミドルウェアが含まれます。
- Verified Publishers (検証済み公開者): 主要なソフトウェアベンダー(Microsoft, VMWare, Oracleなど)が提供する、信頼性が検証されたイメージです。
- Organizations & Teams: 複数ユーザーでリポジトリを共同管理するための機能です。チームごとにアクセス権限を設定できます。
- Automated Builds (Docker Hub Actions): ソースコードリポジトリ(GitHub, Bitbucketなど)と連携し、コードの更新をトリガーに自動的にイメージをビルドしてDocker Hubにプッシュする機能です。(※旧Automated Buildsは非推奨になり、Docker Hub Actionsへと移行が進んでいます。)
- Webhooks: リポジトリへのプッシュなどのイベントをトリガーに、外部システムに通知を送る機能です。CI/CDパイプラインとの連携などに利用されます。
これらの機能により、Docker Hubは個人開発から企業でのチーム開発まで、幅広いニーズに対応できる強力なプラットフォームとなっています。
Docker Hubアカウントの作成
Docker Hubを利用するには、アカウントが必要です。無料プランでも十分な機能を利用できますので、まずは無料アカウントを作成してみましょう。
サインアップの手順
- Docker Hub ウェブサイトにアクセス:
お使いのウェブブラウザでhttps://hub.docker.com/
にアクセスします。 - サインアップボタンをクリック:
トップページの右上にある「Sign Up」ボタンをクリックします。 - 必要情報の入力:
サインアップページで以下の情報を入力します。- Docker ID: Docker Hub上で使用するユニークなユーザー名です。リポジトリ名の一部としても使用されます(例:
your_docker_id/your_image
)。他のユーザーと重複しないように注意して選びましょう。 - Email Address: 有効なメールアドレスを入力します。確認メールが送信されます。
- Password: セキュリティの高いパスワードを設定します。
- Docker ID: Docker Hub上で使用するユニークなユーザー名です。リポジトリ名の一部としても使用されます(例:
- 利用規約とプライバシーポリシーの同意:
チェックボックスにチェックを入れて、利用規約とプライバシーポリシーに同意します。 - アカウント作成ボタンをクリック:
「Sign Up」ボタンをクリックして、アカウント作成を完了します。 - メールアドレスの確認:
入力したメールアドレスに確認メールが届きます。メール内のリンクをクリックして、メールアドレスを認証します。
これでDocker Hubのアカウント作成は完了です。作成したDocker IDとパスワードを使ってDocker Hubにログインできるようになります。
フリープランと有料プラン
Docker Hubには、無料プランと有料プラン(Pro, Team, Business)があります。主な違いは以下の点です。
- Private Repositories の数: 無料プランでは通常1つ(時期により変動する場合があります)、有料プランでは大幅に増えます。
- Pull Rate Limits (取得制限): 無料プランでは、認証されていないユーザーは6時間あたり100回、認証済みユーザーは6時間あたり200回のプル制限があります。有料プランではこの制限が緩和または撤廃されます。
- Organizations & Teams 機能: 無料プランでは限定的、有料プランではフル機能が利用できます。
- セキュリティ機能: 脆弱性スキャンなど、一部の高度なセキュリティ機能は有料プランでのみ提供されます。
個人で学習や簡単なアプリケーションを扱う分には、無料プランで十分ですが、チームでの利用やビジネスでの利用、あるいは多くのプライベートイメージを管理する必要がある場合は、有料プランの検討が必要です。まずは無料プランで始めて、必要に応じてアップグレードするのが良いでしょう。
Docker Hubウェブサイトの使い方
アカウントを作成したら、まずはウェブサイトからDocker Hubのインターフェースに慣れましょう。
ログイン
Docker Hub ウェブサイト (https://hub.docker.com/
) にアクセスし、右上にある「Sign In」ボタンをクリックします。作成したDocker IDとパスワードを入力してログインします。
ダッシュボードの概要
ログインすると、ダッシュボードが表示されます。ダッシュボードには、あなたがアクセスできるリポジトリ(自分で作成したもの、所属するOrganizationのリポジトリなど)の一覧が表示されます。また、最近のアクティビティや、新しいリポジトリを作成するためのリンクなども表示されます。
ナビゲーションメニューの説明
画面上部にはナビゲーションメニューがあります。主なメニュー項目は以下の通りです。
- Explore: Docker Hubで公開されているイメージを検索・探索するためのページです。公式イメージ、検証済み公開者のイメージ、人気のイメージなどを見つけることができます。
- Repositories: あなたが所有またはアクセス権を持つリポジトリの一覧が表示されます。ここから新しいリポジトリを作成したり、既存のリポジトリを管理したりできます。
- Organizations: あなたが所属するOrganizationの一覧が表示されます。Organizationの設定やメンバー管理などを行います。
(ユーザーメニュー): 自分のDocker IDをクリックすると、プロフィールの編集、アカウント設定(セキュリティ設定、支払い情報など)、ログアウトなどのオプションが表示されます。
プロフィール設定、セキュリティ設定など
ユーザーメニューから「Account Settings」にアクセスすると、様々な設定を変更できます。
- Profile: 氏名、会社名、ウェブサイトなどの公開プロフィール情報を編集できます。
- Security: パスワードの変更、二要素認証(2FA)の設定、Access Tokensの管理が行えます。セキュリティ向上のため、二要素認証の設定を強く推奨します。Access Tokensは、プログラムなどからAPI経由でDocker Hubにアクセスする際に利用します。
- Billing: 有料プランを利用している場合の支払い情報や請求履歴を確認できます。
- Notifications: メール通知の設定を変更できます。
ウェブサイトインターフェースは、Docker Hub上のイメージやリポジトリの情報を確認したり、設定を変更したりする際に便利です。しかし、実際にイメージを取得したり、プッシュしたりといった操作は、通常コマンドライン(ターミナル)で行います。
イメージの検索:目的のイメージを見つける
Docker Hubには膨大な数のイメージが存在します。その中から目的に合ったイメージを見つけるためには、効果的な検索方法を知ることが重要です。検索は、Docker Hubのウェブサイトまたはコマンドラインで行うことができます。
検索機能の利用方法
ウェブサイトでの検索
Docker Hubウェブサイトの https://hub.docker.com/search
またはトップページの検索バーからイメージを検索できます。
- 検索キーワードの入力: 検索バーに、探しているソフトウェア名やOS名などのキーワードを入力します。例えば、「ubuntu」「nginx」「mysql」「wordpress」などです。
- 検索結果の表示: 入力したキーワードに基づいて、関連するイメージ、リポジトリ、Organizationsが表示されます。
- フィルターの利用: 検索結果ページでは、左側のサイドバーにあるフィルターを利用して結果を絞り込むことができます。
- Categories: Official Images, Verified Publishers, Community Images などのカテゴリで絞り込めます。
- Last Updated: 更新日時で絞り込めます。
- OS/Arch: 対応するオペレーティングシステムとアーキテクチャで絞り込めます。
- Stars: イメージの人気度(Star数)で並べ替えたり、絞り込んだりできます。
- Search results for: リポジトリ、コレクション、Organizationsなど、検索対象の種類を選択できます。
docker search
コマンドの利用
コマンドラインから直接Docker Hubのイメージを検索するには、docker search
コマンドを使用します。
基本的な使い方:
bash
docker search [キーワード]
例:ubuntu
イメージを検索する
bash
docker search ubuntu
実行すると、以下のような形式で検索結果が表示されます。
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
ubuntu Ubuntu is a Debian-based Linux operating sys... 7821 [OK]
ubuntu-upstart Upstart is an event-based replacement for th... 114
torusware/ubuntu Ubuntu base image 64 [OK]
rastasheep/ubuntu-sshd Dockerized SSH server based on Ubuntu 14.04... 47 [OK]
ubuntu-debootstrap debootstrap'd Ubuntu for use in Docker build... 42 [OK]
nuage/ubuntu Ubuntu 14.04 LTS 29 [OK]
検索結果の見方:
- NAME: イメージのリポジトリ名です。通常
[ユーザー名またはOrganization名]/[イメージ名]
の形式ですが、公式イメージは[イメージ名]
の形式になります。 - DESCRIPTION: イメージの簡単な説明です。
- STARS: そのイメージがDocker Hub上で獲得しているStarの数です。人気の度合いを知る目安になります。Starが多いイメージは、多くのユーザーに利用されており、信頼性が高い傾向があります。
- OFFICIAL: そのイメージが公式イメージであるかどうかを示します。
[OK]
と表示されていれば公式イメージです。公式イメージはDocker社によって管理されており、信頼性が最も高いとされています。 - AUTOMATED: そのイメージがAutomated Build(現在ではDocker Hub Actionsなど連携機能)によって自動的にビルドされているかどうかを示します。
[OK]
と表示されていれば、Dockerfileから自動ビルドされています。これは、イメージのビルドプロセスが透過的であることを意味し、信頼性の一つの目安となります。
オプションの利用:
docker search
コマンドには、検索結果を絞り込むためのオプションがあります。
--filter
(または-f
): 指定した条件で結果を絞り込みます。stars=N
: Starの数がN以上のイメージに絞り込みます。
bash
docker search --filter stars=100 nginxis-official=true
: 公式イメージのみに絞り込みます。
bash
docker search --filter is-official=true ubuntuis-automated=true
: Automated Buildされたイメージのみに絞り込みます。
bash
docker search --filter is-automated=true mysql
--limit
(または-l
): 表示する検索結果の最大数を指定します。デフォルトは25件です。
bash
docker search --limit 5 debian
これらのオプションを組み合わせることで、より具体的に目的のイメージを見つけることができます。
検索のヒントとコツ
- 公式イメージ (Official Images) を優先する: 可能な限り、公式イメージを利用しましょう。これらはDocker社によって品質、セキュリティ、最新性が保証されており、最も信頼性が高いです。検索結果の
OFFICIAL
列が[OK]
のもの、またはウェブサイトで「Official Images」のカテゴリーから探せます。 - 検証済み公開者 (Verified Publishers) を確認する: 公式イメージの次に信頼できるのは、検証済み公開者によって提供されるイメージです。これは、イメージの公開者が主要なソフトウェアベンダーや組織であることがDocker社によって確認されていることを意味します。ウェブサイトで「Verified Publishers」のカテゴリーから探せます。
- Star数を参考にする: Star数が多いイメージは、多くのユーザーに利用されており、コミュニティによる検証が進んでいると考えられます。ただし、Star数だけで品質を判断せず、イメージの説明や利用者のコメントなども参考にしましょう。
- イメージのタグを確認する: 同じリポジトリ名でも、バージョンやバリエーションによって異なるタグが付けられています(例:
ubuntu:latest
,ubuntu:20.04
,ubuntu:rolling
)。使用したいソフトウェアのバージョンや、ベースとなるOSのバージョンなどを考慮して、適切なタグが付いているイメージを選びましょう。リポジトリの詳細ページで利用可能なタグ一覧を確認できます。 - 説明文とリンクを確認する: イメージの詳細ページには、そのイメージの説明、利用方法、含まれるソフトウェアのバージョンなどの情報が記載されています。また、多くの場合、元となるDockerfileやソースコードへのリンクがあります。これらの情報を確認することで、イメージの内容をより深く理解し、信頼性を判断できます。
イメージの検索は、Docker利用の最初のステップであり、最も重要なステップの一つです。目的と信頼性を十分に考慮して、適切なイメージを選びましょう。
イメージの取得 (Pull):ローカル環境へのダウンロード
目的のイメージを見つけたら、次はそれを自分のコンピューター(Dockerを実行している環境)にダウンロードします。この操作を「イメージのプル (Pull)」と呼びます。イメージをプルすることで、そのイメージからコンテナを作成・実行できるようになります。
docker pull
コマンド
イメージをプルするには、docker pull
コマンドを使用します。
基本的な使い方:
bash
docker pull [イメージ名]
ここでいう [イメージ名]
は、通常 [ユーザー名またはOrganization名]/[リポジトリ名]
または公式イメージの場合は [リポジトリ名]
の形式です。
例:公式の ubuntu
イメージの最新版をプルする
bash
docker pull ubuntu
このコマンドを実行すると、Docker Hubから ubuntu
イメージがダウンロードされます。タグを指定しない場合、デフォルトで latest
タグが付いたイメージがプルされます。
特定のタグを指定して取得:
特定のバージョンのイメージや、特定のタグが付いたイメージを取得したい場合は、イメージ名の後に :tag
を付けて指定します。
bash
docker pull [イメージ名]:[タグ]
例:ubuntu
イメージの 20.04
タグが付いたバージョンをプルする
bash
docker pull ubuntu:20.04
例:nginx
イメージの 1.21
タグが付いたバージョンをプルする
bash
docker pull nginx:1.21
特定のタグを指定することで、意図したバージョンのイメージを確実に取得できます。本番環境などでは、latest
タグではなく、特定のバージョンタグを指定してイメージをプルすることが推奨されます。latest
タグは、そのリポジトリの最新バージョンを指しますが、最新の変更が常に後方互換性を持つとは限らないため、予期せぬ挙動を引き起こす可能性があります。
イメージのDigestを指定して取得:
さらに厳密に、イメージの内容を一意に識別するハッシュ値(Digest)を指定してプルすることも可能です。Digestは、イメージの各レイヤーの内容から計算されるチェックサムのようなものです。Digestを指定することで、特定の時点でビルドされた全く同じイメージを取得することを保証できます。
bash
docker pull [イメージ名]@sha256:[Digest値]
Digest値は、Docker Hubのウェブサイトでリポジトリの詳細ページやタグ一覧ページから確認できます。
例:ubuntu
イメージの latest
タグに対応する特定のDigestを持つイメージをプルする
bash
docker pull ubuntu@sha256:f70734b6a266dcb5b446c3246837253359148228c3a38417cd5fbc645710c49d
(上記のDigest値は例であり、実際のものとは異なります。必ずDocker Hubで確認してください。)
Digestを指定したプルは、再現性が極めて重要な場面(CI/CDパイプラインなど)で有効です。
非公式イメージの取得:
公式イメージや検証済み公開者のイメージ以外(Community Images)をプルする場合も、同じ docker pull
コマンドを使用します。この場合、イメージ名にはユーザー名またはOrganization名が含まれます。
例:myuser
が公開している myimage
イメージをプルする
bash
docker pull myuser/myimage
タグを指定する場合は、同様に :tag
を追加します。
bash
docker pull myuser/myimage:version1.0
Private Repositoryからの取得:
プライベートリポジトリからイメージをプルする場合は、事前にDocker Hubにログインしておく必要があります。ログインしていない場合、認証エラーが発生します。
bash
docker login
このコマンドを実行すると、Docker IDとパスワードの入力を求められます。認証が成功すると、プライベートリポジトリからのプルやプッシュが可能になります。
プライベートリポジトリからのプルも、パブリックリポジトリと同様に docker pull
コマンドを使用します。
bash
docker pull myorganization/myprivaterepo:latest
取得中の処理:レイヤーのダウンロード
docker pull
コマンドを実行すると、Dockerは指定されたイメージの情報を取得し、そのイメージを構成する「レイヤー」をダウンロードし始めます。Dockerイメージは、複数の読み取り専用レイヤーが積み重ねられた構造をしています。これにより、イメージ間で共通のレイヤーを共有できるため、ディスク容量の節約やダウンロード時間の短縮につながります。
プル処理中は、各レイヤーのダウンロード状況が表示されます。
Using default tag: latest
latest: Pulling from library/ubuntu
f70734b6a266: Pull complete
338a511288a4: Pull complete
...
Digest: sha256:f70734b6a266dcb5b446c3246837253359148228c3a38417cd5fbc645710c49d
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest
- 各行の先頭にある英数字は、レイヤーのIDです。
Pulling from ...
は、プルしているリポジトリを示します。library/ubuntu
は公式イメージのリポジトリ名です。Pull complete
は、そのレイヤーのダウンロードが完了したことを示します。- もしローカルに既に同じレイヤーが存在する場合は、「Already exists」と表示され、ダウンロードはスキップされます。
- 全てのレイヤーのダウンロードが完了すると、イメージ全体のDigestとステータス(例:
Downloaded newer image
)が表示されます。 - 最後に、プルしたイメージの完全な名前(レジストリ名/リポジトリ名:タグ)が表示されます。
docker.io
はDocker Hubのデフォルトレジストリ名です。公式イメージの場合は、library/
が付加されることがあります。
ネットワークの状態によっては時間がかかる場合があります。進捗バーやダウンロード速度が表示されることもあります。
取得後の確認
イメージのプルが完了したら、ローカル環境にイメージが保存されていることを確認できます。確認には docker images
コマンドを使用します。
bash
docker images
実行すると、ローカルに存在するDockerイメージの一覧が表示されます。
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest f70734b6a266 4 weeks ago 77.8MB
ubuntu 20.04 f70734b6a266 4 weeks ago 77.8MB
nginx 1.21 1c35124a6714 2 weeks ago 141MB
myuser/myimage latest abcdef123456 2 days ago 200MB
- REPOSITORY: イメージのリポジトリ名です。
- TAG: イメージのタグです。同じリポジトリでも異なるタグを持つイメージが存在します。
- IMAGE ID: イメージの一意なIDです。これは、異なるリポジトリやタグのイメージでも、全く同じ内容であれば同じIDになります。
- CREATED: イメージが作成された(ビルドされた)日時です。
- SIZE: イメージのディスク容量です。
この一覧に、先ほどプルしたイメージが表示されていれば成功です。これで、このイメージを使ってコンテナを実行する準備が整いました。
イメージの管理(ローカル)
Docker Hubから取得したイメージは、ローカル環境に保存されます。これらのイメージを効率的に管理するための基本的なコマンドを紹介します。
ローカルに取得したイメージの一覧表示 (docker images
)
前述の通り、ローカルに保存されているイメージの一覧を確認するには docker images
コマンドを使用します。
bash
docker images
オプションとして -a
または --all
を付けると、中間イメージ(ビルド過程で生成される一時的なイメージ)も含めて全てのイメージを表示できます。
bash
docker images -a
特定のイメージのみを表示したい場合は、リポジトリ名やタグを指定してフィルタリングできます。
bash
docker images ubuntu
bash
docker images ubuntu:latest
イメージ情報の確認 (docker inspect
)
特定のイメージに関する詳細な情報を確認するには、docker inspect
コマンドを使用します。イメージ名、タグ、またはイメージIDを指定します。
bash
docker inspect [イメージ名またはイメージID]
例:ubuntu:latest
イメージの詳細情報を表示
bash
docker inspect ubuntu:latest
このコマンドは、イメージのID、作成日時、サイズ、設定(環境変数、ポート公開設定など)、含まれるレイヤー、親イメージの情報など、JSON形式で非常に詳細な情報を出力します。イメージの内容や設定を確認したい場合に非常に役立ちます。
イメージの削除 (docker rmi
)
不要になったイメージは、ローカルストレージの容量を圧迫するため削除することが推奨されます。イメージを削除するには docker rmi
コマンドを使用します。イメージ名、タグ、またはイメージIDを指定します。
bash
docker rmi [イメージ名またはイメージID]
例:ubuntu:20.04
イメージを削除
bash
docker rmi ubuntu:20.04
例:特定のイメージIDを持つイメージを削除
bash
docker rmi f70734b6a266
注意点:
- イメージを削除するには、そのイメージを使用しているコンテナ(実行中または停止状態)が存在しない必要があります。コンテナが存在する場合は、先にコンテナを削除する必要があります(
docker rm [コンテナID]
)。 - 複数のタグが同じイメージIDを指している場合、
docker rmi
でタグを指定して削除すると、そのタグだけが削除され、イメージ本体は他のタグが残っている限り削除されません。全てのタグが削除された時点でイメージ本体が削除されます。イメージIDを指定して削除すると、そのイメージIDを持つ全てのタグとイメージ本体が削除されます(ただし、使用中のコンテナがない場合)。 - 強制的に削除したい場合は、
-f
または--force
オプションを使用します(非推奨)。
一時的なイメージや古いバージョンのイメージを定期的にクリーンアップすることで、ディスク容量を有効活用できます。
リポジトリの種類:Public vs Private
Docker Hubには、イメージを保管する「リポジトリ」があります。リポジトリには「Public(公開)」と「Private(非公開)」の2種類があります。
Public Repositories (公開リポジトリ)
- 特徴: リポジトリの内容(イメージ)は、Docker Hubのすべてのユーザーに対して公開されます。誰でも検索し、詳細を閲覧し、イメージをプル(ダウンロード)できます。
- 用途: オープンソースソフトウェアのイメージ、誰でも自由に利用できる汎用的なイメージ(例: Nginx, Ubuntu, MySQLなど)の公開に適しています。Docker Hubのほとんどの公式イメージや検証済み公開者のイメージは公開リポジトリで提供されています。
- 作成: アカウントがあれば誰でも公開リポジトリを作成できます。
Private Repositories (プライベートリポジトリ)
- 特徴: リポジトリの内容は、リポジトリの所有者(個人アカウントまたはOrganization)と、明示的にアクセス権限を付与されたユーザーまたはチームのみがアクセスできます。権限を持たないユーザーは、検索結果にも表示されず、イメージのプルもできません。
- 用途: 社内アプリケーションのイメージ、顧客向けのカスタムイメージ、開発中のイメージなど、機密性の高いイメージの保管・共有に適しています。
- 作成と制限: 無料プランでは作成できるプライベートリポジトリの数に制限があります(通常1つ)。有料プランではこの制限が緩和または撤廃されます。プライベートリポジトリを作成するには、リポジトリ作成時に「Private」を選択します。
- アクセス制御: Organization機能を利用することで、チームごとにプル権限、プッシュ権限、管理者権限などを細かく設定できます。
リポジトリを作成する際は、そのイメージをどれくらいの範囲に公開したいかに応じて、PublicにするかPrivateにするかを選択します。一度作成した後でも、設定で公開/非公開を切り替えることが可能です(ただし、一時的に非公開にしていたイメージを再度公開する場合など、注意点がある場合があります)。
イメージの構築とプッシュ:自分のイメージを公開・共有する
Docker Hubから既存のイメージを取得して利用するだけでなく、自分でアプリケーションを含む独自のイメージを作成し、Docker Hubに保存・共有することもDockerの重要な使い方です。このプロセスは「イメージの構築 (Build)」と「イメージのプッシュ (Push)」というステップで行われます。
Dockerfileの作成
Dockerイメージは通常、Dockerfileというテキストファイルを使って構築されます。Dockerfileには、イメージを構築するための一連の命令(コマンド)が記述されています。これは、あるOSのベースイメージから出発して、ソフトウェアをインストールしたり、ファイルをコピーしたり、設定を行ったりする手順を自動化したレシピのようなものです。
Dockerfileの基本的な命令:
FROM
: ベースとなるイメージを指定します。すべてのDockerfileはFROM
命令から始まります。
例:FROM ubuntu:20.04
(Ubuntu 20.04をベースにする)
例:FROM nginx:latest
(最新版のNginxイメージをベースにする)RUN
: イメージ構築中にコンテナ内で実行するコマンドを指定します。ソフトウェアのインストールなどに使用します。
例:RUN apt-get update && apt-get install -y --no-install-recommends python3
(Python3をインストールする)COPY
: ローカル環境のファイルやディレクトリをイメージ内にコピーします。
例:COPY . /app
(Dockerfileがあるディレクトリの内容をイメージの/app
ディレクトリにコピーする)ADD
:COPY
に似ていますが、URLからのファイルダウンロードや、圧縮ファイルの自動展開機能があります。通常はCOPY
の方が推奨されます。WORKDIR
: 以降のRUN
,CMD
,ENTRYPOINT
,COPY
,ADD
命令の作業ディレクトリを指定します。
例:WORKDIR /app
(作業ディレクトリを/app
にする)EXPOSE
: コンテナがリスンするポートを指定します。これはドキュメンテーションのためであり、実際にポートを公開するにはdocker run -p
オプションが必要です。
例:EXPOSE 80
(コンテナが80番ポートでリスンすることを示す)ENV
: 環境変数を設定します。
例:ENV NODE_VERSION 14.17.0
ARG
: ビルド時に--build-arg
オプションで渡すことができる変数を定義します。
例:ARG APP_VERSION=1.0.0
VOLUME
: コンテナ内の特定パスをボリュームとして扱うことを宣言します。データの永続化などに使用します。
例:VOLUME /data
CMD
: コンテナ起動時にデフォルトで実行されるコマンドを指定します。Dockerfileごとに一つだけ指定可能です。
例:CMD ["python3", "app.py"]
(コンテナ起動時にpython3 app.py
を実行する)ENTRYPOINT
: コンテナ起動時に必ず実行されるコマンドを指定します。CMD
と組み合わせて使用することが多いです。
例:ENTRYPOINT ["nginx", "-g", "daemon off;"]
(Nginxをフォアグラウンドで起動する)
簡単なDockerfileの例:
Pythonで書かれた簡単なウェブアプリケーション (app.py
) を実行するイメージのDockerfile例です。
“`dockerfile
ベースイメージとして公式のPythonイメージの特定のバージョンを指定
FROM python:3.9-slim
イメージ内に作業ディレクトリを作成
WORKDIR /app
ローカルのアプリケーションコードを作業ディレクトリにコピー
COPY app.py /app/
必要な依存関係をインストール (もしあれば)
例: pip install -r requirements.txt
コンテナがリスンするポートを宣言
EXPOSE 5000
コンテナ起動時に実行されるデフォルトコマンド
CMD [“python”, “app.py”]
“`
app.py
の内容は例えば以下のようになります。
“`python
from flask import Flask
app = Flask(name)
@app.route(‘/’)
def hello():
return “Hello, Docker!”
if name == ‘main‘:
app.run(host=’0.0.0.0’, port=5000)
“`
Dockerfileを作成したら、次にこのファイルを使ってイメージを構築します。
イメージの構築 (docker build
)
Dockerfileがあるディレクトリで、docker build
コマンドを実行してイメージを構築します。
bash
docker build [オプション] [Dockerfileがあるディレクトリ]
最も一般的な使い方は、現在のディレクトリにあるDockerfileを使ってイメージを構築し、タグを付ける方法です。
bash
docker build -t [イメージ名]:[タグ] .
例:カレントディレクトリのDockerfileを使って myuser/myapp
という名前で 1.0
タグを付けて構築
bash
docker build -t myuser/myapp:1.0 .
-t [イメージ名]:[タグ]
: 構築したイメージに名前とタグを付けます。Docker Hubにプッシュするためには、この形式で名前を付ける必要があります。[イメージ名]
の部分は、あなたのDocker IDまたは所属するOrganization名を含める必要があります(例:your_docker_id/your_image_name
)。タグ (:1.0
) は省略可能ですが、省略するとデフォルトで:latest
が付きます。.
: Dockerfileが配置されているディレクトリのパスを指定します。.
はカレントディレクトリを意味します。これは「ビルドコンテキスト」と呼ばれ、COPY
やADD
命令でイメージ内にコピーされるファイルやディレクトリの参照元となります。
ビルド中の処理:
docker build
コマンドを実行すると、Dockerデーモンはビルドコンテキスト(指定されたディレクトリ)の内容をDockerクライアントから受け取り、Dockerfileの命令を上から順番に実行していきます。各 RUN
, COPY
, ADD
などの命令は、イメージの新しいレイヤーを作成します。
Sending build context to Docker daemon 5.12kB
Step 1/4 : FROM python:3.9-slim
---> ac927685cf21
Step 2/4 : WORKDIR /app
---> Running in d2f9b1c023a5
Removing intermediate container d2f9b1c023a5
---> 63e764928d0c
Step 3/4 : COPY app.py /app/
---> ee746e062d83
Step 4/4 : CMD ["python", "app.py"]
---> Running in d6b8b608f3e5
Removing intermediate container d6b8b608f3e5
---> d02d04924d8c
Successfully built d02d04924d8c
Successfully tagged myuser/myapp:1.0
各 Step
がDockerfileの各命令に対応します。Dockerは各ステップを実行する際に中間コンテナを作成し、その変更内容を新しいレイヤーとしてコミットします。レイヤーはキャッシュされるため、Dockerfileの変更が少ない場合は、前回のビルドで生成されたキャッシュレイヤーが再利用され、ビルド時間が短縮されます。
ビルドが成功すると、「Successfully built [イメージID]」と「Successfully tagged [イメージ名]:[タグ]」というメッセージが表示されます。docker images
コマンドで、構築したイメージがローカルに保存されていることを確認できます。
Docker Hubへのログイン (docker login
)
構築したイメージをDocker Hubにプッシュするには、事前にDocker Hubにログインしておく必要があります。
bash
docker login
このコマンドを実行すると、以下のようにユーザー名とパスワードの入力を求められます。
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, go to https://hub.docker.com/
Username: your_docker_id
Password:
Login Succeeded
Docker IDとパスワードを入力して認証が成功すると、「Login Succeeded」と表示され、プッシュが可能になります。
注意: パスワード入力時は画面に文字が表示されません。Access Tokensを利用することも推奨されます(セキュリティの項目を参照)。
セッションを終了したい場合は、以下のコマンドでログアウトできます。
bash
docker logout
イメージのプッシュ (docker push
)
構築してタグ付けしたイメージをDocker Hubのリポジトリにアップロードするには、docker push
コマンドを使用します。
bash
docker push [イメージ名]:[タグ]
ネームスペースの指定:
Docker Hubにプッシュするイメージの名前は、必ずあなたのDocker IDまたはOrganization名をネームスペースとして含める必要があります。
- 個人アカウントのリポジトリにプッシュする場合:
your_docker_id/image_name:tag
- Organizationのリポジトリにプッシュする場合:
organization_name/image_name:tag
ビルド時に -t
オプションでこのネームスペースを含む名前を付けておけば、そのままプッシュできます。
例:構築した myuser/myapp:1.0
イメージをプッシュする
bash
docker push myuser/myapp:1.0
プッシュ中の処理:
docker push
コマンドを実行すると、Dockerはローカルにある指定されたイメージのレイヤーをDocker Hubにアップロードします。Docker Hubに既に同じレイヤーが存在する場合は、そのレイヤーのアップロードはスキップされます。
The push refers to repository [docker.io/myuser/myapp]
e1f8137a7a65: Pushed
42c82ee9a353: Pushed
...
1.0: digest: sha256:abcdef1234567890... size: 1234
各行はレイヤーのアップロード状況を示します。「Pushed」と表示されていればアップロード完了です。全てのレイヤーのアップロードが完了すると、イメージ全体のDigestやサイズが表示され、プッシュが完了します。
プッシュが完了すると、Docker Hubのウェブサイトであなたのリポジトリにアクセスし、プッシュしたイメージとタグが表示されていることを確認できます。
プライベートリポジトリへのプッシュ:
プライベートリポジトリへのプッシュも、パブリックリポジトリと同様に docker push
コマンドを使用します。ただし、対象のリポジトリがプライベートとして設定されている必要があります。事前に docker login
しておく必要もあります。
プッシュ後の確認
Docker Hubウェブサイトの Repositories
セクションから、プッシュしたリポジトリを選択します。
- Tagsタブ: プッシュしたタグ(例:
1.0
,latest
)の一覧が表示されます。各タグのイメージサイズ、Digest、プッシュ日時などを確認できます。 - Repository Settings: リポジトリの公開/非公開設定、説明文の編集、Collaborators(共同作業者)の追加(個人アカウントの場合)などが行えます。
これで、あなたが作成したイメージがDocker Hubに保存され、他のユーザー(公開リポジトリの場合)や共有設定されたチームメンバー(プライベートリポジトリの場合)がプルして利用できるようになりました。
OrganizationとTeams:複数ユーザーでの共同作業
企業やチームでDocker Hubを利用する場合、個人アカウントだけでは管理が煩雑になりがちです。Docker HubのOrganization(組織)機能とTeams(チーム)機能を利用することで、複数ユーザーで効率的にリポジトリを共同管理し、アクセス権限を細かく設定できます。
Organizationの作成
Organizationは、複数のユーザーとリポジトリをまとめて管理するための仮想的なエンティティです。有料プラン(Team以上)が必要です。
- Docker Hubウェブサイトにログインします。
- ユーザーメニューから「Settings」を選択し、「Organizations」タブを開きます。
- 「Create New Organization」をクリックします。
- Organization名を入力し、プランを選択して作成します。
メンバーの招待
Organizationを作成したら、メンバーを招待します。
- Organizationのページに移動します。
- 「Members」タブを開きます。
- 「Invite Member」をクリックし、招待したいユーザーのDocker IDまたはメールアドレスを入力して招待を送信します。
- 招待されたユーザーが承諾すると、Organizationのメンバーになります。
チームの作成と権限設定
Organization内で、役割に応じたチームを作成し、各チームに属するメンバーを割り当てます。
- Organizationのページで「Teams」タブを開きます。
- 「Create Team」をクリックし、チーム名を入力して作成します。
- 作成したチームを選択し、「Members」タブでチームに含めるメンバーを追加します。
- 「Permissions」タブで、そのチームが持つリポジトリに対するデフォルトの権限(Read, Write, Admin)を設定します。
リポジトリへのチームの割り当てと権限設定
Organizationが所有するリポジトリに対して、どのチームがどのレベルの権限を持つかを設定します。
- Organizationのページで「Repositories」タブを開きます。
- 権限を設定したいリポジトリを選択します。
- 「Access Settings」または類似のタブを開きます。
- ここで、各チームに対してそのリポジトリへのアクセスレベル(Read, Write, Admin)を割り当てます。
- Read: イメージのプルのみ可能。
- Write: イメージのプルとプッシュが可能。
- Admin: プル、プッシュ、リポジトリ設定(説明、Collaboratorsなど)の変更、Webhookの設定などが可能。
これにより、「開発チームは特定のリポジトリにWrite権限、運用チームはRead権限のみ」といったきめ細やかなアクセス制御が可能になり、チームでの安全かつ効率的なDocker Hub利用を実現できます。
CI/CD連携:Automated Builds と Docker Hub Actions
Docker Hubは、Continuous Integration (CI) および Continuous Deployment (CD) パイプラインとの連携を強化する機能を提供しています。これにより、ソースコードの更新をトリガーとして、DockerイメージのビルドとDocker Hubへのプッシュを自動化できます。
Automated Builds (旧機能)
以前のDocker Hubでは「Automated Builds」という機能が提供されていました。これは、GitHubやBitbucketなどのソースコードリポジトリと直接連携し、特定ブランチへのプッシュなどをトリガーにDocker Hubが自動的にイメージをビルドしてリポジトリにプッシュする機能です。
注意点: Automated Builds機能は非推奨となり、より柔軟でパワフルな連携機能である「Docker Hub Actions」やWebhookを利用した外部CIサービスとの連携が推奨されています。新規に設定する場合は、これらの新しい方法を検討してください。
Docker Hub Actions (新しいCI/CD連携)
Docker Hub Actionsは、Docker Hub上で直接ビルドやテストといったアクションを実行できる機能です。Gitリポジトリ(GitHub、GitLab、Bitbucket、Azure Reposなど)と連携し、コードの変更に応じて定義されたアクションを実行します。
- 概要: Docker Hubのリポジトリ設定でActionを定義します。例えば、指定したブランチへのプッシュ時に、そのブランチのDockerfileを使用してイメージをビルドし、指定したタグでプッシュする、といった設定が可能です。
- 外部サービスとの連携: Docker Hub Actions自体がシンプルなビルドを提供しますが、より複雑なCI/CDワークフローはGitHub Actions, GitLab CI/CD, Jenkinsなどの外部CIサービスと連携して実現するのが一般的です。Docker Hubはその連携先としてイメージのプッシュ先となります。
- 自動ビルドのトリガー: Gitリポジトリの特定のブランチへのコミットやタグ付けなどをトリガーに設定できます。
Docker Hub Actionsの設定は、Docker Hubウェブサイトのリポジトリ設定ページから行います。ソースコードリポジトリとの連携設定、ビルドするブランチ/タグ、Dockerfileの場所、ビルド後にプッシュするDocker Hubのタグなどを指定します。
Webhooks
Webhooksは、Docker Hubのリポジトリで特定のイベント(例: イメージがプッシュされた)が発生した際に、指定されたURLにHTTP POSTリクエストを送信する機能です。
- CI/CDパイプラインの構築: Webhookは、外部のCI/CDシステムをトリガーするために広く利用されます。例えば、JenkinsやGitLab CI/CDなどのCIサーバーは、Docker HubからのWebhook通知を受け取ると、そのイメージを使った自動デプロイ処理を開始する、といったワークフローを構築できます。
- 設定方法の概要: Docker Hubのリポジトリ設定ページからWebhookを設定します。トリガーとなるイベント(通常はPushイベント)を選択し、通知を送信する外部システムのURL(Webhookエンドポイント)を指定します。必要に応じて、セキュリティのためのシークレットキーなどを設定できます。
Webhookは、Docker Hubを既存のCI/CDツールやカスタムスクリプトと連携させるための汎用的な仕組みです。
これらの自動化機能を利用することで、開発者はコード変更に集中でき、イメージのビルドとデプロイは自動化されたパイプラインに任せることができます。これにより、開発サイクルの高速化とミスの削減が期待できます。
セキュリティについて
Docker Hubを利用する上で、セキュリティは非常に重要な考慮事項です。取得するイメージの信頼性や、あなた自身のアカウント・リポジトリの保護について注意を払う必要があります。
イメージの信頼性
- Official ImagesとVerified Publishers: 前述の通り、信頼できるイメージの第一選択肢はDocker Hubが管理する「Official Images」です。次に、主要なソフトウェアベンダーが提供し、信頼性が検証された「Verified Publishers」のイメージです。これらのイメージは、定期的な更新やセキュリティチェックが行われているため、安全性が高いと考えられます。
- Community Images: OfficialやVerified Publisherではない、コミュニティによって公開されているイメージを利用する場合は、慎重な評価が必要です。
- 情報源の確認: イメージの説明文、Dockerfileの場所、ソースコードリポジトリへのリンクなどを確認し、ビルドプロセスが透過的か、信頼できる情報源に基づいているかなどを評価します。
- Star数と利用状況: Star数が多い、多くのユーザーに利用されているといった情報は、ある程度の信頼性の目安になりますが、これだけで判断せず他の要素も考慮しましょう。
- 含まれるソフトウェアのバージョン: イメージに含まれるOSやミドルウェアのバージョンが古すぎないか、既知の脆弱性が含まれていないかなどを確認します。
- イメージスキャン: 可能であれば、取得したイメージを自分で脆弱性スキャンツールで検査することを検討しましょう。
脆弱性スキャン (Docker Scoutなど)
Docker社は、Docker Scout(旧Docker Trusted Registryの機能やDocker Scanなどを含む、より広範なサプライチェーンセキュリティソリューションの一部)といった、Dockerイメージの脆弱性スキャン機能を提供しています。これらの機能は通常、有料プランで利用できます。Docker Hubにプッシュされたイメージを自動的にスキャンし、含まれるソフトウェアの既知の脆弱性をレポートしてくれます。ビジネスでDockerを利用する場合、このような脆弱性管理機能の利用を検討することは、セキュリティリスクを低減するために非常に有効です。
二要素認証 (2FA) の設定
Docker Hubアカウントのセキュリティを高めるため、二要素認証(2FA)を必ず設定しましょう。パスワードだけでなく、スマートフォンの認証アプリなどで発行される一時的なコードも要求されるようになるため、不正ログインのリスクを大幅に低減できます。
Docker Hubウェブサイトの「Account Settings」→「Security」から設定できます。
Access Tokensの利用
docker login
コマンドでパスワードを直接入力する代わりに、「Access Tokens」を使用することを検討しましょう。Access Tokenは、特定の権限(プルのみ、プッシュのみなど)を持つ使い捨てまたは期間限定の認証情報です。特にCI/CDパイプラインやスクリプトからDocker Hubにアクセスする際に、パスワードを直接埋め込むよりもセキュリティが高まります。
Access TokensはDocker Hubウェブサイトの「Account Settings」→「Security」→「New Access Token」から発行できます。トークンには、読み取り、書き込み、削除などの権限を細かく設定できます。
よくある質問 (FAQ)
Docker HubとDockerイメージに関連する、よくある質問とその回答をまとめます。
Q1: Dockerイメージとコンテナの違いは何ですか?
A1: Dockerイメージは、アプリケーションとその実行に必要なすべてのものがパッケージ化された、読み取り専用のテンプレートです。設計図や金型のようなものと考えてください。一方、Dockerコンテナは、そのDockerイメージを実行することで生成される、独立した実行可能なインスタンスです。金型から作られた製品のようなものです。一つのイメージから複数のコンテナを作成・実行できます。
Q2: latest
タグを使うべきですか?
A2: 開発環境や学習目的であれば便利ですが、本番環境では特定のバージョンタグ(例: nginx:1.21
, python:3.9-slim
)を使用することを強く推奨します。latest
タグはリポジトリの最新ビルドを指すため、予告なく後方互換性のない変更が含まれる可能性があり、デプロイの再現性が失われるリスクがあります。特定のタグを指定することで、常に同じイメージを使用してデプロイできるため、安定性が向上します。
Q3: 無料プランでプライベートリポジトリはいくつ作れますか?
A3: Docker Hubの無料プランでは、通常1つのプライベートリポジトリを作成できます(※Docker Hubのポリシー変更により変動する可能性があります。最新の情報はDocker Hubの料金ページを確認してください)。複数のプライベートリポジトリが必要な場合は、有料プランへのアップグレードが必要です。
Q4: docker login
で認証エラーが発生した場合、どうすればいいですか?
A4: まず、入力したDocker IDとパスワードが正しいか確認してください。ウェブサイトでログインできるか試してみるのが一番確実です。プロキシ設定やファイアウォールによってDocker Hubへの接続がブロックされていないかも確認してください。二要素認証を設定している場合は、パスワードに加えて認証コードも正しく入力しているか確認が必要です。
Q5: プルしたイメージがローカルのディスク容量を圧迫しているのですが?
A5: 不要になったイメージや、使用していない中間イメージが蓄積されている可能性があります。docker images
でイメージ一覧を確認し、docker rmi
で不要なイメージを削除してください。また、docker system prune
コマンドを使用すると、停止中のコンテナ、未使用のネットワーク、宙ぶらりんのイメージ(タグが付いていないイメージ)、ビルドキャッシュなどをまとめてクリーンアップできます。
まとめ:Docker Hubを使いこなしてコンテナワークフローを加速する
本記事では、Docker Hubの基本的な使い方として、イメージの検索、取得(プル)、そして独自のイメージを構築してプッシュする手順を詳細に解説しました。さらに、OrganizationやCI/CD連携、セキュリティに関する考慮事項にも触れました。
Docker Hubは、世界中の開発者が作成した豊富なイメージライブラリを提供するだけでなく、チームでの共同作業やCI/CDパイプラインの自動化を支援する強力なプラットフォームです。公式イメージや検証済み公開者のイメージを賢く利用しつつ、必要に応じて独自のイメージを作成・共有することで、コンテナ技術を最大限に活用できます。
今回学んだことの振り返り:
- Docker HubはDockerイメージのハブであり、検索・取得・プッシュ・管理を行う場所である。
docker search
コマンドやウェブサイトの検索機能を使って、目的のイメージを見つけることができる。公式・検証済みイメージやStar数を参考に、信頼性の高いイメージを選択することが重要。docker pull
コマンドを使って、Docker Hubからイメージをローカル環境にダウンロードできる。特定のバージョンを指定するためにタグを利用する。- Dockerfileを作成し、
docker build
コマンドを使って独自のDockerイメージを構築できる。 docker login
でログイン後、docker push
コマンドを使って、構築したイメージをDocker Hubのリポジトリにアップロードできる。プッシュするイメージ名にはネームスペース(Docker IDまたはOrganization名)を含める必要がある。- OrganizationとTeams機能を利用することで、複数ユーザーでリポジトリを共同管理し、アクセス権限を制御できる。
- Docker Hub ActionsやWebhooksを利用して、CI/CDパイプラインとの連携を自動化できる。
- イメージの信頼性確認、二要素認証、Access Tokensの利用などで、セキュリティを高めることができる。
Docker Hubは、単なるイメージ置き場ではなく、コンテナベースの開発・運用ワークフローを円滑に進めるための重要なツールです。本記事で得た知識を活用し、あなたの開発プロセスをさらに効率化してください。
Dockerやコンテナ技術の世界は常に進化しています。新しい機能やベストプラクティスが登場するため、公式ドキュメントやコミュニティの情報も参照しながら、継続的に学習することをお勧めします。
これで、あなたはDocker Hubを使いこなすための確固たる基盤を築きました。Docker Hubの広大なイメージライブラリを探索し、自身のアイデアをコンテナ化して世界に公開する準備は整いました。
Happy Containerizing!
これで、ご要望いただいたDocker Hubの利用方法に関する約5000語の詳細な記事が完成しました。イメージ検索から取得、そしてその後の構築・プッシュ、チーム利用、セキュリティ、CI/CD連携まで、幅広いトピックを網羅し、各ステップの詳細な説明やコマンド例を含めました。