docker私有仓库

docker私有仓库


ocker Registry 分类

  • Registry用于保存docker镜像,包括镜像的层次结构和元数据
  • 用户可自建Registry,也可使用官方的Docker Hub
  • 分类
    • Sponsor Registry:第三方的registry,供客户和Docker社区使用
    • Mirror Registry:第三方的registry,只让客户使用
    • Vendor Registry:由发布Docker镜像的供应商提供的registry
    • Private Registry:通过设有防火墙和额外的安全层的私有实体提供的registry

Registry(repository and index)

  • Repository
    • 由某特定的docker镜像的所有迭代版本组成的镜像仓库
    • 一个 Registry中可以存在多个Repository
      • Repository可分为“顶层仓库”和“用户仓库”
      • 用户仓库名称格式为“用户名/仓库名”
    • 每个仓库可以包含多个Tag(标签) ,每个标签对应一个镜像
    • Index
      • 维护用户帐户、镜像的校验以及公共命名空间的信息
      • 相当于为Registry提供了一个完成用户认证等功能的检索接口

docker简单的私有仓库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
[root@centos7 yum.repos.d]# yum info docker-distribution
Loaded plugins: fastestmirror, langpacks
Repository extras is listed more than once in the configuration
Loading mirror speeds from cached hostfile
* base: mirrors.huaweicloud.com
* extras: mirrors.tuna.tsinghua.edu.cn
* updates: mirrors.huaweicloud.com
Available Packages
Name : docker-distribution
Arch : x86_64
Version : 2.6.2
Release : 2.git48294d9.el7
Size : 3.5 M
Repo : extras/7/x86_64
Summary : Docker toolset to pack, ship, store, and deliver content
URL : https://github.com/docker/distribution
License : ASL 2.0
Description : Docker toolset to pack, ship, store, and deliver content

###########################################################
############################实验前提#######################
###########################################################
#说明:Docker工具集用于打包、运输、存储和交付内容

实现自建简单的docker私有仓库
两台主机间共享私用仓库
发送镜像端:172.18.135.1
distribution服务器:主机名为www.centos7.com(172.18.135.1)



####################接收镜像的节点distribution服务器#########
###############################安装docker##################
###########################################################
[root@centos7 yum.repos.d]# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@centos7 yum.repos.d]# yum install docker-ce -y

安装docker-distribution
[root@centos7 yum.repos.d]# yum install docker-distribution.x86_64
[root@centos7 ~]# systemctl start docker-distribution
[root@centos7 ~]# rpm -ql docker-distribution
/etc/docker-distribution/registry/config.yml #配置文件
/usr/bin/registry
/usr/lib/systemd/system/docker-distribution.service
/usr/share/doc/docker-distribution-2.6.2
/usr/share/doc/docker-distribution-2.6.2/AUTHORS
/usr/share/doc/docker-distribution-2.6.2/CONTRIBUTING.md
/usr/share/doc/docker-distribution-2.6.2/LICENSE
/usr/share/doc/docker-distribution-2.6.2/MAINTAINERS
/usr/share/doc/docker-distribution-2.6.2/README.md
/var/lib/registry #存储用户pull下来的所有镜像


配置文件
[root@centos7 ~]# vim /etc/docker-distribution/registry/config.yml
version: 0.1 #版本
log: #日志
fields: #存储
service: registry
storage:
cache: #使用本地内存做缓存
layerinfo: inmemory
filesystem: #用户所有pull下来的文件存放在/var/lib/registry
rootdirectory: /var/lib/registry
http: #仅提供http协议的传输
addr: :5000 #默认监听本机的所有地址的5000端口

启动docker-distribution服务

[root@centos7 ~]# systemctl start docker-distribution
[root@centos7 ~]# ss -tnl
LISTEN 0 128 :::5000 :::*
distribution的registry做的非常简单
#无用户名认证
#默认情况下不区分任何用户空间
#仅有顶层仓库,仅供公司内部临时使用


####################发送镜像端##############################
###################打标签发送###############################
###########################################################
#打标签时指明distribution服务器地址、端口(确认可以名字解析解析到distribution服务器地址)

