docker registry使用指南

如题所述

第1个回答  2022-06-30

docker registry 的作用就是存储我们的镜像。通常情况下我们可以使用 docker hub 来存储,不过如果是在公司内部使用,不想将镜像公开,可以手动搭建一个本地registry,如 docker registry 或 harbor 。本文简单介绍一下 docker registry 的搭建使用及常用配置。

搭建registry最基础的命令为:
docker run -d -v /data/registry:/var/lib/registry -p 5000:5000 registry:2

registry定义的对外服务端口为 5000 ,我们也可以通过环境变量 REGISTRY_HTTP_ADDR 来修改服务端口。

如果要使用其他存储,如 Amazon S3 bucket , Google Cloud Platform 或其他docker支持的 存储 ,也可以通过环境变量单独配置(推荐用yaml的形式来配置)。
注:私有仓库,推送镜像时,要在 /etc/docker/daemon.json 或 C:\ProgramData\docker\config\daemon.json 文件中添加以下配置,并重启docker。

创建服务端证书的第三步,可能会报错 unable to open '/etc/pki/CA/index.txt' ,需要手动创建该文件 touch /etc/pki/CA/index.txt , 并创建一个序列文件来标记CA证书 echo '1000' > /etc/pki/CA/serial 。
证书生成也可以参考: https://www.jianshu.com/p/1163d1ae8029

为了提高regsitry的安全性,可以开启访问控制,用户需要登陆后才可以使用registry。

首先,创建一个密码文件,里面包含一条用户名密码(stark/catherine)。

windows系统下需要修改编码格式:
docker run --rm --entrypoint htpasswd httpd:2 -Bbn testuser testpassword | Set-Content -Encoding ASCII auth/htpasswd
然后启动容器,带上用户认证。

配置一个域名解析: echo 127.0.0.1 myregistry.com>> /etc/hosts ,然后使用docker登录 docker login myregistry.com:5000 ,用户名/密码就是前面配置的stark/catherine。

注:使用身份认证,建议开启TLS,否则登录信息明文传输(header中),一样不安全。

x509报错解决:x509报错通常就是自签证书没有加入到docker client所在host的信任证书中,手动加入即可。对于linux用户,只需要拷贝根证书文件到 /etc/docker/certs.d/myregistrydomain.com:5000/ca.crt 中即可。

最后,也可以在浏览器中访问 https://localhost:5000/v2/_catalog 或是 https://localhost:5000/v2/docker/registry/tags/list 查看仓库信息。

以上只是最简单的用户认证,只能使用我们预先定义好的用户来访问。

我们也可以在regsitry之前使用一个代理,来实现更高级的身份认证;或者将registry集成到我们自己的身份认证和访问控制系统中,由我们的鉴权服务来签发token给用户,然后用户使用签发的token访问我们的registry。harbor就提供了这样一整套服务,如果有此方面的需求,可以考虑使用harbor。

不知到为啥,容器起来了,但访问不了

完整的配置选项 参考 。
配置文件和环境变量的对应关系。配置文件中的内容为:

上述配置文件如果通过环境变量来配置,则对应的环境变量为:
REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY=/var/lib/registry
格式为 REGISTRY_variable ,其中 variable 为配置的变量,通过 _ 连接yaml文件中的各层变量得到。

token 认证流程简图:

相似回答