专栏首页运维开发搭建容器私有仓库服务
原创

搭建容器私有仓库服务

2860元腾讯云代金券免费领取,付款直接抵现金,立即领取>>>

腾讯云海外服务器1折限时抢购,2核4G云主机689元/1年,立即抢购>>>

腾讯云服务器1折限时抢购,2核4G云主机689元/3年,立即抢购>>>

搭建步骤:

1、启动registry服务

docker pull registry

mkdir /data/docker/registry

docker run -idt -v /data/docker/registry/:/var/lib/registry -p 5000:5000 --name registry --restart=always registry

  • 参数说明
1)-itd:在容器中打开一个伪终端进行交互操作,并在后台运行; 
2)-v:绑定宿主机的/docker/registry到容器/docker/registry目录(registry容器中存放镜像文件的目录),来实现数据的持久化;
3)-p:映射端口;访问宿主机的5000端口就访问到registry容器的服务了; 
4)--restart=always:这是重启的策略,假如这个容器异常退出会自动重启容器; 
5)--name registry:创建容器命名为registry,可自定义任何名称; 
6)registry:latest:这个是刚才pull下来的镜像;
  • 验证:
docker tag hello-world localhost:5000/hello-world:v1
docker push localhost:5000/hello-world:v1

curl http://localhost:5000/v2/_catalog
{“repositories":["hello-world"]}

curl http://localhost:5000/v2/hello-world/tags/list
{"name":"hello-world","tags":["latest","v1"]}

2、配置nginx反向代理

  • 配置方法一:
server {
        #listen 80;
        listen 443;
        server_name bksaas.com; #填写绑定证书的域名
        ssl on;
        ssl_certificate bksaas.crt;
        ssl_certificate_key bksaas.key;
        ssl_session_timeout 5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照这个协议配置
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#按照这个套件配置
        ssl_prefer_server_ciphers on;

        client_max_body_size 0;
        chunked_transfer_encoding on;

        location / {
            proxy_pass  http://127.0.0.1:5000;
            proxy_set_header    Host    $host:$server_port;
            proxy_set_header    X-Forwarded-For  $remote_addr;
            proxy_set_header    X-Real-IP      $remote_addr;
            proxy_set_header    X-Forwarded-Proto $scheme;
            proxy_redirect http:// $scheme://;
            
        }
    }
  • 配置方法二(推荐):
upstream DOCKER_REGISTRY {
        server localhost:5000;
}

server {
        #listen 80;
        listen 443;
        server_name bksaas.com; #填写绑定证书的域名
        ssl on;
        ssl_certificate bksaas.crt;
        ssl_certificate_key bksaas.key;
        ssl_session_timeout 5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照这个协议配置
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#按照这个套件配置
        ssl_prefer_server_ciphers on;

        client_max_body_size 0;
        chunked_transfer_encoding on;

        location / {
            proxy_pass  http://DOCKER_REGISTRY;
            # proxy_read_timeout  90;
            # proxy_http_version 1.1;
            proxy_set_header  Host    $host:$server_port;
            proxy_set_header    X-Real-IP      $remote_addr;
            proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header    X-Forwarded-Proto $scheme;
            # proxy_redirect http:// $scheme://;
        }
    }
  • 验证:
docker tag hello-world bksaas.com/hello-world:v1
docker push bksaas.com/hello-world:v1
curl https://bksaas.com/v2/_catalog
{“repositories":["hello-world"]}

3、遇到的问题

  • http: server gave HTTP response to HTTPS client

[email protected] sites-enabled# docker tag hello-world 172.19.0.13:5000/hello-world:v2

[email protected] sites-enabled# docker push 172.19.0.13:5000/hello-world:v2

The push refers to repository 172.19.0.13:5000/hello-world Get https://172.19.0.13:5000/v2/: http: server gave HTTP response to HTTPS client

通过内网IP来访问仓库时,需要配置客户端

vim /etc/docker/daemon.json

{
"registry-mirrors":["https://registry.docker-cn.com"],
"insecure-registries”:[“l172.19.0.13:5000”]
}

systemctl restart docker

  • error parsing HTTP 400 response body: invalid character '<' looking for beginning of value
[[email protected] sites-enabled]# docker push bksaas.com/nginx:v1
The push refers to repository [bksaas.com/nginx]
0b9e07febf57: Pushing  3.584kB
55028c39c191: Preparing 
0a07e81f5da3: Pushing   55.3MB/55.3MB
error parsing HTTP 400 response body: invalid character '<' looking for beginning of value: "<html>\r\n<head><title>400 The plain HTTP request was sent to HTTPS port</title></head>\r\n<body bgcolor=\"white\">\r\n<center><h1>400 Bad Request</h1></center>\r\n<center>The plain HTTP request was sent to HTTPS port</center>\r\n<hr><center>openresty/1.13.6.2</center>\r\n</body>\r\n</html>\r\n"

方式一(见Nginx配置方式一):proxy_redirect http:// $scheme://;

方式二(见Nginx配置方式二):proxy_set_header X-Forwarded-Proto $scheme;

  • 13 Request Entity Too Large
[[email protected] sites-enabled]# docker push bksaas.com/nginx:v1
The push refers to repository [bksaas.com/nginx]
0b9e07febf57: Pushed 
55028c39c191: Pushing  53.97MB
0a07e81f5da3: Pushing   55.3MB/55.3MB
error parsing HTTP 413 response body: invalid character '<' looking for beginning of value: "<html>\r\n<head><title>413 Request Entity Too Large</title></head>\r\n<body bgcolor=\"white\">\r\n<center><h1>413 Request Entity Too Large</h1></center>\r\n<hr><center>openresty/1.13.6.2</center>\r\n</body>\r\n</html>\r\n"

增加Nignx配置,放开限制:

client_max_body_size 0;

4、镜像仓库的维护

  1. 如何清空镜像?[email protected] repositories# rm -rf [email protected] repositories# docker exec registry bin/registry garbage-collect /etc/docker/registry/config.yml
  2. 持续补充...

5、镜像操作的接口

  1. 查询镜像的版本列表

https://registry.bksaas.com/v2/hello-world/tags/list

{
name: "hello-world",
tags: [
"v3",
"latest",
"v1",
"v2",
],
}
  1. 查询具体版本的hashhttps://registry.bksaas.com/v2/hello-world/manifests/v1
[[email protected] sites-enabled]# curl  --header "Accept: application/vnd.docker.distribution.manifest.v2+json" -I -X GET https://registry.bksaas.com/v2/hello-world/manifests/v1

HTTP/1.1 200 OK
Server: openresty/1.13.6.2
Date: Sun, 03 Mar 2019 03:23:55 GMT
Content-Type: application/vnd.docker.distribution.manifest.v2+json
Content-Length: 524
Connection: keep-alive
Docker-Content-Digest: sha256:92c7f9c92844bbbb5d0a101b22f7c2a7949e40f8ea90c8b3bc396879d95e899a
Docker-Distribution-Api-Version: registry/2.0
Etag: "sha256:92c7f9c92844bbbb5d0a101b22f7c2a7949e40f8ea90c8b3bc396879d95e899a"
X-Content-Type-Options: nosniff
  1. 删除对应的版本https://registry.bksaas.com/v2/hello-world/manifests/sha256:92c7f9c92844bbbb5d0a101b22f7c2a7949e40f8ea90c8b3bc396879d95e899a
$ curl -I -X DELETE <protocol>://<registry_host>/v2/<repo_name>/manifests/<digest_hash>

参考:

  1. https://docs.docker.com/registry/recipes/nginx/
  2. https://blog.csdn.net/l6807718/article/details/52886546

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 [email protected] 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • docker搭建私有仓库

    紧接上一篇镜像发布到官方之后,我们来搭建我们自己的私有仓库,比较,如果真的要在生产环境使用的话,这是必须的。 首先,我们来准备一下搭建私有仓库所需要的信息。

    旺财的城堡
  • Docker 私有仓库搭建

    在 Docker 中,当我们执行 docker pull xxx 的时候 ,它实际上是从 registry.hub.docker.com 这个地址去查找,这就是...

    程序员果果
  • docker搭建私有仓库

    序言 黄金指,一不小心就弄出一个故障。。。好可怕好可怕,我的小心脏。。。我的小心眼。。。 我这么信任你,你居然欺骗我。。。。****,这么大的坑,填不满啊。。。...

    企鹅号小编
  • docker搭建私有仓库

    "insecure-registries":["192.168.174.130:5000"]

    爱撒谎的男孩
  • 搭建私有Charts仓库

    把当前目录下 index.yaml 和后缀为 tgz 的包全部拷贝 192.168.26.12 的/data 目录里(请理解

    jwangkun
  • docker搭建私有仓库

    拉取Registry私有镜像仓库,在我们本地搭建一个内网的仓库,避免将一些私密项目暴露在公网,引发不必要的风险

    婷婷的橙子
  • Harbor -- 搭建Docker私有仓库

    Docker容器应用的开发和运行离不开可靠的镜像管理,虽然Docker官方也提供了公共的镜像仓库,但是从安全和效率等方面考虑,部署我们私有环境内的Registr...

    菲宇
  • Docker 搭建私有仓库+harbor

    1、docker pull registry:2 2、docker run -d -p 5000:5000 registry:2

    用户5760343
  • 4. Docker 私有仓库搭建

    这里将registry挂载到了本地home目录, 避免docker重启后, 镜像丢失

    用户7798898
  • 064. 搭建 Docker 私有仓库

    山海散人
  • Harbor搭建私有Docker仓库

    ** 注意:** 不要直接安装 docker 服务,因为直接安装的 docker 服务可能与 harbor 版本对不上,导致安装失败。直接执行 harbor 安...

    jwangkun
  • 微服务--使用Nexus Repository Manager 3.0搭建私有Docker仓库

    下载最新的Nexus Repository Manager 3.0,?https://help.sonatype.com/repomanager3/downlo...

    拓荒者
  • docker 搭建本地私有仓库

    可以看到报错了,提示我们必须使用https,但是此处我们暂时不想做https,该如何解决呢?

    互联网老辛
  • 在Centos7.3搭建Yum私有仓库

    使用本地iso镜像创建本地yum仓库,该方法不推荐,只针对yum服务器无法上公网的环境下操作,毕竟iso镜像里的包非常有限。

    菲宇
  • Docker搭建私有镜像仓库

    kongxx
  • 搭建 Harbor 私有镜像仓库

    keepyan
  • 从零搭建docker私有仓库

    zhaoolee
  • docker registry V2私有仓库搭建

    确认registry server是UP状态,docker ps -a | grep registry

    字母哥博客
  • 搭建私有镜像仓库registry

    将镜像标记、归入指定仓库 声明:因作者多次尝试记录。导致本文中新镜像的名称未保持统一,实际操作时请注意。建议自定义名称

    烤红薯

扫码关注云+社区

领取腾讯云代金券

http://www.vxiaotou.com