1、Docker Registry介绍
1.1 介绍
- registry 用于保存docker 镜像,包括镜像的层次结构和元数据。
- 启动容器时,docker daemon会试图从本地获取相关的镜像;本地镜像不存在时,其将从registry中下载该镜像并保存到本地;
- 拉取镜像时,如果不知道registry仓库地址,默认从Docker Hub搜索拉取镜像
1.2 分类
- Sponsor Registry:第三方的registry,供客户和docker社区使用;
- mirror Registry:第三方的registry,只让客户使用;如docker cn和阿里云的镜像加速器;
- vendor Registry:服务商的registry,由发布docker镜像的供应商提供的registry;如红帽提供的专有的,收费提供;
- private Registry:通过设有防火墙和额外的安全层的私有实体提供的registry;自建的registry,在本地搭建registry,节省带宽
1.3 registry组成(repository和index)
(1)Repository
- 由特定的docker镜像的所有迭代版本组成的镜像仓库;
- 一个registry中可以存在多个repository:
- repository可分为“顶层仓库”和“用户仓库”
- 用户仓库名称格式为“用户名/仓库名”
- 每个仓库可以包含多个Tag(标签),每个标签对应一个镜像
(2)Index
- 维护用户账户、镜像的校验以及公共命名空间的信息
- 相当于为registry提供了一个完成用户认证等功能的检索接口
1.4 拉取上传仓库镜像
(1)拉取镜像
docker pull <registry>[:<port>]/[<namespace>/]<name>:<tag>
- registry:仓库服务器地址:不指定默认是docker hub
- port:端口;默认是443,因为是https协议
- namespace:名称空间,指是哪个用户的仓库,如果是顶层仓库,可省
- name:仓库名
- tag:标签名;默认是latest版本
(2)上传镜像
docker push [OPTIONS] NAME[:TAG]
2、搭建私有仓库 distribution
2.1 distribution 介绍
docker提供的开源Registry,但是很简单,只能作为存储镜像的仓库,没有额外的功能;如管理页面等
2.2 安装启动 distribution
2.2.1 方案1:使用yum安装(或者使用apt-get安装)
[root@docker2 ~]# yum info docker-distribution 已加载插件:fastestmirror Loading mirror speeds from cached hostfile 可安装的软件包 名称 :docker-distribution 架构 :x86_64 版本 :2.6.2 发布 :2.git48294d9.el7 大小 :3.5 M 源 :extras/7/x86_64 简介 : Docker toolset to pack, ship, store, and deliver content 网址 :https://github.com/docker/distribution 协议 : ASL 2.0 描述 : Docker toolset to pack, ship, store, and deliver content [root@docker2 ~]# yum -y install docker-distribution # yum安装 [root@docker2 ~]# apt-get install docker-registry # apt-get安装
2.2.2 方案2:拉取镜像,作为容器安装
(1)拉取镜像
root@caicai:/# docker pull registry:2.6.2 2.6.2: Pulling from library/registry 486039affc0a: Pull complete ba51a3b098e6: Pull complete 470e22cd431a: Pull complete 1048a0cdabb0: Pull complete ca5aa9d06321: Pull complete Digest: sha256:c4bdca23bab136d5b9ce7c06895ba54892ae6db0ebfc3a2f1ac413a470b17e47 Status: Downloaded newer image for registry:2.6.2 docker.io/library/registry:2.6.2
(2)启动registry 容器
root@caicai:~# docker run --name registry -p 5000:5000 -v /data/registry:/var/lib/registry -d registry:2.6.2 a43f802e737eba89879a4dc02562b38e0042db981f9bdb91782b453f0bac4119 root@caicai:~# docker port registry 5000/tcp -> 0.0.0.0:5000 root@caicai:~# ss -nutlp |grep 5000 tcp LISTEN 0 128 :::5000 :::* users:(("docker-proxy",pid=4901,fd=4)) root@caicai:~# docker inspect -f {{."Mounts"}} registry [{bind /data/registry /var/lib/registry true rprivate}]
注:
- -p 5000:5000:将容器中的5000端口,暴露在宿主机的5000端口
- -v /data/registry:/var/lib/registry:指定宿主机存储的位置为 /data/registry
- -d:后台运行容器
2.3 从私有仓库上传下载镜像
2.3.1 将本地的镜像上传到私有仓库
(1)先将本地仓库打上合适的标签
root@caicai:~# docker tag busybox:latest 172.17.0.1:5000/busybox:v0.1 root@caicai:~# docker images | grep 172.17.0.1:5000 172.17.0.1:5000/busybox v0.1 c7c37e472d31 4 weeks ago 1.22MB root@caicai:~#
(2)尝试上传镜像
root@caicai:~# docker push 172.17.0.1:5000/busybox:v0.1 The push refers to repository [172.17.0.1:5000/busybox] Get https://172.17.0.1:5000/v2/: http: server gave HTTP response to HTTPS client
上传镜像失败;原因:docker 上传下载默认只支持https协议,搭建的私有仓库是http协议。
(3)修改docker配置文件,将私有仓库认证为安全仓库:"insecure-registries":["172.17.0.1:5000"],重启docker服务
root@caicai:~# cat /etc/docker/daemon.json { "registry-mirrors": ["https://y0qd3iq.mirror.aliyuncs.com"], "insecure-registries": ["172.17.0.1:5000"] } root@caicai:~# systemctl restart docker
注:修改文件时,注意字典元素中间用逗号隔开
(4)如果是在同一台物理机上面,记得重启完docker服务之后,一定要去把私有仓库容器启动起来,被这个坑了一个多小时。一直报连接拒绝。修改各种配置都尝试了
root@caicai:~# docker push 172.17.0.1:5000/busybox:v0.1 The push refers to repository [172.17.0.1:5000/busybox] Get http://172.17.0.1:5000/v2/: dial tcp 172.17.0.1:5000: connect: connection refused
(5)再次上传镜像,成功
root@caicai:~# docker push 172.17.0.1:5000/busybox:v0.1 The push refers to repository [172.17.0.1:5000/busybox] 50761fe126b6: Pushed v0.1: digest: sha256:2131f09e4044327fd101ca1fd4043e6f3ad921ae7ee901e9142e6e36b354a907 size: 527
(6)在私有仓库的服务器上验证
root@caicai:~# ls /data/registry/docker/registry/v2/ blobs repositories
(7)从私有仓库拉取镜像,先删除再拉取
root@caicai:~# docker pull 172.17.0.1:5000/busybox:v0.1 v0.1: Pulling from busybox Digest: sha256:2131f09e4044327fd101ca1fd4043e6f3ad921ae7ee901e9142e6e36b354a907 Status: Image is up to date for 172.17.0.1:5000/busybox:v0.1 172.17.0.1:5000/busybox:v0.1