一、为什么要搭建 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. golang单元测试

    使用testing进行单元测试 golang的测试库testing 测试文件与被测试文件在同一个包中 测试文件名为被测试文件名(去后缀)_test.go 测试用例函数以Test开头,TestFunc1 ...

  2. Activiti工作流的应用示例

    1.新建流程模型 模型管理->模型工作区 点击"创建"后会立即跳转到"流程在线设计器"页面,请参考下一节 2.在线流程设计器 模型管理->模型工作区 ...

  3. Centos 7安装Python3.6

    1> 安装python3.6可能使用的依赖 yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel ...

  4. mysql查改

    1 MySQL UNION 操作符语法格式: SELECT expression1, expression2, ... expression_n FROM tables [WHERE conditio ...

  5. Java泛型底层源码解析--ConcurrentHashMap(JDK1.7)

    1. Concurrent相关历史 JDK5中添加了新的concurrent包,相对同步容器而言,并发容器通过一些机制改进了并发性能.因为同步容器将所有对容器状态的访问都串行化了,这样保证了线程的安全 ...

  6. 科学计算三维可视化---TVTK入门(安装与测试)

    推文:http://docs.huihoo.com/scipy/scipy-zh-cn/tvtk_intro.html 推文:http://code.enthought.com/pages/mayav ...

  7. ZeroMQ API(四) 套接字

    1.创建一个套接字 1.1 zmq_socket(3) 1.1.1 名称 zmq_socket - 创建ZMQ套接字 1.1.2 概要 void * zmq_socket(void * context ...

  8. Java实现各种内部排序算法

    数据结构中常见的内部排序算法: 插入排序:直接插入排序.折半插入排序.希尔排序 交换排序:冒泡排序.快速排序 选择排序:简单选择排序.堆排序 归并排序.基数排序.计数排序 直接插入排序: 思想:每次将 ...

  9. 2014年最佳的10款 PHP 开发框架

    PHP去年发生了翻天覆地的变化.似乎每个人都有一个想法一个好的框架应该是什么样子,但话又说回来,没有多少面积制品类型的框架或框架的最终实际使用在不同的生产项目. 你知道哪个框架选择为您的生产计划吗?你 ...

  10. 把JS和CSS合并到1个文件

    合并JS文件和CSS文件很多人都知道,也用过,目的是为了减少请求数.但有时候我们觉的把JS合并到1个文件,CSS又合并到另外1个文件也是浪费,我们如何能把CSS和JS一起合并进1个文件了? 这里需要使 ...