Dockerパブリックミラーウェアハウスとプライベートミラーウェアハウスの構築

1.DockerHubパブリックミラーウェアハウスの使用

1. docker.comの公式ウェブサイトにログインして、アカウントを登録します

ここに画像の説明を挿入

2.dockerの公式Webサイトにログインします

docker login 
#输入用户ID和密码

3.画像をウェアハウスにプッシュします

为了方便测试,我们将hello-world 镜像拉取至本地,然后再上传至DockerHub仓库中。
先给镜像设置标签docker tag local-image:tagname new-repo:tagname;
再将镜像推送至仓库docker push new-repo:tagname

docker tag hello-world:latest mrgcc1314/test-hello-world:1.0.0    #将镜像打上标签

docker push mrgcc1314/test-hello-world:1.0.0         #将镜像上传到docker中


docker pull mrgcc1314/test-hello-world:1.0.0         #在docker仓库中拉取镜像测试是否创建成功

docker logout        #退出当前登录的docker账号

2.Dockerプライベートウェアハウスの構築と認証

DockerHubには、公式の画像や個人がアップロードした画像が多数用意されています。機関や個人が提供した画像をダウンロードしたり、独自のローカル画像をアップロードしたりできますが、欠点は次のとおりです。
●ネットワーク上の理由により、画像のダウンロードとアップロードの速度が速いDockerHubから速度が低下する可能性があります。
本番環境で使用されるDockerイメージには、コードや構成情報などが含まれている可能性があり、部外者に取得されたくない場合があります。ダウンロードできるのはイントラネット上の開発者のみです。

上記の問題を解決するために、Dockerはローカルのプライベートウェアハウスを構築するためのレジストリと呼ばれるミラーを公式に提供しています。内部ネットワーク上に構築されたDockerプライベートウェアハウスは、内部ネットワーク担当者のダウンロードとアップロードを非常に高速にすることができ、外部ネットワークの帯域幅などの要因の影響を受けません。同時に、内部ネットワークにいない人はダウンロードできません。私たちのイメージ、およびプライベートウェアハウスは、構成ウェアハウス認証機能もサポートしています。次に、レジストリプライベートウェアハウスを設定するプロセスについて詳しく説明します。

1.プライベートウェアハウスのイメージをプルします

拉取私有仓库镜像。
docker pull registey

2.構成を変更します

demo.jsonファイルを変更します。

vi /etc/docker/daemon.json

添加以下内容,用于让Docker信任私有仓库地址,保存退出。
{
    
    
......
"insecure-registries": ["192.168.200.60:5000"]
}

構成情報を再ロードし、Dockerサービスを再起動します。

#重新加载某个服务的置文件
systemctl daemon-reload

#重新启动docker
systemctl restart docker

3.プライベートウェアハウスコンテナを作成します

创建私有仓库容器:	
docker run -di --name registry -p 5000:5000 -v /mydata/docker_registry:/var/lib/registry registry
●-d :后台运行容器;
●--name :为创建的容器命名;
●-p :表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射;
●-v :将容器内/var/lib/registry 目录下的数据挂载至宿主机/mydata/docker_registry 目录下;

ブラウザを開き、次のように入力します。http://192.168.200.60:5000 / v2 / _catalog {"repositories":[]}が表示されている場合は、プライベートリポジトリが正常に構築され、コンテンツが空であることを意味します。

または、コマンドを直接入力します。

curl -XGET http://192.168.200.60:5000/v2/_catalog

4.画像をプライベートウェアハウスにプッシュします

先给镜像设置标签docker tag local-image:tagname new-repo:tagname;
再将镜像推送至私有仓库docker push new-repo:tagname

docker tag hello-world:latest 192.168.200.60:5000/test-hello-world:1.0.0
docker push 192.168.200.60:5000/test-hello-world:1.0.0

ブラウザを開き、次のように入力します。http://192.168.200.60:5000 / v2 / _catalogアップロードされた画像はプライベートウェアハウスに表示されます。

または、コマンドを直接入力します。