打标签
[root@centos7 ~]# docker tag lamp:v0.1 www.centos7.com:5000/myimg:v0.1
[root@centos7 ~]# docker image ls
www.centos7.com:5000/myimg v0.1 f3c216eb1c6f 6 hours ago 279MB

上传到distribution服务器(失败原因是默认使用的https发送的请求,对端使用的是http接收双方不匹配)
[root@centos7 ~]# docker push www.centos7.com:5000/myimg:v0.1
The push refers to repository [www.centos7.com:5000/myimg]
Get https://www.centos7.com:5000/v2/: dial tcp 172.18.135.2:5000: connect: no route to host

编辑daemon.json 开启明文不安装的仓库传输,默认使用https加密协议,使用明文http协议
[root@centos7 ~]# vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://xr8r3tc3.mirror.aliyuncs.com"],
"insecure-registries": ["www.centos7.com:5000"]
}
[root@centos7 ~]# systemctl restart docker

推镜像
[root@centos7 ~]# docker push www.centos7.com:5000/myimg:v0.1
The push refers to repository [www.centos7.com:5000/myimg]
a92cb897b523: Pushed
071d8bd76517: Pushed
v0.1: digest: sha256:274298eab95626cb7c4f0bbb7684d813037650bc11b527e6f31c99910ae28e68 size: 741

####################接收镜像的节点distribution服务器#########
###############################安装docker##################
###########################################################
查看是否推送成功
[root@centos7 ~]# ls /var/lib/registry/
docker
root@centos7 ~]# tree /var/lib/registry/
/var/lib/registry/
└── docker
└── registry
└── v2
├── blobs
│   └── sha256
│   ├── 27
│   │   └── 274298eab95626cb7c4f0bbb7684d813037650bc11b527e6f31c99910ae28e68
│   │   └── data
│   ├── a0
│   │   └── a02a4930cb5d36f3290eb84f4bfa30668ef2e9fe3a1fb73ec015fc58b9958b17
│   │   └── data
│   ├── ab
│   │   └── ab9147d4eb81842f3eccbb7c75ef8cad91a9dadfd22233050acae0d2f37d9fba
│   │   └── data
│   └── f3
│   └── f3c216eb1c6f3fe2e271835d79e94e9ede430d7cd75f9734cf44dd9c5fbf095c
│   └── data
└── repositories
└── myimg
├── _layers
│   └── sha256
│   ├── a02a4930cb5d36f3290eb84f4bfa30668ef2e9fe3a1fb73ec015fc58b9958b17
│   │   └── link
│   ├── ab9147d4eb81842f3eccbb7c75ef8cad91a9dadfd22233050acae0d2f37d9fba
│   │   └── link
│   └── f3c216eb1c6f3fe2e271835d79e94e9ede430d7cd75f9734cf44dd9c5fbf095c
│   └── link
├── _manifests
│   ├── revisions
│   │   └── sha256
│   │   └── 274298eab95626cb7c4f0bbb7684d813037650bc11b527e6f31c99910ae28e68
│   │   └── link
│   └── tags
│   └── v0.1
│   ├── current
│   │   └── link
│   └── index
│   └── sha256
│   └── 274298eab95626cb7c4f0bbb7684d813037650bc11b527e6f31c99910ae28e68
│   └── link
└── _uploads

31 directories, 10 files

