一、为什么要搭建 docker 私有仓库

原因有几个:

  1. 项目需要,不希望将项目放到 docker hub 上。
  2. 环境需求,考虑网络、效率的问题,希望在私有服务器上建立自用的仓库,提高便利性和访问速度。
  3. 可以做更多的个性化配置。

二、用什么搭建 docker 私有仓库

docker 官方提供了 registry 的镜像,可以使用它来建私有仓库。

三、搭建过程

环境介绍

系统 IP 角色
ubuntu-16.04.5-server-amd64 192.168.91.129 docker 客户端服务器
ubuntu-16.04.5-server-amd64 192.168.91.131 docker 仓库服务器

安装docker

2台服务器,都安装docker

apt-get install -y docker.io

配置阿里云docker加速器

2台服务器都 编辑配置文件

vim /etc/docker/daemon.json 

内容如下:

{
"registry-mirrors": [
"https://kv3qfp85.mirror.aliyuncs.com"
]
}

2台服务器都 重启docker服务

systemctl restart docker

拉取registry仓库docker镜像

在131服务器 拉取镜像

docker pull registry

默认会拉取最新版本,访问以下链接:

https://hub.docker.com/_/registry/

版本应该是2.6.2

创建registry docker进程

docker run -d --name docker-registry --restart=always -p : registry

参加解释:

-d 后台运行

--name 镜像名称起别名

--restart=always 在容器退出时总是重启容器,注意:在生产环境中,要启用这个参数

-p 映射端口,规则是, 真实机端口:容器端口

四、测试上传镜像

下载测试镜像

登录到129服务器,下载一个镜像,比如alpine

docker pull alpine

将alpine镜像重命名为本地镜像格式与本地registry相匹配。

镜像名称由registry和tag两部分组成,registry完整格式:[registry_ip]:[registry:port]/[user]/[image_name:version]

docker tag alpine 192.168.91.131:/alpine

上传测试镜像

docker push 192.168.91.131:/alpine

输出:

The push refers to a repository [192.168.91.131:/alpine]
Get https://192.168.91.131:5000/v1/_ping: http: server gave HTTP response to HTTPS client

因为Docker从1.3.X之后,与docker registry交互默认使用的是https,然而此处搭建的私有仓库只提供http服务,所以当与私有仓库交互时就会报上面的错误。

解决https错误

关于解决https错误,众说纷纭。什么修改/etc/default/docker,修改/etc/init/docker.conf,修改/lib/systemd/system/docker.service...

我测试了一下,貌似没有成功!

下面说能成功的方法。

修改daemon.json

注意:2台服务器都需要修改!

vim /etc/docker/daemon.json 

增加 insecure-registries,完整内容如下:

{
"registry-mirrors": [
"https://kv3qfp85.mirror.aliyuncs.com"
],
"insecure-registries": [
"192.168.91.131:5000"
]
}

insecure-registries 是一个列表,你可以增加多个。

重启docker服务

systemctl restart docker

再次执行

root@jqb-node129:~# docker push 192.168.91.131:5000/alpine
The push refers to a repository [192.168.91.131:/alpine]
df64d3292fd6: Pushed
latest: digest: sha256:b6459ba7992adb5d76a7962e84909e1b3aaf029fbd8cb94131e8cbe464b6cd04 size:

登录到131服务器,查看镜像

注意:私有仓库中的镜像不是直接docker images查看的,而是访问url

比如:

curl -XGET http://registry地址:5000/v2/_catalog
curl -XGET http://registry地址:5000/v2/镜像名/tags/list

先执行第一个,查看现有的镜像

root@jqb-node129:~# curl -XGET http://192.168.91.131:5000/v2/_catalog
{"repositories":["alpine"]}

查看alpine镜像的信息

root@jqb-node129:~# curl -XGET http://192.168.91.131:5000/v2/alpine/tags/list
{"name":"alpine","tags":["latest"]}

docker 官方的 registry 仓库,默认是不支持从其他客户端拉取服务器仓库的镜像文件的,不过简单的办法,就是设置insecure-registry 参数。

五、镜像删除

官方提供了删除镜像的API

DELETE /v2/<name>/manifests/<reference>

name:镜像名称

reference: 镜像对应sha256值

重点是:镜像对应sha256值,计算非常麻烦。

所以这里使用第三方插件来删除

第三方插件删除

插件github上的位置:

https://github.com/burnettk/delete-docker-registry-image

下载资源

curl https://raw.githubusercontent.com/burnettk/delete-docker-registry-image/master/delete_docker_registry_image.py | sudo tee /usr/local/bin/delete_docker_registry_image >/dev/null