curl -XGET http://192.168.200.60:5000/v2/_catalog
#当创建好私有仓库并且上传镜像到该私有仓库以后,便可以通过该私有仓库中的镜像创建容器了
docker run -it --name hello 192.168.200.60:5000/test-hello-world:1.0.0 

5.プライベートウェアハウス認証を構成します

プライベートウェアハウスが設置されました。プライベートウェアハウスのセキュリティを確保するために、予期せぬ事態が発生しないようにセキュリティ認証証明書も必要です。したがって、自己署名証明書は、プライベートウェアハウスが構築されているDockerホストで生成する必要があります。

#创建证书存储目录。
mkdir -p /usr/1ocal/registry/certs

#生成自签名证书命令。
openssl req -newkey rsa:2048 -nodes -sha256 -keyout /usr/1ocal/registry/certs/domain.key -x509 -days 365 -out /usr/1ocal/registry/certs/domain.crt

选项:
openssl req :创建证书签名请求等功能;
-newkey :创建CSR证书签名文件和RSA私钥文件;
rsa:2048 :指定创建的RSA私钥长度为2048;
-nodes :对私钥不进行加密;
-sha256 :使用SHA256算法;
-keyout :创建的私钥文件名称及位置;
-x509 :自签发证书格式;
-days :证书有效期; 
-out :指定CSR输出文件名称及位置;

5.1。自己署名証明書を生成します

opensslを使用して自己署名証明書を生成します。コマンドを実行した後、証明書情報を入力する必要があります。最も重要な部分は次のとおりです。共通名(名前やサーバーのホスト名など)[]:192.168.200.60、ここにありますプライベートウェアハウスのアドレス。

[ root@localhost ~]# openssl req -newkey rsa:2048 -nodes -sha256 -keyout /usr/1ocal/registry/certs/domain.key -x509 -days 365 -out /usr/1ocal/registry/certs/domain.crt
Generating a 2048 bit RSA private key
...........+++
..............+++
writing new private key to '/usr/1ocal/registry/certs/domain.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:
State or Province Name (full name) []:
Locality Name (eg, city) [Default City]:
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:192.168.200.60
Email Address []:

5.2。認証パスワードファイルを生成する

#创建存储鉴权密码文件目录
mkdir -p /usr/local/registry/auth

#如果没有htpasswd 功能需要安装httpd
yum install -y httpd

#创建用户和密码
htpasswd -Bbn root 1234 > /usr/local/registry/auth/htpasswd
htpasswd 是apache http的基本认证文件,使用htpasswd命令可以生成用户及密码文件。

5.3。プライベートウェアハウスコンテナを作成する

docker run -di --name registry -p 5000:5000 \
-v /mydata/docker_registry:/var/lib/registry \
-v /usr/1ocal/registry/certs:/certs \
-v /usr/1ocal/registry/auth:/auth \
-e "REGISTRY_AUTH=htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
registry

5.4。イメージをプライベートウェアハウスにプッシュできませんでした

#先给镜像设置标签
[root@localhost ~]#docker tag hello-world:latest 192.168.200.60:5000/test-hello-world:1.0.0 

#再将镜像推送至私有仓库
[root@localhost ~]#docker push 192.168.200.60:5000/test-hello-world:1.0.0 
The push refers to repository [192.168.200.60:5000/test-hello-world]
f22b99068db9: Preparing 
no basic auth credentials

イメージを直接プッシュすると、間違いなく失敗し、基本認証資格情報がないというエラーが発生します。これは、ログイン認証を実行しなかったためです。

5.5。ログインアカウント

通过docker login 命令输入账号密码登录私有仓库。
docker login 192.168.200.60:5000

5.6。画像をプライベートウェアハウスに正常にプッシュしました

再次push镜像,发现已经可以推送成功了。
docker push 192.168.200.60:5000/test-hello-world:1.0.0 

5.7。アカウントからログアウトします

通过docker logout 命令退出账号。
docker logout 192.168.200.60

おすすめ

転載: blog.csdn.net/Gengchenchen/article/details/115125438