1.背景
Dockerでは、docker pull xxxを実行すると、不思議に思うかもしれません。dockerはどこでイメージを検索してダウンロードしますか?
実際にはregistry.hub.docker.comのアドレスから検索されます。これはDockerが提供するパブリックウェアハウスです。誰でも上記のミラーを表示して使用できます。したがって、次のように、ウェアハウスアドレスを使用してイメージをプルすることもできます:docker pull Registry.hub.docker.com/library/alpineただし、この方法でダウンロードされたイメージのデフォルト名は長くなることに注意してください。
企業でDockerを使用したい場合、商用プロジェクトを公共の倉庫にアップロードすることは基本的に不可能です。複数のマシンを共有したい場合はどうすればよいでしょうか。
この必要性のために、私用倉庫も役に立ちます。
いわゆるプライベートウェアハウスは、ローカルに構築されたパブリックウェアハウス(ローカルエリアネットワーク)に似たものです。構築後、プライベートウェアハウスに画像を送信できます。このようにして、Dockerを使用してプロジェクトイメージを実行できるだけでなく、商用プロジェクトによってさらされるリスクを回避することもできます。
以下では、公式のレジストリミラーを使用してプライベートミラーウェアハウスを構築します。もちろん、他にも多くの方法があります。
2.環境
dockerがインストールされた2台のサーバーを準備します。
サーバーマシン(ホスト名レジストリ):dockerプライベートウェアハウスサーバー、実行中のレジストリコンテナー、
テストマシン(ホスト名ノード):通常のdockerサーバー、このサーバーに1台ダウンロードイメージbusyboxをテストし、にアップロードします。テスト用のレジストリサーバー。
3.展開(サーバー操作)
3.1ミラーレジストリをダウンロードする
[root@registry ~]# docker pull registry
Using default tag: latest
latest: Pulling from library/registry
81033e7c1d6a: Pull complete
b235084c2315: Pull complete
c692f3a6894b: Pull complete
ba2177f3a70e: Pull complete
a8d793620947: Pull complete
Digest: sha256:672d519d7fd7bbc7a448d17956ebeefe225d5eb27509d8dc5ce67ecb4a0bce54
Status: Downloaded newer image for registry:latest
3.2ミラーの下のプルダウンかどうかを確認します
3.3レジストリコンテナを実行する
[root@registry ~]# docker run -itd -v /data/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:latest
06a972de6218b1f1c3bf9b53eb9068dc66d147d14e18a89ab51db13e339d3dc9
パラメータの説明
-itd:対話型操作のためにコンテナーで疑似端末を開き、バックグラウンドで実行します;
-v:ホストの/ data / registryディレクトリーをコンテナー/ var / lib / repositoryディレクトリーにバインドします(このディレクトリーはレジストリ・コンテナーに保管されます)データの永続性を実現するためのイメージファイルのディレクトリ)
-p:マッピングポート;レジストリコンテナのサービスにアクセスするためのホストの5000ポートへのアクセス;
--restart = always:これはコンテナが異常終了した場合の再起動戦略です。コンテナは自動的に再起動されます
。--nameregistry:コンテナを作成し、レジストリに名前を付けます。任意の名前を付けることができます
。registry:latest:これは今プルダウンされた画像です。
3.4ミラーウェアハウス内のすべてのミラーをテストします
在这里插入代码片[root@registry ~]# curl http://127.0.0.1:5000/v2/_catalog
{
"repositories":[]}
実行したばかりで、画像コンテンツが含まれていないため、現在は空です。
4.ミラーウェアハウスをテストします(テスト側での操作)
4.1ミラーソースを変更し、Dockerサービスを再起動します
[root@node ~]# vim /etc/docker/daemon.json
{
"registry-mirrors": [ "https://registry.docker-cn.com"]
}
[root@node ~]# systemctl restart docker
4.1busyboxイメージのダウンロード
[root@node ~]# docker pull busybox
[root@node ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox latest f6e427c148a7 36 hours ago 1.15MB
4.2画像にタグを付ける
[root@node ~]# docker tag busybox:latest 172.18.18.90:5000/busybox:v1
フォーマットの説明:使用法:docker tag SOURCE_IMAGE [:TAG] TARGET_IMAGE [:TAG]
busybox:lastestこれはソースミラーであり、今
プルダウンされたミラーファイルでもあります; 172.18.18.90:500 / busybox:v1:これはターゲットミラーであり、レジストリプライベートミラーのIPアドレスとポートでもありますサーバ;
タグを確認してください:
4.3ミラーサーバーにアップロードする
[root@node ~]# docker push 172.18.18.90:5000/busybox:v1
The push refers to repository [172.18.18.90:5000/busybox]
Get https://172.18.18.90:5000/v2/: http: server gave HTTP response to HTTPS client
注意、これはエラーです。アップロードするにはhttpsメソッドが必要です。daemon.jsonを変更して解決できます。
[root@node ~]# vim /etc/docker/daemon.json
{
"registry-mirrors": [ "https://registry.docker-cn.com"],
"insecure-registries": [ "172.18.18.90:5000"]
}
プライベートミラーサーバーのアドレスを追加します。書き込み形式はjsonであり、厳密な書き込み要件があることに注意してから、Dockerサービスを再起動します。
[root@node ~]# systemctl restart docker
このアップロードには問題がないことがわかります。
[root@node ~]# docker push 172.18.18.90:5000/busybox:v1
The push refers to repository [172.18.18.90:5000/busybox]
c5183829c43c: Pushed
v1: digest: sha256:c7b0a24019b0e6eda714ec0fa137ad42bc44a754d9cea17d14fba3a80ccc1ee4 size: 527
4.4テストダウンロードイメージ
アップロードテストは問題ありません。レジストリサーバーからアップロードしたばかりのbusyboxイメージをテストダウンロードし、最初にノードホスト上のイメージを削除します。
[root@node ~]# docker rmi -f $(docker images -aq)
Untagged: 172.18.18.90:5000/busybox:v1
Untagged: 172.18.18.90:5000/busybox@sha256:c7b0a24019b0e6eda714ec0fa137ad42bc44a754d9cea17d14fba3a80ccc1ee4
Untagged: busybox:latest
Untagged: busybox@sha256:2107a35b58593c58ec5f4e8f2c4a70d195321078aebfadfbfb223a2ff4a4ed21
Deleted: sha256:f6e427c148a766d2d6c117d67359a0aa7d133b5bc05830a7ff6e8b64ff6b1d1d
Deleted: sha256:c5183829c43c4698634093dc38f9bee26d1b931dedeba71dbee984f42fe1270d
查看一下node主机上的镜像全部删除了:
[root@node ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
次に、レジストリサーバーからbusyboxイメージをダウンロードします。
[root@node ~]# docker pull 172.18.18.90:5000/busybox:v1
v1: Pulling from busybox
d070b8ef96fc: Pull complete
Digest: sha256:c7b0a24019b0e6eda714ec0fa137ad42bc44a754d9cea17d14fba3a80ccc1ee4
Status: Downloaded newer image for 172.18.18.90:5000/busybox:v1
[root@node ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
172.18.18.90:5000/busybox v1 f6e427c148a7 36 hours ago 1.15MB
すべてのミラーを一覧表示します。
[root@node ~]# curl http://172.18.18.90:5000/v2/_catalog
{
"repositories":["busybox"]}
busyboxイメージにあるタグを一覧表示します。
[root@node ~]# curl http://172.18.18.90:5000/v2/busybox/tags/list
{
"name":"busybox","tags":["v1"]}