docker registry使用指南

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker registry使用指南相关的知识,希望对你有一定的参考价值。

参考技术A

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 认证流程简图:

docker 使用非加密registry

docker默认要求我们使用加密的方式访问registry。 如果你搭建的私有registry是非加密的怎么办呢?

手动起守护进程的话很简单。加上这个--insecure-registry参数就行了

dockerd --insecure-registry myregistry.mydomain.com

 

如果是用服务起的话就需要修改配置文件了。要创建一个叫做/etc/systemd/system/docker.service.d/docker.conf的文件

sudo mkdir /etc/systemd/system/docker.service.d
sudo touch /etc/systemd/system/docker.service.d/docker.conf
sudo vi /etc/systemd/system/docker.service.d/docker.conf

并且在文件中添加如下内容

[Service]
ExecStart=
ExecStart=/usr/bin/dockerd --insecure-registry myregistry.mydomain.com

配置修改完毕之后,重启服务,让它生效

sudo systemctl daemon-reload
sudo systemctl restart docker

 

以上是关于docker registry使用指南的主要内容,如果未能解决你的问题,请参考以下文章

如何搭建及使用docker registry

Docker 私服Registry简介与使用Docker-Compose安装Registry

docker registry使用指南

部署docker-registry +ui , 使用ansible部署docker实例

使用harbor配置docker registry

使用harbor配置docker registry