设置权限

chmod a+x /usr/local/bin/delete_docker_registry_image 

设置相关环境变量

先来搜索registry

root@jqb-node131:~# find / -name registry
/usr/share/vim/registry
/var/lib/docker/volumes/518c02aa36ce326f1dcc5cc397d21f621b28e690b864ca3d36e474a4d657ea13/_data/docker/registry
/var/lib/docker/aufs/diff/d4f4fd0107a55fa3b608a4ff9b13a94b2246b0eb212714b8b61bf8e383a062e8/var/lib/registry
/var/lib/docker/aufs/diff/bc0dbcfaf524ebed6a9957d3b7e81847f0f3eb3caee1936035f61bf734e82636/etc/docker/registry
/var/lib/docker/aufs/diff/693c5a102cda676001a36d96b988a3967734123d788df90ffd5d90af43dfcff2/bin/registry
/var/lib/docker/aufs/diff/d60ed6fa449324e4075ae7bbff41b31c36a80c4e5a5fa8fabbc4e07436ee8bf6/var/lib/registry
/var/lib/docker/aufs/mnt/d60ed6fa449324e4075ae7bbff41b31c36a80c4e5a5fa8fabbc4e07436ee8bf6/var/lib/registry
/var/lib/docker/aufs/mnt/d60ed6fa449324e4075ae7bbff41b31c36a80c4e5a5fa8fabbc4e07436ee8bf6/etc/docker/registry
/var/lib/docker/aufs/mnt/d60ed6fa449324e4075ae7bbff41b31c36a80c4e5a5fa8fabbc4e07436ee8bf6/bin/registry
/var/lib/ucf/registry

从上面搜索结果中,有很多。这么多目录,那一个才是真正的呢?

末尾带有_data/docker/registry才是真正的存储目录

查看这个目录,进一步查看v2/repositories

root@jqb-node131:~# ll /var/lib/docker/volumes/518c02aa36ce326f1dcc5cc397d21f621b28e690b864ca3d36e474a4d657ea13/_data/docker/registry/v2/repositories/
total
drwxr-xr-x root root Nov : ./
drwxr-xr-x root root Nov : ../
drwxr-xr-x root root Nov : alpine/

就可以发现 alpine了,就是客户端上传的镜像。

设置环境变量注意:要去掉上面路径中末尾的repositories

export REGISTRY_DATA_DIR=/var/lib/docker/volumes/518c02aa36ce326f1dcc5cc397d21f621b28e690b864ca3d36e474a4d657ea13/_data/docker/registry/v2/

直接删除镜像

先来查看一下镜像列表

root@jqb-node131:~# curl http://192.168.91.131:5000/v2/_catalog
{"repositories":["alpine"]}

再查看alpine的tag

root@jqb-node131:~# curl http://192.168.91.131:5000/v2/alpine/tags/list
{"name":"alpine","tags":["latest"]}

之后就可以直接删除:

语法:

delete_docker_registry_image --image 镜像名:版本

例如:

root@jqb-node131:~# delete_docker_registry_image --image alpine:latest

输出如下:

INFO     [-- ::,]  Deleting /var/lib/docker/volumes/518c02aa36ce326f1dcc5cc397d21f621b28e690b864ca3d36e474a4d657ea13/_data/docker/registry/v2/blobs/sha256/b6/b6459ba7992adb5d76a7962e84909e1b3aaf029fbd8cb94131e8cbe464b6cd04
INFO [-- ::,] Deleting /var/lib/docker/volumes/518c02aa36ce326f1dcc5cc397d21f621b28e690b864ca3d36e474a4d657ea13/_data/docker/registry/v2/blobs/sha256//196d12cf6ab19273823e700516e98eb1910b03b17840f9d5509f03858484d321
INFO [-- ::,] Deleting /var/lib/docker/volumes/518c02aa36ce326f1dcc5cc397d21f621b28e690b864ca3d36e474a4d657ea13/_data/docker/registry/v2/blobs/sha256/2b/2bc1c5ee86055a39979b389170e9638262b2e11e1761403e5e0321101f96b427
INFO [-- ::,] Deleting /var/lib/docker/volumes/518c02aa36ce326f1dcc5cc397d21f621b28e690b864ca3d36e474a4d657ea13/_data/docker/registry/v2/repositories/alpine

再看一下本地仓库的镜像有几个

root@jqb-node131:~# curl http://192.168.91.131:5000/v2/_catalog
{"repositories":[]}

发现已经为空了!

本文参考链接:

