はじめに
Dockerは、アプリケーションの構築、展開、管理の方法を革新的に変えた強力なコンテナ化プラットフォームです。Dockerエコシステムの重要なコンポーネントの1つは、Dockerイメージを保存および配布するためのリポジトリとして機能するDockerレジストリです。このチュートリアルでは、Dockerを構成して、プライベートおよびパブリックレジストリを含むさまざまなレジストリと連携させて、Dockerベースのアプリケーションを効果的に管理する方法を学びます。
💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください
Dockerは、アプリケーションの構築、展開、管理の方法を革新的に変えた強力なコンテナ化プラットフォームです。Dockerエコシステムの重要なコンポーネントの1つは、Dockerイメージを保存および配布するためのリポジトリとして機能するDockerレジストリです。このチュートリアルでは、Dockerを構成して、プライベートおよびパブリックレジストリを含むさまざまなレジストリと連携させて、Dockerベースのアプリケーションを効果的に管理する方法を学びます。
Dockerレジストリは、Dockerイメージが保存され、プルできる中央リポジトリです。これらは、開発者や組織がDockerイメージを共有、配布、管理できるようにするため、Dockerエコシステムの骨格となっています。このセクションでは、Dockerレジストリの基本、その目的、利用可能なレジストリの種類を探ります。
Dockerレジストリは、Dockerイメージを保存および配布するサービスです。これは、Dockerイメージがホストされ、ダウンロード可能になる集中的な場所として機能します。Dockerイメージを構築するとき、それをレジストリにプッシュできます。そして、他のユーザーやシステムは、そのイメージをレジストリからプルして使用できます。
Dockerレジストリには、主に2種類あります。
パブリックレジストリ:パブリックレジストリは、インターネット上の誰でもアクセスでき、一般的なコミュニティで維持されるDockerイメージの共有や配布によく使われます。最も有名なパブリックレジストリはDocker Hubで、これはDockerエンジンでデフォルトで使用されるレジストリです。
プライベートレジストリ:プライベートレジストリは、組織や個人によって所有および管理され、通常はアクセスが制限されます。組織内や限定されたユーザーグループ内で、カスタムの独自のDockerイメージを保存および配布するために使用されます。
Dockerレジストリとやり取りするには、docker
コマンドラインツールを使用できます。レジストリとの作業に使用する基本コマンドは次のとおりです。
docker pull <image>
:レジストリからDockerイメージをプルします。docker push <image>
:レジストリにDockerイメージをプッシュします。docker login <registry>
:Dockerレジストリに認証します。Dockerレジストリの基本を理解することで、Dockerイメージを効果的に管理して配布し、さまざまな環境で一貫性のある信頼性の高い展開を行うことができます。
Dockerベースのアプリケーションが増えるにつれて、パブリックおよびプライベートの両方の複数のDockerレジストリと協力する必要がある場合があります。このセクションでは、Dockerを構成して異なるレジストリとやり取りし、これらのレジストリ全体でDockerイメージを管理する方法を探ります。
Dockerデーモンは、複数のレジストリと協力するように構成できます。デフォルトでは、DockerはDocker Hubレジストリを使用しますが、Dockerデーモンの構成ファイルを変更することで追加のレジストリを構成できます。
Ubuntu 22.04では、Dockerデーモンの構成ファイルは/etc/docker/daemon.json
にあります。このファイルを編集して、追加のレジストリに必要な構成を追加できます。
daemon.json
の構成例:
{
"registry-mirrors": ["https://mirror.gcr.io", "https://registry.example.com"],
"insecure-registries": ["registry.example.com"]
}
この例では、2つのレジストリミラー(registry-mirrors
)と1つのインセキュアなレジストリ(insecure-registries
)を追加しました。構成ファイルを変更した後、変更を反映するにはDockerデーモンを再起動する必要があります。
sudo systemctl restart docker
プライベートレジストリにアクセスするには、それらに対して認証する必要があります。これは、レジストリURLを指定してdocker login
コマンドを使用することで行えます。
docker login registry.example.com
これにより、指定されたレジストリのユーザー名とパスワードを入力するように促されます。
あるいは、レジストリの資格情報をDockerクレデンシャルストアに保存することもできます。これにより、毎回資格情報を入力することなく、複数のレジストリに対して認証できます。
docker login -u myusername -p mypassword registry.example.com
Dockerを複数のレジストリと協力するように構成したら、これらのレジストリ全体でDockerイメージを管理できます。異なるレジストリでイメージを操作する基本コマンドは次のとおりです。
docker pull <registry>/<image>:<tag>
:特定のレジストリからイメージをプルします。docker push <registry>/<image>:<tag>
:特定のレジストリにイメージをプッシュします。複数のレジストリに対するDockerの構成方法と、これらのレジストリ全体でDockerイメージを管理する方法を理解することで、複雑な環境でDockerベースのアプリケーションを効果的に整理して配布できます。
このセクションでは、組織内でDockerレジストリを管理する際のいくつかの実際のシナリオとベストプラクティスを探ります。
多くの組織は、ダウンロード速度を向上させ、インターネット帯域幅の使用量を削減するために、Docker Hubなどのパブリックレジストリをミラー化することを好みます。これは、ローカルレジストリをセットアップし、それをミラーとして構成することで達成できます。
## ローカルレジストリを実行
docker run -d -p 5000:5000 --restart=always --name registry registry:2
## Dockerデーモンを構成して、ローカルレジストリをミラーとして使用する
echo '{"registry-mirrors": ["http://localhost:5000"]}' | sudo tee /etc/docker/daemon.json
sudo systemctl restart docker
これで、イメージをプルするとき、Dockerはパブリックレジストリから取得する前にまずローカルレジストリミラーを確認します。
アプリケーションが進化するにつれて、開発レジストリから本番レジストリなど、異なるレジストリ間でDockerイメージを昇格させる必要がある場合があります。これは、docker pull
コマンドとdocker push
コマンドを使用して達成できます。
## 開発レジストリからイメージをプル
docker pull dev-registry.example.com/my-app:v1
## イメージを本番レジストリ用にタグ付け
docker tag dev-registry.example.com/my-app:v1 prod-registry.example.com/my-app:v1
## イメージを本番レジストリにプッシュ
docker push prod-registry.example.com/my-app:v1
このワークフローにより、異なる環境とレジストリ間でDockerイメージのライフサイクルを管理できます。
プライベートレジストリを使用する際は、アクセスを適切にセキュアにすることが不可欠です。ロールベースのアクセス制御(RBAC)やイメージ脆弱性スキャニングなどの機能を使用して、プライベートレジストリのセキュリティを強化できます。
これらの実際のレジストリ管理シナリオを理解して実装することで、組織内でDockerイメージを効果的に整理、配布、セキュアにすることができます。
このチュートリアルが終わるとき、Dockerを複数のレジストリと連携させる方法をしっかりと理解しており、さまざまな環境でDockerベースのアプリケーションを効果的に管理および展開できるようになります。現実世界のレジストリ管理シナリオや、堅牢でセキュアなDockerインフラストラクチャを維持するためのベストプラクティスについて学ぶことができます。