Dockerプラットフォームを非常に強力にしていることの1つは、中央の場所から画像を簡単に使用できることです。 Docker Hub は、何千もの公式イメージがすぐに使用できる最高のイメージリポジトリです。 また、独自のイメージを Docker Hub レジストリにプッシュするのも同様に簡単で、誰もが Docker 化されたアプリケーションのメリットを享受できます。
ただし、特定のシナリオでは、イメージをファイアウォールの外側にプッシュしたくない場合があります。 この場合、オープンソースソフトウェアプロジェクトの Distributionを使用してローカルレジストリを設定できます。 この記事では、チームが既に知っている docker コマンドとイメージを共有できる Distribution プロジェクトのローカル インスタンスの設定と構成について説明します。 docker push
docker pull
前提 条件
このチュートリアルを完了するには、次のものが必要です。
- 無料のドッカーアカウント
- 無料のDockerアカウントにサインアップ して、無料の無制限のパブリックリポジトリを受け取ることができます
- ローカルで実行されているドッカー
配布サービスの実行
ディストリビューションプロジェクトは、 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のオープンソースプロジェクトの ホームページ にアクセスして、 ドキュメントを確認してください。