Centos 7.x 使用Docker registry镜像创建私有仓库

有时候使用 Docker Hub 这样的公共仓库可能不方便,并且公司的私有镜像为了业务安全,也不会push到docker hub上,用户可以创建一个本地仓库供私人使用。类似于git 和maven一样,同时节省服务器下载和上传镜像带宽。

那什么是docker registry呢

Docker Registry由三个部分组成:index,registry,registry client。

可以把Index认为是负责登录、负责认证、负责存储镜像信息和负责对外显示的外部实现,而registry则是负责存储镜像的内部实现,而Registry Client则是docker客户端。

我这台服务器已经安装docker1.6版本,至于怎么安装我就不多说了,可以参考这里,centos上部署docker

[root@docker data]# docker -v
Docker version 1.6.2, build ba1f6c3/1.6.2
[root@docker data]# uname -r
4.1.2-1.el7.elrepo.x86_64

安装docker-registry

docker run -d -p 5000:5000 -v /data/registry:/tmp/registry registry
如果本地没有下载过docker-registry,则首次会pull registry 运行时会映射路径和端口,以后就可以从/data/registry下找到私有仓库,这里查看下我本机的镜像

[root@docker data]# docker images
REPOSITORY           TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
docker.io/registry   latest              ddfbba49d0b6        21 hours ago        423.6 MB
docker.io/centos     latest              7322fbe74aa5        3 weeks ago         172.2 MB
从上面信息可以分别看出

来自于哪个仓库,比如 centos
镜像的标记,比如 latest 最后一个版本
它的 ID 号(唯一)
创建时间
镜像大小
可以看到registry容器已经启动

[root@docker data]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS                    PORTS                    NAMES
ad3469d9302b        registry:latest     "docker-registry"      5 minutes ago       Up 5 minutes              0.0.0.0:5000->5000/tcp   compassionate_newton  
4c86d4e541e3        centos:latest       "/bin/bash"            23 hours ago        Exited (0) 23 hours ago                            high_galileo          
e79a883fdc8b        centos:latest       "/bin/echo 'Hello Wo   23 hours ago        Exited (0) 23 hours ago                            stoic_lalande
访问私有仓库

[root@docker data]# curl 127.0.0.1:5000/v1/search
{"num_results": 0, "query": "", "results": []}
因为我们还没有像私有容器提交镜像,所以这里返回空,下面我们提交一个镜像试试,上面可以看到我本地有一个registry的镜像

使用docker tag 将我本地的id为7322fb474aa5的这个镜像标记为 127.0.0.1:5000/centos

命令格式为 docker tag IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]

[root@docker data]# docker tag 7322fbe74aa5 127.0.0.1:5000/centos
[root@docker data]# docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
docker.io/registry      latest              ddfbba49d0b6        21 hours ago        423.6 MB
docker.io/centos        latest              7322fbe74aa5        3 weeks ago         172.2 MB
127.0.0.1:5000/centos   latest              7322fbe74aa5        3 weeks ago         172.2 MB
[root@docker data]#

镜像的 ID 唯一标识了镜像,注意到 docker.io/centos和 127.0.0.1:5000/centos具有相同的镜像 ID,说明它们实际上是同一镜像。

PUSH 镜像

然后我们将这个镜像push到私有镜像库