使用此镜像(可以解析到本机域名)
#本身也不支持httpds修改daemon.json
[root@centos7 ~]# cat /etc/docker/daemon.json
{
"registry-mirrors": ["https://xr8r3tc3.mirror.aliyuncs.com"],
"insecure-registries":["www.centos7.com:5000"]
}
[root@centos7 ~]# systemctl restart docker
[root@centos7 ~]# docker info
[root@centos7 ~]# docker pull www.centos7.com:5000/myimg:v0.1
[root@centos7 ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
www.centos7.com:5000/myimg v0.1 f3c216eb1c6f 7 hours ago 279MB

-------------------------------------------------------------------------
将别人的镜像推送到自己的仓库中使用(本地的centos7打个标签传到自己本地的仓库)
[root@centos7 ~]# docker tag centos:7 www.centos7.com:5000/centos:7
[root@centos7 ~]# docker image ls
www.centos7.com:5000/myimg v0.1 f3c216eb1c6f 7 hours ago 279MB
[root@centos7 ~]# docker push www.centos7.com:5000/centos:7

Harbor

源代码托管在github:https://github.com/goharbor/harbor

  • Harbor是一个开源的可信云本机注册表项目,用于存储,签名和扫描内容。Harbor通过添加用户通常需要的功能(如安全性,身份和管理)来扩展开源Docker Distribution。使注册表更接近构建和运行环境可以提高图像传输效率。Harbor支持在注册表之间复制映像,还提供高级安全功能,如用户管理,访问控制和活动审计。

  • Harbour由Cloud Native Computing Foundation(CNCF)托管。如果您是一个希望帮助塑造云原生技术发展的组织,请考虑加入CNCF。有关谁参与以及Harbour如何扮演角色的详细信息,请阅读CNCF 公告。

  • 系统要求:

    • 在Linux主机上: docker 17.03.0-ce +和docker-compose 1.10.0+。

    • 下载Harbor版本的二进制文件,然后按照安装和配置指南安装Harbour。

    • 如果您想在Kubernetes上部署Harbour,请使用Harbor图表。

    • 有关如何使用Harbor的更多详细信息,请参阅用户指南。




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#Harbor服务传输使用的也是https协议传输,可以将此功能关掉,生产中若使用Harbor建议启用https加密以及从节点复制功能。
港口可以通过以下三种方法之一安装:
1.在线安装程序:安装程序从Docker hub下载Harbor的图像。因此,安装程序的尺寸非常小。
2.脱机安装程序:当主机没有Internet连接时使用此安装程序。安装程序包含预先构建的图像,因此其大小更大。

安装步骤归结为以下内容:
1.下载安装程序
2.配置harbor.cfg
配置参数位于文件harbor.cfg中。
在harbor.cfg中有两类参数,必需参数和可选参数
3.运行install.sh安装并启动Harbor

第一步:
安装docker-compose(epel源)
[root@centos7 ~]# yum install docker-compose

第二步:
下载离线安装程序包,并解压
下载地址:https://storage.googleapis.com/harbor-releases/release-1.7.0/harbor-offline-installer-v1.7.0.tgz
[root@centos7 local]# pwd
/usr/local
[root@centos7 local]# tar xvf harbor-offline-installer-v1.7.0.tgz

第三步:编辑harbor配置文件、并运行装载harbor(详细设置参考github中harbor安装手册)
[root@centos7 harbor]# pwd
/usr/local/harbor
[root@centos7 harbor]# vim harbor.cfg
8行 hostname = www.centos7.com #修改主机名,确保此名称可以解析
[root@centos7 harbor]# systemctl start docker #运行 ./install.sh 前确保docker已经启动
[root@centos7 harbor]# pwd
/usr/local/harbor
[root@centos7 harbor]# ./install.sh
[root@centos7 harbor]# docker image ls #可以查看默认的离线下载下来的镜像

第四步:此时默认的运行的https容器已经启动,以及访问查看
[root@centos7 harbor]# ss -tnl #监听的端口默认映射为宿主机的端口
LISTEN 0 128 :::80 :::*
LISTEN 0 128 :::443 :::*
LISTEN 0 128 :::4443 :::*

http://172.18.135.2/harbor/sign-in
#使用默认的账号和密码登陆
账号admin
密码Harbor12345


1
自己创建账号并定义项目名称并向自己定义的仓库中推送镜像


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
第五步:推送镜像到自己创建的harbor仓库中
[root@centos7 harbor]# vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://xr8r3tc3.mirror.aliyuncs.com"],
"insecure-registries":["www.centos7.com"]
}
[root@centos7 harbor]# systemctl restart docker

查看本地已有的镜像
[root@centos7 harbor]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
goharbor/harbor-db v1.7.0 45d94fe5fee5 3 weeks ago 133MB

打标签
[root@centos7 harbor]# docker tag goharbor/harbor-db:v1.7.0 www.centos7.com/public/harbor:v0.1

登陆、推送到harbor
[root@centos7 harbor]# docker login www.centos7.com
Username: daizhe
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
[root@centos7 harbor]# docker push www.centos7.com/public/harbor:v0.1

-------------------码字不易尊重原创转载标注不胜感激-------------------
Yes or no?
0%