添加用户认证
前提
registry规定使用认证时必须配置TSL,因此需要先配置HTTPS。
使用HTTPS协议创建用户和密码
创建一个用户:用户名testuser,密码为123456。
$ mkdir auth
$ docker run \
--entrypoint htpasswd \
httpd:2 -Bbn testuser 123456 > auth/htpasswd
在Windows平台上,应该运行下述命令:
docker run --rm --entrypoint htpasswd httpd:2 -Bbn testuser 123456 | Set-Content -Encoding ASCII auth/htpasswd
启动registry
假设已经通过上述途径获取到了密钥对domain.key和证书domain.crt,这两个文件放在了目录certs下,此时可以使用以下方式之一进行配置。
方式一:docker run
$ docker run -d \
-p 443:443 \
--restart=always \
--name registry \
-v "$(pwd)"/auth:/auth \
-e "REGISTRY_AUTH=htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
-v "$(pwd)"/certs:/certs \
-e REGISTRY_HTTP_ADDR=0.0.0.0:443 \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
registry:2
方式二:docker compose
首先创建Dockerfile文件,文件内容如下:
FROM registry:2
LABEL MAINTAINCE="bohanz838@gmail.com"
ADD certs /certs
ADD auth /auth
创建compose.yaml文件,内容如下:
services:
registry:
restart: always
build:
context: .
tags:
- "registry:v1"
ports:
- 443:443
environment:
REGISTRY_HTTP_ADDR: 0.0.0.0:443
REGISTRY_HTTP_TLS_CERTIFICATE: /certs/domain.crt
REGISTRY_HTTP_TLS_KEY: /certs/domain.key
REGISTRY_AUTH: htpasswd
REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd
REGISTRY_AUTH_HTPASSWD_REALM: Registry Realm
关闭安全性检查(可选)
测试
首先,增加本机DNS映射(必须使用root):
sudo su -
echo "192.168.10.110 example.com" >> /etc/hosts
然后,登录registry,输入用户名testuser,密码123456:
docker login example.com
向registry提交镜像:
docker tag ubuntu:20.04 example.com/ubuntu:v1
docker push example.com/ubuntu:v1
从registry拉取镜像:
docker rmi ubuntu:20.04 example.com/ubuntu:v1
docker pull example.com/ubuntu:v1
docker images example.com/ubuntu
Last updated
Was this helpful?