[root@docker data]# docker push 127.0.0.1:5000/centos
The push refers to a repository [127.0.0.1:5000/centos] (len: 1)
Sending image list
Pushing repository 127.0.0.1:5000/centos (1 tags)
f1b10cd84249: Image successfully pushed
c852f6d61e65: Image successfully pushed
7322fbe74aa5: Image successfully pushed
Pushing tag for rev [7322fbe74aa5] on {http://127.0.0.1:5000/v1/repositories/centos/tags/latest}

然后我么拿在看下私有仓库中有没有镜像

[root@docker data]# curl 127.0.0.1:5000/v1/search
{"num_results": 1, "query": "", "results": [{"description": "", "name": "library/centos"}]}

可以看到一家有个叫centos的镜像存在了,就是我刚刚上传的镜像。然后你的其他服务器就可以来下载这个镜像使用了

docker pull 192.168.1.222:5000/centos

如果本地有很多镜像想批量上传怎么办,可以用这个脚本

$ wget https://github.com/yeasy/docker_practice/raw/master/_local/push_images.sh; sudo chmod a+x push_images.sh
$ ./push_images.sh ubuntu:latest centos:centos7

这里大家可以看到,访问我们私有库的时候,没有任何权限控制,也就是说别人知道这个仓库地址也可以push 和pull镜像,这样很不安全,大家可以在网络层面,也可以前面加层nginx,然后nginx反向代理本地的5000端口

时间: 2024-12-31 02:04:41

Centos 7.x 使用Docker registry镜像创建私有仓库的相关文章

docker 搭建私有仓库及镜像存储目录结构

仓库 (Repository)是集中存放镜像的地方, docker 仓库分为公有仓库和私有仓库,然而公有仓库在某些情况下并不适用于公司内部传输,所以在这边我来搭建私有环境的 registry .那私有仓库较公有仓库有以下优点: 省带宽 传输速度快 方便存储 下面我们来创建私有仓库,实现 docker client 通过 docker registry 上传和下载 docker images,最后说下docker registry 的存储方式. 本实验要达到的效果是: 1.docker regis

deploy owned private docker registry based on docker HUB registry image

docker HUB提供了registry的image, 可以非常方便的搭建私有regisrty. 当然你也可以选择从docker-registry的源码来搭建. 见 : https://github.com/docker/docker-registry 本文主要说一下使用docker registry image搭建私有registry. 1. 首先要部署docker 参考 :  https://docs.docker.com/installation/#installation 2. 启动d

搭建一个私有的Docker registry

搭建一个私有的Docker registry [TL;DR] 这是系列的第二篇文章,这系列讲述了我的公司如何把基础服务从PaaS迁移到Docker上 第一篇文章: 我谈到了接触Docker之前的经历: 第三篇文章: 我展示如何使创建镜像的过程自动化以及如何用Docker部署一个Rails应用. 为什么需要搭建一个私有的registry呢?嗯,对于新手来说,Docker Hub(一个Docker公共仓库)只允许你拥有一个免费的私有版本库(repo).其他的公司也开始提供类似服务,但是价格可不便宜.

搭建一个私有的Docker registry教程_docker

为什么需要搭建一个私有的registry呢?嗯,对于新手来说,Docker Hub(一个Docker公共仓库)只允许你拥有一个免费的私有版本库(repo).其他的公司也开始提供类似服务,但是价格可不便宜.另外,如果你需要用Docker部署一个用于生产环境的应用,恐怕你不希望将这些镜像放在公开的Docker Hub上吧! 这篇文章提供了一个非常务实的方法来处理搭建私有Docker registry时出现的各种错综复杂的情况.我们将会使用一个运行于DigitalOcean(之后简称为DO)的非常小巧

CentOS6下 Docker的镜像管理的例子

镜像是Docker的灵魂 Docker的镜像是Docker容器运行的基础.学习Docker很重要的一点是镜像的使用. 使用默认docker命令下载的镜像是外部制作好的,而我希望从头做一个镜像,并自己管理. 本文在CentOS 6下使用Docker制作镜像,对这个过程做详细的记录. 理解镜像和容器 镜像(image)和容器(container)是什么关系? 镜像是静态的,容器是动态的 容器是镜像运行起来后的体现 镜像常用命令 查看镜像 docker images 将镜像保存为tar包 docker

一步步搭建docker私有仓库并从私有仓库中下载镜像

一步步搭建docker私有仓库 #下载镜像 docker pull registry#查看镜像 docker images #运行私有仓库,指定端口和数据卷 docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registry docker.io/registry #-d表示后台运行 -p为端口映射 -v为数据卷挂载,宿主机的/opt/data/registry挂载到容器的/tmp/registry下 #访问私有仓库 curl 192.16

Docker 私有仓库恢复实例详解_docker

Docker 私有仓库恢复 之前openstack平台由于停电等影响,导致之前制作的registry 私有仓库的主机挂掉,还好数据挂载在nfs中,然后现在尝试重新启动恢复. 虚机安装nfs服务 apt-get install -y nfs-common 编辑 /etc/fstab 写入远程挂载地址 10.50.8.12:/export/DockerRepo   /var/lib/docker/registry      nfs    defaults        0 0 然后进行挂载: mou

搭建Docker私有仓库的详细教程

  1.Docker registry 说明 本文记录的个人完整搭建docker registry操作过程,官方虽然提供了Docker Hub作为一个公开的集中仓库,但是天朝的网络可想而知,第一次pull一个镜像不是失败就是时间很长,为了解决这个问题需要创建一个私有的仓库在本地pull 本地push.我使用的docker版本是:1.5.0 2.安装docker-registry 代码如下: docker run -d -e SETTINGS_FLAVOR=dev -e STORAGE_PATH=

docker学习(8) 在mac机上搭建私有仓库

docker的私有仓库类似maven的私服,一般用于公司内部搭建一个类似docker hub的环境,这样上传.下载镜像速度较快,本文将演示如何在mac上利用docker-machine搭建无需SSL证书的私有仓库. 一.查看docker-machine虚拟机IP docker-machine ip default 默认情况下docker-toolbox创建的虚拟机名称为default,如果您的虚拟机名字不是这个,上面命令最后的default换成真实的虚拟机名字,假设default分配的IP为19