最終更新
リンドくん
たなべ先生、Dockerイメージを作ったんですけど、これってどうやって他の人と共有すればいいんですか?
たなべ
それにはDocker Hubやプライベートレジストリが便利なんだよ。
GitHubでコードを共有するように、Dockerイメージも専用の場所で共有できるんだ。
HackATAは、エンジニアを目指す方のためのプログラミング学習コーチングサービスです。 経験豊富な現役エンジニアがあなたの学習をサポートします。
✓ 質問し放題
✓ β版公開中(2025年内の特別割引)
Dockerを使った開発を進めていくと、必ず直面するのが「作成したイメージをどうやって共有するか」という課題です。
ローカルで作ったDockerイメージを、チームメンバーや本番環境で使いたい。そんなとき活躍するのがDockerレジストリなのです。
Dockerレジストリとは、簡単に言えば「Dockerイメージを保存・配布するための倉庫」のようなものです。GitHubがソースコードの共有場所であるように、Dockerレジストリはコンテナイメージの共有場所として機能します。
レジストリには大きく分けて2種類あります。
今回の記事では、これらのレジストリの使い方を基礎から丁寧に解説していきます。Dockerイメージの共有方法を理解することで、チーム開発やCI/CD環境の構築がよりスムーズになりますよ。
リンドくん
Docker Hubって、よく聞くんですけど、具体的にどんなサービスなんですか?
たなべ
Docker HubはDockerイメージの公式レジストリサービスなんだ。
世界中の開発者が作成したイメージが公開されていて、誰でも自由に使えるんだよ。
Docker Hubは、Docker社が提供するパブリックなコンテナレジストリサービスです。無料プランでも基本的な機能を使うことができ、世界中の開発者に利用されています。
Docker Hubの主な特徴は以下の通りです。
実際、これまでdocker pull nginx
のようなコマンドでイメージを取得していたとき、実はDocker Hubからダウンロードしていたのです。
Docker Hubを使うには、まずアカウントを作成する必要があります。手順は非常に簡単です。
アカウントを作成したら、ローカルのDockerからログインしておきましょう。
ユーザー名とパスワードを入力すると、「Login Succeeded」と表示され、ログイン完了です。これで、Docker Hubにイメージをpushしたり、プライベートイメージをpullしたりできるようになります。
リンドくん
実際に自分で作ったイメージをDocker Hubに公開するにはどうすればいいんですか?
たなべ
イメージに適切な名前をつけてタグ付けしてから、docker push
コマンドで公開するんだ。手順を見ていこうか。
Docker Hubにイメージをpushする際は、特定の命名規則に従う必要があります。基本的な形式は以下の通りです。
例えば、ユーザー名がtanabe
で、Webアプリケーションのイメージを公開する場合は次のようになります。
実際の手順を見ていきましょう。まず、ローカルでDockerイメージを作成します。
このDockerfileからイメージをビルドし、適切な名前でタグ付けします。
複数のタグを付けることもできます。例えば、latest
タグも同時に付与する場合は以下のようにします。
Docker Hubでは、リポジトリごとに公開設定を変更できます。
無料プランでは、プライベートリポジトリは1つまで作成できます。組織やチームで使う場合は、有料プランを検討するのも良いでしょう。
公開されているイメージをダウンロードするのは非常に簡単です。
タグを省略すると、自動的にlatest
タグが使用されます。
プライベートリポジトリのイメージをpullする場合は、事前にログインが必要です。
ログインしていない状態でプライベートイメージをpullしようとすると、エラーが発生します。チームメンバーには、必ずDocker Hubのアカウントとリポジトリへのアクセス権限を付与しておきましょう。
リンドくん
Docker Hubは便利ですけど、会社のプロジェクトだと外部サービスに置くのは不安があります...
たなべ
その気持ち、よくわかるよ。そんなときに役立つのがプライベートレジストリなんだ。
自分たちで管理できるレジストリを構築できるんだよ。
プライベートレジストリを構築することで、以下のようなメリットがあります。
特に、企業での利用や、セキュリティ要件の厳しいプロジェクトでは、プライベートレジストリの構築が推奨されます。
Dockerは公式にregistry
というイメージを提供しており、これを使うことで簡単にプライベートレジストリを構築できます。最小限の設定で、すぐに使い始めることができるのが特徴です。
最もシンプルなプライベートレジストリの起動方法は以下の通りです。
これだけで、ローカルの5000番ポートでレジストリが起動します。ただし、この設定ではデータの永続化やセキュリティ設定がされていないため、本番環境での使用は推奨できません。
レジストリのデータを永続化するために、ボリュームをマウントしましょう。
これで、ホストマシンの/data/registry
ディレクトリにイメージデータが保存されるようになります。コンテナを削除しても、イメージデータは残り続けます。
より実践的な設定として、docker-composeを使った構築方法を紹介します。
起動は以下のコマンドで行います。
これで、バックグラウンドでレジストリが起動し、自動的に再起動する設定も有効になります。
プライベートレジストリにイメージをpushする際は、レジストリのアドレスを含めたタグ付けが必要です。
リモートのレジストリを使用する場合は、localhost
の部分をレジストリのホスト名やIPアドレスに置き換えます。
プライベートレジストリからイメージをpullするのも簡単です。
プライベートレジストリに保存されているイメージの一覧は、REST APIを使って確認できます。
これらのAPIを活用することで、レジストリの管理を自動化することもできます。
リンドくん
プライベートレジストリって、誰でもアクセスできちゃうんですか? セキュリティが心配です...
たなべ
鋭い指摘だね! 基本設定のままだと確かに問題があるんだ。
認証やHTTPS通信の設定をして、セキュアにしていく必要があるよ。
プライベートレジストリに基本的な認証を設定しましょう。まず、認証ファイルを作成します。
次に、認証を有効にしてレジストリを起動します。
認証が有効になったレジストリを使う際は、事前にログインが必要です。
本番環境では、必ずHTTPS通信を設定しましょう。SSL証明書が必要になります。
Let's Encryptなどの無料SSL証明書サービスを使うと、コストをかけずにHTTPS化できます。
セキュリティを高めるためには、イメージに脆弱性がないか定期的にスキャンすることが重要です。Docker Hubには自動スキャン機能がありますが、プライベートレジストリでも以下のようなツールを活用できます。
Trivyを使った基本的なスキャン方法は以下の通りです。
プライベートレジストリは、CI/CDパイプラインとの相性が抜群です。例えば、GitHub Actionsと組み合わせる場合は以下のようになります。
この設定により、mainブランチにpushされるたびに自動的にイメージがビルドされ、プライベートレジストリに保存されます。
イメージのタグ付けには、一定のルールを設けることをおすすめします。
latest
タグは便利ですが、本番環境では明示的なバージョンタグを使用することを推奨します。これにより、どのバージョンが動いているかが明確になり、問題発生時のロールバックも容易になります。
リンドくん
Docker Hubもプライベートレジストリもそれぞれメリットがあるんですね!
たなべ
そうなんだ! 公開したいならDocker Hub、セキュアに管理したいならプライベートレジストリという使い分けが基本だね。
プロジェクトの要件に合わせて選ぶことが大切だよ。
今回は、Docker Hubとプライベートレジストリの使い方について解説してきました。
重要なポイントをおさらいしましょう。
ユーザー名/リポジトリ名:タグ
という命名規則に従うregistry
イメージを使えば簡単にプライベートレジストリを構築可能Dockerイメージの共有と管理は、現代のソフトウェア開発において欠かせないスキルです。
小規模なプロジェクトではDocker Hubで十分かもしれませんが、チーム開発や企業での利用を考えると、プライベートレジストリの構築方法を知っておくことは非常に価値があります。
最初は少し難しく感じるかもしれませんが、一度セットアップしてしまえば、あとは日常的に使うだけです。
ぜひ実際に手を動かして、自分の環境にレジストリを構築してみてください。チーム開発の効率が格段に上がることを実感できるはずです。