Docker Hub 入門!コンテナイメージの探し方・使い方の徹底解説
はじめに:コンテナ時代の玄関口、Docker Hubとは
テクノロジーの世界では、アプリケーションの開発、デプロイ、実行の方法が常に進化しています。近年、その中心的な役割を果たしているのが「コンテナ技術」であり、そのデファクトスタンダードと言えるのが「Docker」です。Dockerを使うことで、アプリケーションとその実行に必要な環境(ライブラリ、設定ファイルなど)を「コンテナ」という独立したパッケージにまとめることができます。これにより、「開発環境では動いたのに、本番環境では動かない」といった問題を大幅に減らし、開発から運用までを効率化することが可能になります。
コンテナを動かすためには、その「設計図」となる「コンテナイメージ」が必要です。このコンテナイメージの巨大なライブラリとして機能しているのが、今回解説する「Docker Hub」です。Docker Hubは、世界中の開発者や組織が作成したコンテナイメージを公開・共有し、誰でも簡単に検索して利用できるクラウドベースのサービスです。例えるなら、スマートフォンのアプリストアのようなものです。欲しい機能があれば、アプリストアで検索してインストールするように、特定のソフトウェアや環境が必要なら、Docker Hubでイメージを検索して利用できるのです。
この記事では、Docker Hubをこれから使い始める方、あるいはDockerは使っているけれどイメージの探し方や使い方がいまいちよくわからない、といった方を対象に、Docker Hubでのコンテナイメージの「探し方」と「使い方」を、基本的な概念から具体的なコマンド、そして利用上の注意点まで、徹底的に詳細に解説します。約5000語というボリュームで、Docker Hubの機能を余すことなくご紹介し、あなたのコンテナ活用を強力にサポートすることを目指します。
1. Docker Hubの基本概念:イメージ、リポジトリ、タグとは?
Docker Hubを理解するためには、いくつかの基本的な概念を把握しておく必要があります。これらはDockerそのものの基本的な構成要素でもあります。
-
コンテナイメージ (Container Image):
- コンテナイメージは、コンテナを実行するために必要なすべての要素を含む軽量で独立した実行可能パッケージです。これには、コード、ランタイム、システムツール、システムライブラリ、設定などが含まれます。
- イメージは、1つ以上の読み取り専用レイヤー(層)が積み重なって構成されています。これにより、複数のイメージ間で共通するレイヤーを共有でき、ディスク容量の節約やダウンロードの高速化につながります。
- イメージは、一度作成されると不変(immutable)です。同じイメージから起動されたコンテナは、初期状態は常に同じになります。
- Docker Hubは、このコンテナイメージを保管、共有するためのレジストリ(保管場所)の一つです。
-
リポジトリ (Repository):
- リポジトリは、関連するコンテナイメージの集まりです。通常、特定のソフトウェアやアプリケーションに関するイメージがまとめられています。例えば、公式のNginxイメージは
nginx
というリポジトリに、公式のUbuntuイメージはubuntu
というリポジトリに格納されています。 - リポジトリはさらに、同じイメージの異なるバージョンやバリエーションを区別するために「タグ」を持ちます。
- Docker Hubでは、リポジトリはユーザー名または組織名とリポジトリ名の組み合わせで識別されます(例:
ubuntu
、nginx
、myuser/my-app
)。公式イメージはユーザー名なしで識別されることが一般的です。
- リポジトリは、関連するコンテナイメージの集まりです。通常、特定のソフトウェアやアプリケーションに関するイメージがまとめられています。例えば、公式のNginxイメージは
-
タグ (Tag):
- タグは、リポジトリ内の特定のイメージバージョンを識別するためのラベルです。人間にとって分かりやすい文字列が使われます。
- 最も一般的なタグはバージョン番号(例:
1.21.4
,2.7.18-alpine
)ですが、特定の意味を持つタグもよく使われます。latest
: そのリポジトリの中で最新または推奨されるバージョンを指すことが一般的ですが、必ずしも「最新の安定版」を意味するとは限らないため注意が必要です。どのバージョンを指すかはイメージのメンテナーによって定義されます。タグを指定せずにイメージをプルまたは実行しようとすると、デフォルトでlatest
タグが使用されます。stable
,edge
,dev
: リリースチャネルを示すタグ。- 特定のOSやアーキテクチャを示すサフィックス(例:
-alpine
,-stretch
,-centos
)。
- 同じイメージIDに対して複数のタグを付けることも可能です。例えば、ある特定のバージョンのイメージに
1.21.4
というタグとstable
というタグの両方が付いていることがあります。
-
公式イメージ (Official Images):
- Docker社によって厳選され、メンテンスされている高品質なイメージです。CentOS, Ubuntu, Nginx, Node.js, Python, MySQLなどの人気のあるオープンソースソフトウェアの公式版が提供されています。
- これらのイメージは、セキュリティ、ベストプラクティス、最新性などが一定の基準を満たしていることが保証されており、プロダクション環境での利用にも適しています。
- Docker Hub上で特別なバッジ(Official Image)が付いています。
-
認証済みパブリッシャーイメージ (Verified Publisher Images):
- Docker社とパートナーシップを結んだ商業ソフトウェアベンダー(Microsoft, Oracle, VMWareなど)によって提供されるイメージです。
- これらのイメージも、信頼性やセキュリティが一定レベルで保証されています。商用ソフトウェアのコンテナ版を探す際に便利です。
- Docker Hub上で特別なバッジ(Verified Publisher)が付いています。
-
コミュニティイメージ (Community Images):
- 上記以外の、Docker Hubユーザーによって公開されたすべてのイメージです。非常に多くの種類があり、特定の用途に特化したイメージや、ニッチなソフトウェアのイメージが見つかることもあります。
- 公式イメージや認証済みパブリッシャーイメージとは異なり、その品質、セキュリティ、信頼性はユーザー自身が判断する必要があります。玉石混交であるため、利用には注意が必要です(詳細は後述)。
これらの基本概念を頭に入れておくと、Docker Hubでのイメージ検索や利用がスムーズになります。
2. Docker Hubアカウントの作成
Docker Hubの多くのイメージは、アカウントがなくても検索・プル(ダウンロード)して利用できます。しかし、自分の作成したイメージを公開したり、非公開リポジトリを利用したり、あるいはイメージに「スター」を付けてお気に入りを管理したりするためには、Docker Hubアカウントが必要です。アカウント作成は無料です。
アカウント作成のステップ:
- Docker Hubのウェブサイト(
https://hub.docker.com/
)にアクセスします。 - 右上の「Sign Up」ボタンをクリックします。
- ユーザー名 (Docker ID)、Eメールアドレス、パスワードを入力します。ユーザー名は後でリポジトリ名のの一部(
ユーザー名/リポジトリ名
)として使われるため、慎重に選びましょう。 - 利用規約とプライバシーポリシーに同意するチェックボックスにチェックを入れます。
- 「Sign Up」ボタンをクリックします。
- 登録したEメールアドレスに確認メールが送信されます。メール内のリンクをクリックして、Eメールアドレスを確認します。
- これでアカウント作成は完了です。ログインできるようになります。
無料プランと有料プラン:
無料アカウントでは、公開リポジトリの数に制限はありませんが、非公開リポジトリは1つまでという制限があります(プラン改定により変更される可能性があります)。個人で非公開にしたいイメージが多い場合や、組織で利用する場合は、有料プランを検討する必要があります。
セキュリティ対策:
アカウントのセキュリティは非常に重要です。強力なパスワードを設定し、可能であれば二要素認証(2FA)を有効にすることをおすすめします。2FAを設定することで、パスワードが漏洩した場合でも不正ログインのリスクを低減できます。Docker Hubの「Account Settings」から設定可能です。
3. Docker Hub Webサイトでのイメージ探し方
最も手軽にコンテナイメージを探す方法は、Docker Hubのウェブサイトを利用することです。視覚的に情報を確認しながらイメージを選ぶことができます。
ウェブサイトの基本構造:
Docker Hubのトップページには、検索バーがあり、その下に人気のある公式イメージなどが表示されています。
検索バーの使い方:
ページ上部にある検索バーに、探したいソフトウェアや環境の名前を入力して検索します。例えば、「nginx」、「redis」、「ubuntu」、「python」、「mysql」といったキーワードです。
検索結果の見方:
検索を実行すると、一致するリポジトリのリストが表示されます。各検索結果エントリには、以下の情報が含まれています。
- リポジトリ名 (Repository Name): イメージの名前。公式イメージはユーザー名なし(例:
nginx
)、コミュニティイメージはユーザー名/リポジトリ名の形式(例:myuser/my-image
)で表示されます。 - 説明 (Description): イメージの簡単な説明。この説明から、そのイメージが何を提供しているのか、大まかに把握できます。公式イメージや人気のイメージは分かりやすい説明が付いていることが多いです。
- スター数 (Stars): そのリポジトリをお気に入り登録しているユーザーの数。スター数が多いほど、多くの人に利用されている、あるいは評価されているイメージである可能性が高いです。イメージの人気や信頼性を測る一つの目安になります。
- プル数 (Pulls): そのリポジトリからイメージがプル(ダウンロード)された総回数。プル数もイメージの利用頻度を示す重要な指標です。非常に多いプル数は、そのイメージが広く使われていることを意味します。
- 公式/認証済みバッジ (Official/Verified Publisher): そのイメージが公式イメージまたは認証済みパブリッシャーイメージであるかを示すバッジ。信頼性の高いイメージを探す際の重要な目印です。
検索結果のフィルタリング:
検索結果の左側には、フィルタリングオプションが表示されることがあります。これにより、結果を絞り込むことができます。よく使われるフィルタリングオプションは以下の通りです。
- Categories: 公式イメージ、認証済みパブリッシャーイメージ、コミュニティイメージで絞り込めます。
- Operating System/Architecture: イメージがサポートするOS(Linux, Windows)やアーキテクチャ(amd64, arm64など)で絞り込めます。特定の環境で実行したい場合に便利です。
- Publisher Type: 公式または認証済みパブリッシャーで絞り込めます。
信頼性の高いイメージを探している場合は、まず「Official Images」や「Verified Publisher」でフィルタリングしてみるのがおすすめです。
リポジトリ詳細ページの見方:
検索結果から特定のリポジトリをクリックすると、そのリポジトリの詳細ページが表示されます。このページは、そのイメージについてさらに詳しく知るための重要な情報源です。
詳細ページにはいくつかのタブがあります。
- Overview (または Description):
- リポジトリの概要と詳細な説明(READMEファイルの内容)が表示されます。
- 最も重要な情報源です! イメージの使い方、設定方法、永続化の方法、利用可能なタグ、バージョン情報、ビルド方法、ソースコードへのリンク、メンテナー情報、非推奨になったタグやバージョンに関する情報などが記載されています。
- 公式イメージの場合、非常に丁寧に書かれていることが多いです。初めて使うイメージの場合は、必ずこのセクションをしっかり読み込みましょう。特に、「How to use this image」や「Configuration」、「Data Persistence」といった項目は重要です。
- Readmeに記載されている内容を理解せずにイメージを利用すると、意図しない挙動になったり、重要なデータが失われたりする可能性があります。
- Tags:
- そのリポジトリに含まれるすべてのタグのリストが表示されます。
- タグごとに、イメージのID、サイズ、最終更新日時、どのアーキテクチャをサポートしているか(multi-arch imageか)などの情報が表示されます。
- 特定のバージョンのイメージを使いたい場合は、このタブで該当するタグを探します。
latest
タグがどのイメージIDを指しているか、ここで確認することもできます。- 古いタグや非推奨のタグも表示されていることがあるため、最新の安定版を使いたい場合は、Readmeの情報を参照しながら適切なタグを選びましょう。
- Collaborators (非公開の場合など):
- リポジトリの共同作業者や設定に関する情報(自分で作成したリポジトリの場合)。
イメージ選択のポイント (Webサイトでの情報から):
Docker Hub Webサイトでイメージを探す際、以下の点を考慮してイメージを選択すると良いでしょう。
- 公式イメージまたは認証済みパブリッシャーイメージを優先する: 信頼性、セキュリティ、メンテナンスの観点から、可能な限りこれらを選びましょう。
- スター数とプル数を参考にする: コミュニティイメージの場合、これらの数が多いイメージは、多くの人に利用されており、比較的安定している可能性が高いです。ただし、これだけでセキュリティや品質が保証されるわけではありません。
- Description/Readmeを熟読する: イメージの目的、使い方、設定方法、制約などが詳細に記載されています。自分の要件に合っているか、想定通りの使い方ができるかを確認しましょう。Readmeが充実しているイメージは、丁寧にメンテナンスされている傾向があります。
- Tagsを確認し、適切なバージョンを選ぶ:
latest
タグは常に最新であるとは限りません。特定の機能が必要だったり、安定性を重視したりする場合は、バージョン番号などの具体的なタグを指定して利用しましょう。Readmeに推奨されるタグが記載されていることもあります。 - 最終更新日時を確認する: 定期的に更新されているイメージは、セキュリティパッチやバグ修正が適用されている可能性が高く、より安全です。
4. コマンドラインでのイメージ探し方 (docker search)
Dockerコマンドラインツールを使っても、Docker Hub上のイメージを検索できます。開発中にターミナルから手軽に検索したい場合に便利です。
docker search
コマンドの基本:
ターミナルを開き、以下の形式でコマンドを実行します。
bash
docker search [オプション] キーワード
例:
bash
docker search nginx
このコマンドは、Docker Hub上で「nginx」に関連するイメージを検索し、結果を一覧表示します。
検索結果の見方:
docker search
の結果は、以下のような列形式で表示されます。
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
nginx Official build of Nginx. 16318 [OK]
linuxserver/nginx A reverse proxy container... 1026 [OK]
jwilder/nginx-proxy Automated nginx proxy for docker... 13657 [OK]
richarvey/nginx-php-fpm Nginx with PHP-FPM 1006 [OK]
...
- NAME: リポジトリ名です。公式イメージはユーザー名なし、コミュニティイメージは
ユーザー名/リポジトリ名
の形式です。 - DESCRIPTION: イメージの簡単な説明です(Webサイトの検索結果と同じもの)。
- STARS: スター数です(Webサイトと同じ)。
- OFFICIAL: 公式イメージであれば
[OK]
と表示されます。そうでなければ空欄です。 - AUTOMATED: Automated Buildで作成されたイメージであれば
[OK]
と表示されます。Automated Buildは、GitHubやBitbucketなどのソースコードリポジトリと連携し、Dockerfileの変更をフックに自動的にイメージをビルド・プッシュする機能です。[OK]
が付いているイメージは、そのビルドプロセスがある程度透明である(Dockerfileへのリンクがあることが多い)ことを示唆しますが、セキュリティや品質を保証するものではありません。
docker search
のオプション:
docker search
コマンドには、検索結果を絞り込むためのオプションがあります。最もよく使うのは --filter
オプションです。
--filter "stars=N"
: 指定した数 (N) 以上のスター数を持つイメージに絞り込みます。人気のあるイメージを探したい場合に便利です。
例:docker search --filter "stars=1000" ubuntu
(スター数が1000以上のUbuntu関連イメージを検索)--filter "is-official=true"
: 公式イメージのみに絞り込みます。信頼性の高いイメージを探す際に有効です。
例:docker search --filter "is-official=true" mysql
(公式のMySQLイメージを検索)--filter "is-automated=true"
: Automated Buildで作成されたイメージのみに絞り込みます。
例:docker search --filter "is-automated=true" myapp
複数のフィルタを組み合わせることも可能です。
例: docker search --filter "stars=500" --filter "is-official=false" webserver
(スター数が500以上で、公式ではないWebサーバー関連イメージを検索)
Webサイト検索とコマンドライン検索の比較:
- Webサイト検索:
- メリット: 視覚的に分かりやすく、リポジトリの詳細情報(Readme, 全タグリストなど)にアクセスしやすい。カテゴリやOS/Archでのフィルタリングが可能。
- デメリット: 検索結果がコマンドラインに比べて簡潔。ターミナルから離れる必要がある。
- コマンドライン検索 (
docker search
):- メリット: ターミナルから直接検索できるため、開発ワークフローに組み込みやすい。スター数や公式フラグで簡単にフィルタリングできる。
- デメリット: 表示される情報が限定的(説明が短い、タグリストが見れない)。詳細情報を確認するには結局Webサイトを見る必要がある。
どちらの方法も一長一短があるため、状況に応じて使い分けると良いでしょう。手っ取り早く探すなら docker search
、詳細な情報を確認して慎重に選びたい場合はWebサイト、という使い分けが一般的です。
5. Dockerイメージの使い方:プルと実行の基本
探し出したイメージを使うためには、まずそのイメージをDockerを実行している環境(Docker Engine)にダウンロードし、その後そのイメージからコンテナを起動する必要があります。
イメージのプル (Pull):
イメージをDocker Hubからダウンロードすることを「プル」と言います。docker pull
コマンドを使います。
bash
docker pull [リポジトリ名]:[タグ]
- リポジトリ名が必要です。公式イメージは
nginx
のようにユーザー名なし、コミュニティイメージはユーザー名/リポジトリ名
の形式です。 - タグは省略可能です。省略した場合、デフォルトで
latest
タグが使用されます。特定のバージョンを使いたい場合は、必ずタグを指定しましょう(例:nginx:1.21.4
)。
例: 公式のNginxイメージの最新版をプル
bash
docker pull nginx
例: 公式のUbuntuイメージの18.04 LTS版をプル
bash
docker pull ubuntu:18.04
例: あるコミュニティイメージの最新版をプル
bash
docker pull myuser/my-image
docker pull
を実行すると、イメージを構成する各レイヤーがダウンロードされます。既にローカルに同じレイヤーが存在する場合は、ダウンロードがスキップされるため効率的です。
プルが完了すると、そのイメージはローカルのDocker環境に保存されます。ローカルにあるイメージのリストは docker images
コマンドで確認できます。
bash
docker images
イメージの実行 (Run):
プルしたイメージからコンテナを起動することを「実行」または「ラン」と言います。docker run
コマンドを使います。
bash
docker run [オプション] [リポジトリ名]:[タグ] [実行するコマンド] [コマンドの引数]
docker run
コマンドは非常に多くのオプションを持ちますが、ここでは基本的な使い方を説明します。- リポジトリ名とタグの指定方法は
docker pull
と同じです。タグを省略するとlatest
が使われます。 [実行するコマンド] [コマンドの引数]
は、そのコンテナ内で最初に実行したいコマンドを指定します。多くのイメージ(特にアプリケーションサーバーやデータベースなど)は、Dockerfile内でデフォルトのコマンド(ENTRYPOINTやCMD)が指定されているため、ここでのコマンド指定は省略可能です。ベースイメージ(例: Ubuntu)を使う場合は、シェルコマンドなどを指定してコンテナ内で対話的に操作することが多いです。
イメージがローカルにない場合の docker run
:
docker run
コマンドは、実行しようとしているイメージがローカルに存在しない場合、自動的にDocker Hub(または設定されたレジストリ)からそのイメージをプルしようとします。そのため、通常は docker pull
を事前に実行する必要はありません。ただし、ネットワークが不安定な場合や、イメージが存在しない場合に備えて、事前に docker pull
でダウンロードしておくこともあります。
例: 公式のUbuntuイメージからコンテナを起動し、ls
コマンドを実行
bash
docker run ubuntu ls /
このコマンドは、Ubuntuイメージをプル(ローカルになければ)し、そこからコンテナを起動し、コンテナ内で /
ディレクトリの中身をリストする ls /
コマンドを実行します。コマンド実行後、コンテナは停止します。
例: 公式のNginxイメージからコンテナを起動
bash
docker run nginx
このコマンドは、Nginxイメージをプル(ローカルになければ)し、そこからコンテナを起動します。NginxイメージにはデフォルトでNginxサーバーを起動するコマンドが設定されているため、何も指定しなくてもNginxが起動します。しかし、このままではブラウザからアクセスできませんし、コンテナがフォアグラウンドで実行されるため、ターミナルが専有されてしまいます。
よく使う docker run
オプション:
コンテナを便利に、あるいは実用的に使うためには、様々なオプションを組み合わせる必要があります。
-d
(detached mode): コンテナをバックグラウンドで実行します。ターミナルが解放され、他の作業ができるようになります。Webサーバーやデータベースなどのサービスを起動する場合に必須のオプションです。
例:docker run -d nginx
-p ホストポート:コンテナポート
(publish ports): ホストマシン(Dockerを実行しているマシン)のポートとコンテナのポートを関連付けます。これにより、ホストマシン経由でコンテナ内のサービスにアクセスできるようになります。
例:docker run -d -p 8080:80 nginx
(ホストの8080ポートへのアクセスを、コンテナの80ポート(Nginxがデフォルトでリッスンするポート)に転送する)-v ホストパス:コンテナパス
または-v ボリューム名:コンテナパス
(volumes): ホストマシン上のディレクトリやDockerボリュームをコンテナ内のパスにマウントします。これにより、コンテナが停止・削除されてもデータが失われないようにしたり、ホスト側の設定ファイルをコンテナから利用したりできます。データ永続化や設定の変更に不可欠なオプションです。
例:docker run -d -p 8080:80 -v mydata:/usr/share/nginx/html nginx
(データをmydata
という名前付きボリュームに永続化)
例:docker run -d -p 8080:80 -v /my/nginx/conf:/etc/nginx nginx
(ホストの設定ファイルをマウント)--name コンテナ名
: コンテナに分かりやすい名前を付けます。名前を付けることで、コンテナの管理(停止、起動、削除など)がしやすくなります。名前を省略すると、Dockerがランダムな名前を付けます。コンテナ名はユニークである必要があります。
例:docker run -d --name my-web-server -p 8080:80 nginx
-it
(interactive and tty): インタラクティブモードと擬似TTYを割り当てます。主に、UbuntuやAlpineなどのベースイメージを使ってコンテナ内で対話的にシェル操作を行いたい場合に利用します。
例:docker run -it ubuntu /bin/bash
(Ubuntuコンテナを起動し、Bashシェルに入る)--rm
: コンテナ停止時に、そのコンテナを自動的に削除します。一時的なコンテナを実行する場合に便利です。
例:docker run --rm ubuntu ls /
(lsコマンド実行後にコンテナを削除)-e 変数名=値
(–env): コンテナ内で使用できる環境変数を設定します。多くのアプリケーションやデータベースイメージは、環境変数を使って設定を行います。
例:docker run -d --name my-db -e MYSQL_ROOT_PASSWORD=mysecretpassword mysql
(MySQLコンテナ起動時にrootパスワードを設定)--network ネットワーク名
: コンテナを特定のDockerネットワークに接続します。複数のコンテナを連携させる場合に重要です。
6. 具体的なイメージを使った使い方(公式イメージの例)
Docker Hubの公式イメージは非常に質が高く、多くのシナリオで利用できます。いくつかの代表的なイメージを例に、その基本的な使い方と注意点を見ていきましょう。これらの例は、Docker Hubの詳細ページ(Overviewタブ、Readme)に記載されている内容に基づいています。利用する際は、必ず公式ドキュメント(Readme)の最新情報を参照してください。
例1: Nginx (Webサーバー)
Webサーバーとして広く使われているNginxのイメージです。静的なHTMLファイルを配信したり、リバースプロキシとして使ったりできます。
- イメージ名:
nginx
(公式) - 使い方:
- デフォルト設定で起動(コンテナ内80番ポートでListen)。ホストの8080ポートにマッピング。
bash
docker run -d --name my-nginx -p 8080:80 nginx
ホストマシンのブラウザからhttp://localhost:8080/
にアクセスすると、Nginxのデフォルトページが表示されるはずです。 - 独自のHTMLファイルを配信する。ホストのHTMLファイルディレクトリをコンテナ内のデフォルト配信ディレクトリにマウントします。
bash
# 例: ホストの ~/my-html ディレクトリに index.html を置く
docker run -d --name my-nginx-custom -p 8080:80 -v ~/my-html:/usr/share/nginx/html nginx
~/my-html
内のindex.html
がhttp://localhost:8080/
で表示されます。 - 独自のNginx設定ファイルを使う。ホストの設定ファイルをコンテナ内の設定ファイルパスにマウントします。
bash
# 例: ホストの ~/my-nginx.conf をコンテナのデフォルト設定ファイルにマウント
docker run -d --name my-nginx-conf -p 8080:80 -v ~/my-nginx.conf:/etc/nginx/nginx.conf nginx
- デフォルト設定で起動(コンテナ内80番ポートでListen)。ホストの8080ポートにマッピング。
- 注意点: 設定ファイルをマウントする場合、元のコンテナ内のファイルシステム構造を理解している必要があります。公式イメージのReadmeには、推奨される設定ファイルのマウントパスが記載されています。
例2: Redis (インメモリデータストア)
高速なKey-Valueストアとして人気のRedisのイメージです。キャッシュ、セッションストア、メッセージブローカーなど多用途に使われます。
- イメージ名:
redis
(公式) - 使い方:
- デフォルト設定で起動(データはコンテナ内部に保存 – 非永続的)。
bash
docker run -d --name my-redis redis
この方法では、コンテナを削除するとデータも失われます。一時的なテスト目的以外では非推奨です。 - データを永続化して起動。名前付きボリュームを使ってデータをコンテナ外部に保存します。
bash
docker run -d --name my-redis-persistent -v redis_data:/data redis
redis_data
という名前付きボリュームが作成(または再利用)され、Redisのデータがそこに保存されます。コンテナを停止・削除してもボリュームは残り、新しいコンテナから同じボリュームをマウントすることでデータを引き継げます。 - パスワードを設定して起動。環境変数を使ってパスワードを設定します。
bash
docker run -d --name my-redis-secure -v redis_data:/data redis --requirepass "mysecretpassword"
認証が必要になります。アプリケーションから接続する際はこのパスワードを指定します。パスワードは環境変数REDIS_PASSWORD
で指定する方が一般的かもしれません。Readmeを確認してください。
bash
docker run -d --name my-redis-secure-env -v redis_data:/data -e REDIS_PASSWORD="mysecretpassword" redis
- デフォルト設定で起動(データはコンテナ内部に保存 – 非永続的)。
- 注意点: RedisはインメモリDBなので、メモリ使用量に注意が必要です。また、永続化の設定を正しく行わないと、データが失われるリスクがあります。AOFやRDBなどの永続化設定も、コンテナ起動時のコマンド引数や設定ファイルのマウントで指定できます。
例3: MySQL / PostgreSQL (リレーショナルデータベース)
最もよく使われるリレーショナルデータベースのイメージです。
- イメージ名:
mysql
またはpostgres
(公式) - 使い方 (MySQLの例):
- rootパスワードを設定して起動(データ非永続化)。
bash
# 非推奨!テスト以外では使わないでください
docker run -d --name my-mysql -e MYSQL_ROOT_PASSWORD=mysecretpassword mysql
この方法ではデータが永続化されません。 - rootパスワードを設定し、データを永続化して起動。名前付きボリュームを使います。
bash
docker run -d --name my-mysql-persistent -v mysql_data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=mysecretpassword mysql
mysql_data
ボリュームにデータが永続化されます。 - 初期データベース、ユーザーを作成して起動。環境変数を使います。
bash
docker run -d --name my-mysql-init -v mysql_data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=mysecretpassword \
-e MYSQL_DATABASE=myapp_db \
-e MYSQL_USER=myapp_user \
-e MYSQL_PASSWORD=myapp_password \
mysql
コンテナ起動時に指定した名前のデータベースとユーザーが作成されます。
- rootパスワードを設定して起動(データ非永続化)。
- 注意点: データベースイメージはデータ永続化が最も重要です。必ずボリュームをマウントしてデータを永続化してください。環境変数による初期設定は非常に便利ですが、本番環境ではパスワードなどの機密情報を環境変数で渡すのはセキュリティリスクを伴う場合があります。secrets管理などの代替手段も検討が必要です。MySQLとPostgreSQLで使える環境変数や設定方法は異なりますので、それぞれの公式イメージのReadmeを必ず参照してください。
例4: Ubuntu / Alpine (ベースイメージ)
特定のアプリケーションではなく、OS環境自体が必要な場合に使われる軽量なベースイメージです。
- イメージ名:
ubuntu
またはalpine
(公式) - 使い方:
- コンテナを起動してインタラクティブにシェルに入る。
bash
docker run -it ubuntu /bin/bash
# または
docker run -it alpine /bin/sh
これにより、コンテナ内部に入り、コマンドを実行したり、ファイルを操作したりできます。コンテナ環境でのテストやデバッグに便利です。exit
と入力するかシェルを終了すると、コンテナも停止(--rm
オプションがあれば削除)します。 - 特定のコマンドを実行して終了。
bash
docker run --rm ubuntu apt update && apt upgrade -y
これは、Ubuntuコンテナを一時的に起動し、パッケージリストを更新してアップグレードを実行し、完了したらコンテナを削除する例です。このような使い方は、スクリプトやCI/CDパイプラインで特定のツールを実行したい場合などに便利です。
- コンテナを起動してインタラクティブにシェルに入る。
- 注意点: ベースイメージ自体は最小限のツールしか含まれていません。必要なパッケージは自分でインストールする必要があります(例:
apt-get install
やapk add
)。開発やテスト用途には便利ですが、本番アプリケーションをデプロイする場合は、より軽量で専用にビルドされたイメージを使う方が効率的です。
例5: Python / Node.js / Java (言語ランタイムイメージ)
特定のプログラミング言語の実行環境が含まれているイメージです。アプリケーションのコードを実行するために使用します。
- イメージ名:
python
、node
、openjdk
など (公式) -
使い方 (Pythonの例):
- Pythonスクリプトをコンテナ内で実行する。ホストマシンのスクリプトファイルをコンテナ内にマウントまたはコピーします。
bash
# 例: ホストの ~/my-python-app/app.py を実行
# app.py: print("Hello from Docker!")
docker run --rm -v ~/my-python-app:/app -w /app python:3.9 python app.py
-v ~/my-python-app:/app
: ホストの~/my-python-app
ディレクトリをコンテナ内の/app
にマウントします。
-w /app
: コンテナ内で実行されるコマンドの作業ディレクトリを/app
に設定します。
python app.py
: コンテナ内で実行するコマンドです。マウントしたディレクトリ内のapp.py
が実行されます。 - インタラクティブにPythonを実行する。
bash
docker run -it --rm python:3.9
PythonのREPL(対話型実行環境)が起動します。
- Pythonスクリプトをコンテナ内で実行する。ホストマシンのスクリプトファイルをコンテナ内にマウントまたはコピーします。
-
注意点: 言語ランタイムイメージには様々なバージョンやバリエーション(例:
python:3.9-slim
,node:16-alpine
,openjdk:11-jre-slim
)があります。必要なライブラリやOS環境、イメージサイズなどを考慮して適切なタグを選択することが重要です。特に、アプリケーションに必要な依存関係(ライブラリ)は、通常Dockerfileを使ってイメージビルド時にインストールします。上記の例は一時的なテストやスクリプト実行に適しています。
7. イメージのタグ付けとプッシュ(自作イメージの共有)
自分で作成したDockerイメージをDocker Hubにアップロード(プッシュ)して共有したり、他の環境から利用したりすることができます。
イメージの作成 (docker build
):
イメージは通常、Dockerfileというテキストファイルにビルド手順を記述し、docker build
コマンドで作成します。Dockerfileの書き方自体は別のテーマですが、ここではビルド後の手順に焦点を当てます。
例: カレントディレクトリにあるDockerfileを使ってイメージをビルド
bash
docker build -t my-local-image .
-t my-local-image
: 作成するイメージに my-local-image
という名前とタグを付けます。デフォルトではタグは latest
になります。
.
: Dockerfileがあるビルドコンテキスト(ディレクトリ)を指定します。
ビルドに成功すると、ローカルに my-local-image:latest
というイメージが作成されます。
イメージのタグ付け (docker tag
):
Docker Hubにプッシュするためには、イメージ名が [ユーザー名または組織名]/[リポジトリ名]:[タグ]
の形式である必要があります。docker tag
コマンドを使って、ローカルのイメージにこの形式のタグを付けます。
bash
docker tag [ローカルイメージ名]:[ローカルタグ] [Docker Hubリポジトリ名]:[タグ]
[ローカルイメージ名]:[ローカルタグ]
: タグを付けたい既存のローカルイメージを指定します。[Docker Hubリポジトリ名]:[タグ]
: Docker Hubにプッシュしたい形式の名前とタグを指定します。[ユーザー名または組織名]
はあなたのDocker IDまたは所属する組織名です。[リポジトリ名]
はDocker Hub上で作成したい(または既に作成している)リポジトリの名前です。[タグ]
はそのイメージのバージョンなどを示すタグです。
例: ローカルの my-local-image:latest
に、自分のDocker Hubリポジトリ myuser/my-app
の v1.0
というタグを付ける
bash
docker tag my-local-image:latest myuser/my-app:v1.0
これで、ローカルに myuser/my-app:v1.0
というタグを持つイメージができます。このイメージは my-local-image:latest
と同じイメージIDを指しています。
Docker Hubへのログイン (docker login
):
イメージをプッシュする前に、Docker Hubにログインする必要があります。
bash
docker login
このコマンドを実行すると、Docker Hubのユーザー名(Docker ID)とパスワードの入力を求められます。入力した認証情報は暗号化されてローカルに保存され、以降の docker push
コマンドで利用されます。ログアウトするには docker logout
コマンドを使います。
イメージのプッシュ (docker push
):
タグ付けしたイメージをDocker Hubにアップロードします。
bash
docker push [Docker Hubリポジトリ名]:[タグ]
例: 先ほどタグ付けした myuser/my-app:v1.0
をプッシュする
bash
docker push myuser/my-app:v1.0
プッシュが開始されると、イメージを構成するレイヤーがアップロードされます。既にDocker Hubに存在するレイヤーはスキップされます。完了すると、あなたのDocker Hubアカウントの myuser/my-app
リポジトリに v1.0
タグのイメージが登録されます。
タグを指定せずに docker push myuser/my-app
と実行すると、デフォルトで latest
タグのイメージがプッシュされます(ローカルに myuser/my-app:latest
というイメージが存在する場合)。
公開リポジトリと非公開リポジトリ:
Docker Hubで新しいリポジトリを作成する際、公開 (Public) または非公開 (Private) を選択できます。
- 公開リポジトリ: 誰でも検索、表示、プルできます。オープンソースソフトウェアの公開などに適しています。無料アカウントでも無制限に作成できます。
- 非公開リポジトリ: アカウント所有者や、アクセス権を付与されたユーザーだけが検索、表示、プルできます。企業のプライベートなアプリケーションイメージの保管などに適しています。無料アカウントでは作成数に制限があります(通常1つ)。
自作イメージをプッシュする前に、Docker HubのWebサイトでプッシュ先のリポジトリ(公開か非公開か)を作成しておく必要があります。
8. イメージのセキュリティと信頼性
Docker Hubは非常に便利ですが、そこに公開されているすべてのイメージが安全であるとは限りません。特にコミュニティイメージを利用する際は、セキュリティと信頼性に十分注意が必要です。
公式イメージと認証済みパブリッシャーイメージの信頼性:
これらはDocker社や提携企業によって管理されており、一定の品質・セキュリティ基準を満たしています。しかし、これらであっても脆弱性が発見される可能性はゼロではありません。定期的な更新が行われているか、常に最新の安定版を利用しているかなどを確認することが重要です。公式イメージの多くは、Dockerfileが公開されており、どのようにビルドされているかを確認できます。
コミュニティイメージのリスク:
コミュニティイメージは誰でも自由に公開できるため、以下のようなリスクがあります。
- セキュリティ脆弱性: 古いバージョンのソフトウェアが含まれていたり、セキュリティパッチが適用されていなかったりする可能性があります。
- マルウェア/悪意のあるコード: イメージ内に意図的にマルウェアやバックドアが仕込まれている可能性があります。
- 信頼性/品質: 適切にメンテナンスされていなかったり、ドキュメントが不十分だったり、ビルドプロセスが不安定だったりすることがあります。
- 非効率性: 不要なファイルやライブラリが含まれており、イメージサイズが不必要に大きかったり、非効率なビルド手順で作成されていたりすることがあります。
安全なイメージ利用のためのチェックポイント:
コミュニティイメージ、あるいは公式/認証済みであっても、特に本番環境で利用するイメージを選択する際は、以下の点をチェックしましょう。
- 公式または認証済みか: 可能であればこれらを優先します。
- ソースを確認する: Docker Hubのリポジトリ詳細ページから、ビルドに使われたDockerfileやソースコードへのリンクがないか確認します。Dockerfileを読むことで、イメージがどのようにビルドされているか、どのようなソフトウェアが含まれているかを透明性高く確認できます。
- Readmeを熟読する: 使い方の他に、ビルドプロセス、含まれるソフトウェアのバージョン、既知の問題点、セキュリティに関する記載などがないか確認します。
- スター数とプル数: 人気があるイメージは、多くの人の目に触れており、問題が発見されやすい傾向にあります。ただし、人気だけを鵜呑みにせず、他の要素と合わせて判断します。
- 最終更新日時: 定期的に更新されているイメージは、積極的にメンテナンスされている可能性が高いです。古いイメージはセキュリティリスクが高まります。
- コミュニティの活動: Issuesトラッカーやフォーラムなどへのリンクがあれば、活発に開発が行われているか、ユーザーからのフィードバックに対応しているかなどを確認します。
- 不要な権限やツールが含まれていないか: イメージに必要以上に多くのツールや、root権限での実行がデフォルトになっていないか確認します。必要最小限の構成(最小権限の原則)が望ましいです。Alpine Linuxベースのイメージなどが軽量で攻撃対象が少ないため好まれることがあります。
- 脆弱性スキャン: Docker Scan (Snyk連携) や Clair, Trivy といったツールを使って、イメージに含まれるソフトウェアの既知の脆弱性をスキャンすることを強く推奨します。Docker Hubの有料プランには自動スキャン機能が含まれている場合があります。
これらのチェックを全て満たすイメージを見つけるのは難しいかもしれませんが、特に本番環境で使うイメージについては、可能な限り多くの項目を確認し、リスクを評価した上で利用することが重要です。
9. Docker Hubのその他の機能(簡単な紹介)
Docker Hubには、イメージの検索・プッシュ以外にもいくつかの機能があります。
- Automated Builds:
- GitHub, Bitbucket, GitLabなどのソースコードリポジトリと連携し、DockerfileがコミットされるたびにDocker Hub上で自動的にイメージをビルドする機能です。
- これにより、イメージのビルドプロセスを自動化し、ソースコードとイメージの一貫性を保つことができます。ユーザーはDockerfileを見れば、どのようなイメージがビルドされるか確認できるため、透明性が高まります。
- Dockerfileの場所やタグ付けルールを設定できます。
- Webhooks:
- イメージがプッシュされたり、Automated Buildが完了したりした際に、指定したURLに通知(HTTP POSTリクエスト)を送信する機能です。
- これにより、イメージの更新をトリガーにして、デプロイメントを自動的に実行するといった連携が可能です。
- Organizations:
- 複数のユーザーでリポジトリを共有・管理するための機能です。チームや企業でDocker Hubを利用する場合に使われます。
- チームを作成し、各ユーザーにリポジトリへのアクセス権限(読み取り、書き込み、管理者)を付与できます。
これらの機能は、より高度なDockerワークフローを構築する際に役立ちます。
10. トラブルシューティング:よくある問題と解決策
Docker Hubを利用したり、そこからプルしたイメージを使ったりする際に遭遇しがちなトラブルと、その一般的な解決策をいくつかご紹介します。
docker pull
が遅い、または失敗する:- 原因: ネットワーク接続の問題、Docker Hub側の問題、プロキシ設定の問題など。
- 解決策:
- インターネット接続が安定しているか確認します。
- しばらく待ってから再度試します。一時的な問題である可能性があります。
- Dockerデーモンの設定でプロキシが正しく設定されているか確認します(企業内ネットワークなどの場合)。
- 他のイメージをプルできるか試して、問題が特定のイメージにあるのか、Docker環境全体にあるのかを切り分けます。
- Docker Hubのステータスページを確認し、サービス障害が発生していないか確認します。
docker run
がエラーになる(コンテナがすぐに終了するなど):- 原因: 指定したコマンドがコンテナ内に存在しない、コマンドのシンタックスエラー、コンテナ内のアプリケーション起動失敗(設定間違い、ポート衝突、依存関係不足など)、リソース不足(メモリ、CPU)など。
- 解決策:
- コンテナのログを確認します。
docker logs [コンテナ名またはID]
コマンドを実行して、コンテナが終了した理由や、アプリケーションのエラーメッセージを確認します。これがトラブルシューティングの第一歩です。 docker inspect [コンテナ名またはID]
コマンドでコンテナの詳細設定を確認し、意図した通りにオプションが適用されているか確認します。- コンテナ内でインタラクティブにシェルに入り(
docker run -it イメージ名 /bin/bash
またはdocker exec -it コンテナ名 /bin/bash
)、手動でアプリケーションやコマンドを実行してみて、エラーが発生しないか、必要なファイルが存在するかなどを確認します。 - イメージのReadmeを再確認し、使い方や設定方法に誤りがないか確認します。特に、必須の環境変数や設定ファイルのマウントなどが不足していないかチェックします。
- ポート衝突の可能性:
-p
オプションで指定したホストポートが既に使用されていないか確認します。netstat
コマンドなどで確認できます。 - ボリュームの問題:
-v
オプションで指定したパスやボリューム名が正しいか、権限の問題がないか確認します。 - リソース不足:Dockerデスクトップの設定などで、Dockerに割り当てられているメモリやCPUが十分か確認します。
- コンテナのログを確認します。
docker login
またはdocker push
で認証エラーになる:- 原因: ユーザー名またはパスワードの間違い、二要素認証(2FA)の設定ミス、ネットワークの問題など。
- 解決策:
- ユーザー名とパスワードを再度正確に入力します。
- 二要素認証を設定している場合、認証コードを正しく入力しているか確認します。認証アプリやSMSの時刻同期がずれていないか確認します。
- 一時的にログインできるかWebサイトで確認してみます。
- パスワードマネージャーなどを使っている場合、コピー&ペーストに問題がないか確認します。
- Docker Hubアカウントがロックされていないか確認します。
- 特定のタグが見つからない (
Tag does not exist
):- 原因: 指定したリポジトリ名やタグが間違っている、そのタグのイメージが削除された、まだプッシュされていないなど。
- 解決策:
- Docker HubのWebサイトでリポジトリを検索し、Tagsタブで指定したいタグが実際に存在するか確認します。
- リポジトリ名やタグのスペルミスがないか再確認します。
これらのトラブルシューティングは一般的なものです。問題が解決しない場合は、Dockerの公式ドキュメントや、利用しているイメージのドキュメント、Docker関連のコミュニティフォーラムなどを参照することをおすすめします。
11. まとめ:Docker Hubを使いこなすために
この記事では、Docker Hubとは何かという基本的な説明から始まり、コンテナイメージの概念、Docker Hubでのアカウント作成、そしてWebサイトおよびコマンドラインでのイメージの探し方、さらには docker pull
と docker run
を使ったイメージの具体的な利用方法、自作イメージのプッシュ方法、そしてセキュリティと信頼性に関する重要な考慮事項、よくあるトラブルシューティングまで、Docker Hubを効果的に活用するための情報を網羅的に解説しました。
Docker Hubは、コンテナ技術、特にDockerエコシステムの中核をなす非常に重要なサービスです。世界中の開発者が作成した膨大な数のコンテナイメージが公開されており、これらを活用することで、ソフトウェアの導入や開発環境の構築が劇的に効率化されます。
効果的なイメージ探しのポイントを再確認:
- 探しているソフトウェアや環境の公式イメージや認証済みパブリッシャーイメージが提供されていないか、まず確認しましょう。
- Webサイトの検索結果では、公式/認証済みバッジ、スター数、プル数などを参考に、イメージの人気度や信頼性を判断します。
- 最も重要なのは、リポジトリの詳細ページにあるReadmeです。イメージの正確な使い方、設定方法、永続化、利用可能なタグなどの詳細情報が記載されています。ここを熟読することが、イメージを安全かつ効果的に使うための鍵です。
- コミュニティイメージを利用する場合は、透明性(Dockerfileの公開など)やコミュニティの活動状況、最終更新日時などを確認し、可能な限り脆弱性スキャンツールを利用するなど、セキュリティリスクに十分注意しましょう。
安全なイメージ利用のために:
Docker Hubのイメージは「誰でも公開できる」という性質上、その品質や安全性が保証されているわけではありません。特に本番環境で利用する場合は、イメージの出所、ビルドプロセス、含まれるソフトウェアのバージョン、セキュリティ対策などを慎重に検討する必要があります。常に最新のセキュリティパッチが適用されたイメージを利用し、不要な機能が含まれていない軽量なイメージを選択することを心がけましょう。
次のステップへ:
この記事でDocker Hubからのイメージ利用の基本は網羅できたかと思います。次のステップとして、
- Dockerfileの書き方 を学び、自分でカスタマイズしたイメージを作成できるようになること。
- Docker Compose を使い、複数のコンテナを連携させて複雑なアプリケーションを定義・実行できるようになること。
- Dockerネットワーク や Dockerボリューム について深く理解し、コンテナ間通信やデータ永続化を適切に行えるようになること。
- コンテナのセキュリティ についてさらに学び、より安全なコンテナ運用を目指すこと。
などが考えられます。
Docker Hubは、あなたのコンテナジャーニーの強力な出発点となります。この記事が、Docker Hubの広大なイメージの世界を探索し、あなたの開発や運用の効率化に役立てるための一助となれば幸いです。コンテナ技術を楽しく学び、活用していきましょう!