Docker 构建私有仓库

Posted Time-Traveler

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker 构建私有仓库相关的知识,希望对你有一定的参考价值。


HTTP版本:

http版本的非常简单,直接运行一条命令即可
docker run -d -p 5000:5000 --restart=always --name registry registry

http的仓库想要上传镜像需要配置一下,否则会push失败:

vim /etc/docker/daemon.json
# 添加 "insecure-registries": ["your_domain:5000"]

HTTPS支持

证书:

mkdir certs
# 将证书分别命名为domain.crt,domain.key并放入certs目录中
  1. 云服务器一般都提供免费的证书,直接下载即可
  2. 可以自签证书

创建docker服务:

# 该命令存在问题,参数写错了,放在这里只是为了查看错误日志,停止registry并重试,可以跳过。
docker run -d --restart=always --name registry -v "$(pwd)"/certs:/certs -e REGISTRY_HTTP_ADDR=0.0.0.0:443 -e REGISTRY_TLS_CERTIFICATE=/certs/domain.crt -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key -p 433:433 registry:2

使用 docker logs -f registry 查看日志:

docker logs -f registry


发现创建的时候写错了参数,需要先停掉registry:

docker container stop registry

修改后(将当前certs目录挂载到镜像中):

docker run -d \\
  --restart=always \\
  --name registry \\
  -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 \\
  -p 443:443 \\
  registry:2

验证是否成功(访问 https://your_domain/v2):

并且log中会记录访问日志:

上传镜像:

docker tag nginx your_domain/my-nginx
docker push your_domain/my-nginx


这里有个timeout但是并没有影响上传,暂时忽略了。
查看镜像(访问:https://your_domain/v2/_catalog):

拉取镜像:

docker pull your_domain/my-nginx


docker 提供了一些接口可供访问:

#查询镜像
curl  <仓库地址>/v2/_catalog
 
#查询镜像tag(版本)
curl  <仓库地址>/v2/<镜像名>/tags/list
 
#删除镜像API
curl -I -X DELETE "<仓库地址>/v2/<镜像名>/manifests/<镜像digest_hash>"
 
#获取镜像digest_hash
curl  <仓库地址>/v2/<镜像名>/manifests/<tag> \\
    --header "Accept: application/vnd.docker.distribution.manifest.v2+json"

Nginx转发的方式:

查到另一种方式,安装nginx进行转发,https由nginx去配置,同样需要证书文件,请查看 nginx配置https

以上是关于Docker 构建私有仓库的主要内容,如果未能解决你的问题,请参考以下文章

虚拟化docker构建私有仓库,上传镜像至私有仓库

Docker 构建私有镜像仓库

使用Harbor构建docker私有仓库

使用Harbor构建docker私有仓库

使用Harbor构建docker私有仓库

Centos 7构建docker私有镜像仓库