http://blog.51cto.com/wangpengtai/2093613

https://blog.csdn.net/tototuzuoquan/article/details/82025954

Ubuntu 搭建docker registry 私有仓库的更多相关文章

  1. 快速搭建Docker Registry私有仓库

    前提条件: 服务器已经安装Docker(我的服务器是CentOS 7) 服务器已经安装Docker Compose 满足以上条件时就可以开始搭建了: 1. 生成用户密码文件:(运行下面命令后会在当前目 ...

  2. 搭建docker registry私有镜像仓库

    搭建docker registry私有镜像仓库 一.安装docker-distribution yum install -y docker-distribution 安装完成后,启动服务: syste ...

  3. Docker registry 私有仓库镜像查询、删除、上传、下载 shell

    #Docker官方私有仓库registry #官方只提供了API接口,不方便使用,就写了个shell #docker-registry安装配置http://www.cnblogs.com/elvi/p ...

  4. Docker registry私有仓库(七)

    Docker registry私有仓库搭建基本几步流程(采用nginx+认证的方式) 1. 申请免费的ssl证书 https://buy.wosiqn.com/free 2. 设置nginx ssl证 ...

  5. centos 7.1搭建docker本地私有仓库返回500错误

    之前有一篇写到在ubuntu14.04系统上安装私有仓库,遇到了两个问题,本次在centos7上遇到了另外一个问题. 安装完仓库并运行registry镜像之后发现push和pull操作都会返回一个50 ...

  6. docker registry私有仓库部署

    私有仓库服务端:12.40[root@centos7_golang ~]# docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registry ...

  7. docker registry 私有仓库 安装配置、查询、删除

    #++++++++++++++++++++++++++++++ #docker-registry 私有仓库 #搜索,下载register镜像 docker search registry docker ...

  8. CentOS搭建Docker Hub私有仓库

    docker pull registry拉取registry镜像 docker images查看镜像 docker run -d -p 5000:5000 -v /opt/data/registry: ...

  9. 8. docker image 的发布 与 docker registry 私有仓库

    一.分享image 1.注册 登陆 docker hub https://hub.docker.com/ 2.在本地 使用 docker login 输入 注册的账号密码 进行登陆 3.使用 dock ...

随机推荐

  1. hdu 6311 欧拉回路

    题意:求一个图(不一定联通)最小额外连接几条边,使得可以一笔画出来 大致做法 1.找出联通块 2.统计每一个连通块里面度数为奇数的点的个数, 有一个性质 一个图能够用一笔画出来,奇数点的个数不超过2个 ...

  2. Java入门:创建多个对象

    当使用一个类实例化多个对象时,多个对象之间是什么关系?他们各自的数据会不会发生混淆?这次课跟大家讲解一下这个问题.学完本次课,大家应该对对象在内存中的表示方式有一个初步的了解,为理解更深入的面向对象概 ...

  3. redis 新开端口号

    2012 ps aux | grep redis 2013 cd /usr/local/redis/ 2014 ls 2015 cd etc/ 2016 ls 2017 cp redis.conf r ...

  4. java.lang.AutoCloseable

    java.lang.AutoCloseable和java.io.Closeable public interface AutoCloseable { void close() throws Excep ...

  5. Zabbix监控PV和UV

    Zabbix-server:172.21.97.153 Zabbix-agent(Nginx):172.17.27.61 # Nginx日志如下: # head -3 Syz.access.log w ...

  6. Django 2.0.1 官方文档翻译: 文档目录 (Page 1)

    Django documentation contents 翻译完成后会做标记. 文档按照官方提供的内容一页一页的进行翻译,有些内容涉及到其他节的内容,会慢慢补上.所有的翻译内容按自己的理解来写,尽量 ...

  7. HDU 1242 Rescue (广搜)

    题目链接 Problem Description Angel was caught by the MOLIGPY! He was put in prison by Moligpy. The priso ...

  8. 倍增 Tarjan 求LCA

                                                                                                         ...

  9. 对string 的操作

    相信使用过MFC编程的朋友对CString这个类的印象应该非常深刻吧?的确,MFC中的CString类使用起来真的非常的方便好用.但是如果离开了MFC框架,还有没有这样使用起来非常方便的类呢?答案是肯 ...

  10. 使用httpClient调用接口,参数用map封装或者使用JSON参数,并转换返回结果

    这里接口用表存起来,标记请求方式,然后接受参数,消息或者请求参数都可以, 然后先是遍历需要调用的接口,封装参数,再分别调用get与post即可,没有微服务还是得自己写 //消息转发-获取参数中对应参数 ...