独自のレジストリを使用する方法

Dockerプラットフォームを非常に強力にしていることの1つは、中央の場所から画像を簡単に使用できることです。 Docker Hub は、何千もの公式イメージがすぐに使用できる最高のイメージリポジトリです。 また、独自のイメージを Docker Hub レジストリにプッシュするのも同様に簡単で、誰もが Docker 化されたアプリケーションのメリットを享受できます。

ただし、特定のシナリオでは、イメージをファイアウォールの外側にプッシュしたくない場合があります。 この場合、オープンソースソフトウェアプロジェクトの Distributionを使用してローカルレジストリを設定できます。 この記事では、チームが既に知っている docker コマンドとイメージを共有できる Distribution プロジェクトのローカル インスタンスの設定と構成について説明します。 docker push docker pull

前提 条件

このチュートリアルを完了するには、次のものが必要です。

配布サービスの実行

ディストリビューションプロジェクトは、 Docker Hub の公式イメージとしてパッケージ化されています。 バージョンをローカルで実行するには、次のコマンドを実行します。

$ docker run -d -p 5000:5000 --name registry registry:2.7

このフラグは -d 、コンテナーをデタッチ モードで実行します。 このフラグは -p 、ローカルマシンのネットワーク上にポート5000を公開します。 また、フラグを使用してコンテナに名前を付けます --name 。 これらのフラグとコマンドのすべてのフラグの詳細については、 docker run ドキュメント を確認してください。

ローカルレジストリからのプッシュとプル

レジストリをローカルで実行できるようになったので、コンテナーのログを追跡して、イメージがローカルでプッシュおよびプルされていることを確認しましょう。

$ ドッカーログ -f レジストリ

別のターミナルを開き、Docker Hubから 公式のUbuntuイメージ を取得します。 以下の例では、この画像を使用します。

$ docker pull ubuntu

ローカルレジストリにプッシュまたはプルするには、レジストリの場所をリポジトリ名に追加する必要があります。 形式は次のとおりです。 my.registry.address:port/repositoryname

この例では、レジストリが my.registry.address.port ローカルホストで実行されており、ポート5000でリッスンしているため、に置き換える localhost:5000 必要があります。 完全なリポジトリ名は次のとおりです: localhost:5000/ubuntu。 これを行うには、 docker tag 次のコマンドを実行します。

$ docker tag ubuntu localhost:5000/ubuntu

これで、ローカルレジストリにプッシュできます。

$ docker push localhost:5000/ubuntu

手記:

Docker は "." のいずれかを検索します。(ドメイン区切り文字) または ":" (ポート区切り文字) を使用して、リポジトリ名の最初の部分がユーザー名ではなく場所であることを示します。 どちらの.localdomainも持たずにローカルホストを持っていた場合 または:5000(どちらでもかまいません)の場合、Dockerはローカルホスト/ ubuntuまたはサマルバ/ hipacheのように、ローカルホストがユーザー名であると信じます。 次に、Docker Hubであるデフォルトのレジストリにプッシュしようとします。 最初の部分にドットまたはコロンがあると、この名前にホスト名が含まれていること、および代わりに指定された場所にプッシュする必要があることをDockerに伝えます。

レジストリログが追跡されているターミナルに戻ります。 ログを確認すると、ubuntuイメージの保存要求を表示するエントリが表示されます。

...
172.17.0.1 - - [26/Feb/2021:18:10:57 +0000] "POST /v2/ubuntu/blobs/uploads/ HTTP/1.1" 202 0 "" "docker/20.10.2 go/go1.13.15 git-commit/8891c58 kernel/4.19.121-linuxkit os/linux arch/amd64 UpstreamClient(Docker-Client/20.10.2 \\(darwin\\))"

172.17.0.1 - - [26/Feb/2021:18:10:57 +0000] "POST /v2/ubuntu/blobs/uploads/ HTTP/1.1" 202 0 "" "docker/20.10.2 go/go1.13.15 git-commit/8891c58 kernel/4.19.121-linuxkit os/linux arch/amd64 UpstreamClient(Docker-Client/20.10.2 \\(darwin\\))"

172.17.0.1 - - [26/Feb/2021:18:10:57 +0000] "POST /v2/ubuntu/blobs/uploads/ HTTP/1.1" 202 0 "" "docker/20.10.2 go/go1.13.15 git-commit/8891c58 kernel/4.19.121-linuxkit os/linux arch/amd64 UpstreamClient(Docker-Client/20.10.2 \\(darwin\\))"
...

次に、イメージを削除して localhost:5000/ubuntu から、ローカルリポジトリからイメージをプルして、すべてが正しく機能していることを確認しましょう。

まず、ローカルにある画像のリストを印刷します。

$ docker images
REPOSITORY  TAG       IMAGE ID      CREATED           SIZE
registry    2.7       5c4008a25e05  40 hours ago      26.2MB
ubuntu      latest    f63181f19b2f  5 weeks ago       72.9MB
localhost:5000/ubuntu latest f63181f19b2f 5 weeks ago 72.9MB

次に、 localhost:5000/ubuntu:latest ローカルマシンからイメージを削除します。

$ docker rmi localhost:5000/ubuntu
Untagged: localhost:5000/ubuntu:latest
Untagged: localhost:5000/ubuntu@sha256:3093096ee188f8...8c091c8cb4579c39cc4e

画像が削除されていることを再確認しましょう。

$ docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
registry     2.7       5c4008a25e05   40 hours ago   26.2MB
ubuntu       latest    f63181f19b2f   5 weeks ago    72.9MB

最後に、ローカル レジストリからイメージをプルし、Docker のローカル インスタンスにプルされていることを確認します。

$ docker pull localhost:5000/ubuntu
Using default tag: latest
latest: Pulling from ubuntu
Digest: sha256:sha256:3093096ee188f8...8c091c8cb4579c39cc4e
Status: Downloaded newer image for localhost:5000/ubuntu:latest
localhost:5000/ubuntu:latest

$ docker images
REPOSITORY              TAG       IMAGE ID       CREATED        SIZE
registry                2.7       5c4008a25e05   40 hours ago   26.2MB
ubuntu                  latest    f63181f19b2f   5 weeks ago    72.9MB
localhost:5000/ubuntu   latest    f63181f19b2f   5 weeks ago    72.9MB

概要

この記事では、イメージレジストリをローカルで実行する方法について説明しました。 また、Docker Hub のイメージをプルし、ローカル レジストリでイメージにタグを付けてから、そのイメージを Distribution を実行しているローカル レジストリにプッシュしました。

ディストリビューションプロジェクトについて詳しく知りたい場合は、GitHubのオープンソースプロジェクトの ホームページ にアクセスして、 ドキュメントを確認してください。