Ubuntu 搭建docker registry 私有仓库
一、为什么要搭建 docker 私有仓库
原因有几个:
- 项目需要,不希望将项目放到 docker hub 上。
- 环境需求,考虑网络、效率的问题,希望在私有服务器上建立自用的仓库,提高便利性和访问速度。
- 可以做更多的个性化配置。
二、用什么搭建 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 私有仓库的更多相关文章
- 快速搭建Docker Registry私有仓库
前提条件: 服务器已经安装Docker(我的服务器是CentOS 7) 服务器已经安装Docker Compose 满足以上条件时就可以开始搭建了: 1. 生成用户密码文件:(运行下面命令后会在当前目 ...
- 搭建docker registry私有镜像仓库
搭建docker registry私有镜像仓库 一.安装docker-distribution yum install -y docker-distribution 安装完成后,启动服务: syste ...
- Docker registry 私有仓库镜像查询、删除、上传、下载 shell
#Docker官方私有仓库registry #官方只提供了API接口,不方便使用,就写了个shell #docker-registry安装配置http://www.cnblogs.com/elvi/p ...
- Docker registry私有仓库(七)
Docker registry私有仓库搭建基本几步流程(采用nginx+认证的方式) 1. 申请免费的ssl证书 https://buy.wosiqn.com/free 2. 设置nginx ssl证 ...
- centos 7.1搭建docker本地私有仓库返回500错误
之前有一篇写到在ubuntu14.04系统上安装私有仓库,遇到了两个问题,本次在centos7上遇到了另外一个问题. 安装完仓库并运行registry镜像之后发现push和pull操作都会返回一个50 ...
- docker registry私有仓库部署
私有仓库服务端:12.40[root@centos7_golang ~]# docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registry ...
- docker registry 私有仓库 安装配置、查询、删除
#++++++++++++++++++++++++++++++ #docker-registry 私有仓库 #搜索,下载register镜像 docker search registry docker ...
- CentOS搭建Docker Hub私有仓库
docker pull registry拉取registry镜像 docker images查看镜像 docker run -d -p 5000:5000 -v /opt/data/registry: ...
- 8. docker image 的发布 与 docker registry 私有仓库
一.分享image 1.注册 登陆 docker hub https://hub.docker.com/ 2.在本地 使用 docker login 输入 注册的账号密码 进行登陆 3.使用 dock ...
随机推荐
- 五、java面向对象编程_3
目录 十五.Object类 1.toString 2.equals 十六.对象转型(casting) 十七.动态绑定(多态) 十八.抽象类(abstract) 十九.final关键字 二十.接口 十五 ...
- Laravel 返回 JSON 格式
第一种方法: 第一步.编写 BaseRequest首先我们需要构建一个 BaseRequest 来重写 Illuminate\Http\Request ,修改为默认优先使用 JSON 响应: app/ ...
- K8S从私有仓库拉取镜像
通常来讲,我们在通过公共镜像仓库拉取docker镜像的时候,不需要任何的认证操作,但我们在构建了企业的私有镜像以后,就不得不在拉取镜像之前通过用户名密码来完成认证. 在docker单机环境中,我们可以 ...
- Windows服务的安装和卸载
## install %SystemRoot%\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe ***Cache.WinService.exe # ...
- noip2012 P1081 开车旅行
小 A 和小 B 决定利用假期外出旅行,他们将想去的城市从 1 到 N 编号,且编号较小的城市在编号较大的城市的西边,已知各个城市的海拔高度互不相同,记城市 i 的海拔高度为Hi,城市 i 和城市 j ...
- SQL SERVER 视图优化经历
系统中要求对HIS数据进行效益统计,因为HIS数据是需要第三方提供接口导入的,不清楚数据量大小,所以视图以业务为主未对其做性能优化(当时编写试图时就是几条简单的测试数据) 如今在项目接口实施完成后查看 ...
- Java编程思想 4th 第1章 对象导论
所有编程语言都提供抽象机制. 面向对象编程似乎是一种很好的编程思想和方式,面向对象编程中的对象简洁描述是:对象具有状态.行为和标识.状态指的是数据存储,存储的数据能反应状态:行为指的是方法,方法表示对 ...
- Electron 开发环境下总是 crash
全局安装一个 electron devtool 关掉 崩溃时选择重新打开
- Spring4笔记2--Spring的第一个程序
Spring程序开发: 1. 导入jar包(略) 2. 创建Spring配置文件: Spring 配置文件的文件名可以随意,但 Spring 建议的名称为 applicationContext.xml ...
- java后台中处理图片辅助类汇总(上传图片到服务器,从服务器下载图片保存到本地,缩放图片,copy图片,往图片添加水印图片或者文字,生成二维码,删除图片等)
最近工作中处理小程序宝箱活动,需要java画海报,所以把这块都快百度遍了,记录一下处理的方法,百度博客上面也有不少坑! 获取本地图片路径: String bgPath = Thread.current ...