一、为什么要搭建 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. rovio视觉里程计的笔记

    rovio是一个紧耦合,基于图像块的滤波实现的VIO. 他的优点是:计算量小(EKF,稀疏的图像块),但是对应不同的设备需要调参数,参数对精度很重要.没有闭环,没有mapping thread.经常存 ...

  2. jQuery速看

    本文参考w3school网站. jQuery是一个十分流行的javascript库. 基础语法是:$(selector).action() $:表示使用的语法为jquery selector:选择器 ...

  3. python常用模块(3)

    ConfigParser模块学习 ConfigParser模块在python中是用来读取配置文件,配置文件的格式跟windows下的ini配置文件相似,可以包含一个或多个节(section),每个节可 ...

  4. KVM管理概述

    一.使用QEMU管理虚拟机 1.KVM指南 https://activedoc.opensuse.org/book/opensuse-virtualization-with-kvm/part-iii- ...

  5. NO.11天作业

    打印uid在30~40范围内的用户名.awk -F: '$3>=30 && $3<=40{print $1,$3}' /etc/passwd 打印第5-10行的行号和用户名 ...

  6. SQL语句(十九)——存储过程(练习)

    select * From Student select * From Course select * from SC --INSERT INTO SC (Sno, Cno, Grade) --VAL ...

  7. CodeForces 816C 思维

    On the way to school, Karen became fixated on the puzzle game on her phone! The game is played as fo ...

  8. Eclipse中如何改变主题

    童鞋们, eclipse主题太丑?想设置护眼的主题? 看看这些主题: 请移驾: Eclipse Color Themes 怎么设设置? 1. 打开”eclipse marketplace“, 如下图: ...

  9. shell脚本-监控及邮件提醒

    首先写一个邮件提醒python文件 #!/usr/bin/python # -*- coding: UTF-8 -*- import sys import smtplib import email.m ...

  10. js 禁用右键菜单、拖拽、选中、复制

    //禁用拖拽 document.ondragstart = function () { return false; }; /** * 禁用右键菜单 */ document.oncontextmenu ...