Docker学習ノート:Centos 7インストールdockerおよびregistry登録サービス
7910 ワード
通常モード
1.サーバーにインストールされているdockerコンテナの表示
[root@rabbit1 images]# yum list installed |grep docker
containerd.io.x86_64 1.2.10-3.2.el7 @docker-ce-stable
docker-ce.x86_64 3:19.03.5-3.el7 @docker-ce-stable
docker-ce-cli.x86_64 1:19.03.5-3.el7 @docker-ce-stable
説明:docker-ce-cli.x86_64はdockerクライアントプログラム、docker-ce.x86_64はdockerサービス側プログラムであり、
2.dockerコンテナをアンインストールします(必要なバージョンでない場合はアンインストールして再インストールします.そうでない場合は無視できます).
docker remove containerd.io.x86_64
yum remove docker-ce-cli.x86_64
3.最新版のdockerをインストールする
yum install docker-ce
次のコマンドでdockerコンテナのすべてのバージョンを表示し、必要に応じて指定したバージョンをインストールすることもできます.
yum search docker-ce --showduplicates
-showduplicatesはすべてのバージョンをリストします
4.dockerコンテナサービスの起動
systemctl start docker
5.registryミラーの作成
docker run -d -p 5000:5000 --restart=always --name registry \
-e REGISTRY_HTTP_ADDR=0.0.0.0:5000 \
-v /home/images:/var/lib/registry \
registry:2.7.1
6.registry私服ミラーアップロード、プル、削除操作例
docker pull ubuntu
docker tag ubuntu xxx.xxx.xxx.xxx:5000/ubuntu
docker push xxx.xxx.xxx.xxx:5000/ubuntu
プッシュ操作を実行すると、次のような異常が発生する可能性があります.
[root@rabbit1 images]# docker push xx.xx.xx.xxx:5000/ubuntu
The push refers to repository [xx.xx.xx.xxx:5000/ubuntu]
Get https://xx.xx.xx.xx:5000/v2/: http: server gave HTTP response to HTTPS client
この時私たちは/etc/docker/daemon.jsonファイルに不安全なregistryレジストリアドレスを追加します(このスキームはテスト環境でのみ使用できます.本番環境ではTLS証明書を使用する方法は、次のセクションを参照してください).
{ "insecure-registries":["xx.xx.xx.xxx:5000"] }
次にdockerを再起動します.
systemctl restart docker
docker image remove ubuntu
docker image remove xx.xx.xx.xx:5000/ubuntu
以下も使用できます.
docker rmi
私服のミラーをローカルに引き出します.
docker pull xx.xx.xx.xx:5000/ubuntu
7.地元のレジストリ私服
docker container stop registry
docker container start registry
docker container stop registry & docker container rm -v registry
自己発行証明書登録モード(TLS)
1.次の3つのフォルダを作成
## registry
/home/docker-registry/images
## TLS
/home/docker-registry/certs
##
/home/docker-registry/auth
2.TLS証明書の生成
openssl req \
-newkey rsa:4096 -nodes -sha256 -keyout /home/docker-registry/certs/registry.key \
-x509 -days 3650 -out /home/docker-registry/certs/registry.crt
3.TLS証明書署名付きregistryレジストリサービスの作成
docker run -d -p 5000:5000 --restart=always --name registry \
-v /home/docker-registry/images:/var/lib/registry \
-v /home/docker-registry/certs:/certs \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/registry.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/registry.key \
registry:2
4.docker clientでpullまたはpushをregistryにミラーできる
$ docker pull ubuntu
$ docker tag ubuntu myregistry.domain.com/my-ubuntu
$ docker push myregistry.domain.com/my-ubuntu
$ docker pull myregistry.domain.com/my-ubuntu
ローカル基本認証(ユーザー名パスワードモード)
アクセス制限を実現する最も簡単な方法は、基本認証です(これは他のウェブサーバの基本認証メカニズムと非常に似ています).
注意:基本認証は、ユーザー認証を明示的に送信する認証スキームとともに使用することはできません.ローカル基本認証を使用するには、TLSを構成する必要があります.
1.ファイルディレクトリの作成
## registry
/home/docker-registry/images
## TLS
/home/docker-registry/certs
##
/home/docker-registry/auth
2.ユーザー名とパスワード証明書の生成
## , > , >>
docker run --rm\
--entrypoint htpasswd \
registry:2 -Bbn admin2 admin2 >> /home/docker-registry/auth/htpasswd
openssl req \
-newkey rsa:4096 -nodes -sha256 -keyout /home/docker-registry/certs/registry.key \
-x509 -days 3650 -out /home/docker-registry/certs/registry.crt
4.以上のステップで生成した証明書およびアカウントパスワードに基づいてregistry登録サービスを作成する
docker run -d -p 9527:5000 --restart=always --name registry \
-v /home/docker-registry/images:/var/lib/registry \
-v /home/docker-registry/certs:/certs \
-v /home/docker-registry/auth:/auth \
-e "REGISTRY_AUTH=htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
-e REGISTRY_HTTP_ADDR=0.0.0.0:5000 \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/registry.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/registry.key \
-e REGISTRY_STORAGE_DELETE_ENABLED=true \
registry:2
docker login xx.xx.xx.xx:5000
ログインすると、次のように異常が表示されます.
Error response from daemon: Get https://xx.xx.xx.com:5000/v2/: x509: certificate signed by unknown authority
これは、クライアントが証明書をインストールしていないためです.
linuxシステム:registry.crtをファイルにコピー/etc/docker/certs.d/ドメイン名またはホスト名:5000/ca.crt、dockerを再起動する必要はありません(ホスト名は/etc/hostsファイルでマッピングする必要があります)
Windows版クライアント:直接右クリックでインストールできます.インストール後dockerを再起動します.
Mac版クライアント:registry.crt証明書を/.にコピーdocker/certs.d/ドメイン名またはホスト名:5000/ca.crt、linuxシステムクライアントインストール証明書方式と同様
次のエラーが発生した場合は、クライアントがログインしていないことを示します.
Error response from daemon: Get https://xx.xx.xx:5000/v2/mycentos7/manifests/latest: no basic auth credentials
6.registry基礎認証ログインを終了する
docker logout xx.xx.xx.xx:5000
7.registryコンテナの削除
docker container stop registry && docker container rm -v registry
8.registry内のすべてのミラー名を問い合わせる
curl -XGET http://xxxx.xx.xx.xx:5000/v2/_catalog
9.ミラー名に基づいてミラーバージョンを問い合わせる
curl -XGET http://xxxx.xx.xx.xx:5000/v2/ /tags/list
Docker Registry Web UI
成功:
docker run -it -p 9528:8080 --name registry-web --link registry \
-e REGISTRY_URL=https://registry:5000/v2 \
-e REGISTRY_TRUST_ANY_SSL=true \
-e REGISTRY_BASIC_AUTH="YWRtaW46YWRtaW4=" \
-e REGISTRY_NAME=emisdockerhub.eastmoney.com:9027 \
-e REGISTRY_READONLY=false \
hyper/docker-registry-web
参考1:https://hub.docker.com/_/registry
参考2:https://docs.docker.com/registry/deploying/
APIリファレンス:https://docs.docker.com/registry/spec/api/
insecure registryリファレンス:https://docs.docker.com/registry/insecure/