您的位置:首页 > 运维架构 > Docker

使用Docker Registry搭建Docker私有仓库-极简

2017-07-26 15:24 1131 查看
https://docs.docker.com/registry/#tldr

官方文档:

Docker Registry

This image contains an implementation of the Docker Registry HTTP API V2 for use with Docker 1.6+. See

github.com/docker/distribution

for more details about what it is.

Run a local registry: Quick Version

$ docker run -d -p 5000:5000 --restart always --name registry registry:2


访问本地5000端口,看到返回成功(200OK)

$
curl -i 127.0.0.1:5000/v2/


Now, use it from within Docker:

$ docker pull ubuntu
$ docker tag ubuntu localhost:5000/ubuntu
$ docker push localhost:5000/ubuntu


&&

Reference:http://www.10tiao.com/html/357/201611/2247484690/1.html

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

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

$
docker run -d -v /opt/docker-registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry


Registry服务默认会将上传的镜像保存在容器的/var/lib/registry,我们将主机的/opt/docker-registry目录挂载到该目录,即可实现将镜像保存到主机的/opt/docker-registry/目录了。

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

$
docker ps -a


CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

131155da6e75 registry “/entrypoint.sh /etc/” 5 minutes ago Up 5 minutes 0.0.0.0:5000->5000/tcp registry

访问私有仓库

$
**curl 127.0.0.1:5000/v2/_catalog**


{“repositories”:[]}

因为我们还没有像私有容器提交镜像,所以这里返回空,下面我们提交一个镜像试试,上面可以看到我本地有一个registry的镜像

PUSH镜像

设置标签到本地的私有镜像

命令格式为

docker tag IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]

$
docker tag debian 127.0.0.1:5000/debian


$
docker images


REPOSITORY TAG IMAGE ID CREATED SIZE

127.0.0.1:5000/debian latest 73e72bf822ca 13 days ago 123 MB

debian latest 73e72bf822ca 13 days ago 123 MB

registry latest c9bd19d022f6 4 weeks ago 33.3 MB

nginx latest a5311a310510 5 weeks ago 181.5 MB

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

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

$
docker push 127.0.0.1:5000/debian


The push refers to a repository [127.0.0.1:5000/debian]

fe4c16cbf7a4: Pushed

latest: digest: sha256:c1ce85a0f7126a3b5cbf7c57676b01b37c755b9ff9e2f39ca88181c02b985724 size: 529

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

$ curl 127.0.0.1:5000/v2/_catalog


{“repositories”:[“debian”]}

可以看到一个叫debian的镜像存在了,其他服务器就可以来下载这个镜像使用了。

从其它服务器上面拉取镜像

$ docker pull 192.168.3.79:5000/debian

$ docker images


REPOSITORY TAG IMAGE ID CREATED SIZE

192.168.3.79:5000/debian latest 73e72bf822ca 13 days ago 123 MB

可能存在的问题

出现无法从私有仓库pull镜像或无法push到私有仓库的问题,类似如下报错。

$ docker pull 192.168.3.79:5000/debian


Using default tag: latest

Error response from daemon: Get https://192.168.3.79:5000/v1/_ping: http: server gave HTTP response to HTTPS client

这是因为我们启动的registry服务不是安全可信赖的。这是我们需要修改docker的配置文件/etc/default/docker,添加下面的内容,

$ vim /etc/default/docker


DOCKER_OPTS="--insecure-registry 182.168.3.79:5000"


然后重启docker后台进程,

$ sudo service docker restart


然后再PULL即可。

其它技巧

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

$ wget https://github.com/yeasy/docker_practice/raw/master/_local/push_images.sh

chmoda+xpushimages.sh dos2unix push_images.sh #这个脚本换行有点问题,需要先转换成Linux下的换行。

$ ./push_images.sh ubuntu:latest centos:centos7

将本地更新后的容器,提交到私有仓库

记录容器ID

$ docker ps

将容器更新提交到镜像:

$ docker commit -m “Add vim” 69e873e0c48e 127.0.0.1:5000/ubuntu

Push到私有仓库

$ docker push 127.0.0.1:5000/ubuntu
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  docker-私有仓库