docker私有仓库docker-registry搭建

关于docker-registry

The Registry is a stateless, highly scalable server side application that stores and lets you distribute Docker images. The Registry is open-source, under the permissive Apache license.(docker documents) docker-registry是一个无状态的、可高度伸缩的服务器端应用程序,可以存储并允许您分发docker 镜像。docker-registry是开源的,是Apache许可证所允许的。

使用互联网上的的registry会受到网络因素的跟大影响,在pull 和push 时速度会不尽人意,在生产环境中并行启动的容器不会只有一两个会是几十上百个,而且并不能保证docker host 本地拥有所需要的所有镜像,所以通过互联网去下载就无法做到快速启动了很明显违背了容器轻量快速部署的初衷,此时就要自己在本地搭建私有registry。如果运维的系统环境托管在云服务上例如阿里云,那我们就去使用阿里的registry服务,也就是说将其建在生产环境的服务器的局域网中以达到更快的目的。

在Docker Hub中有registry镜像,pull下来即可使用,用法在上一篇博客中已经说到

docker-registry安装

还有一种简单的方法就是Docker 提供了一个docker-distribution程序包 我们直接yum安装即可

查看其安装生成的文件

config.yml 是配置文件,registry是主程序,启动服务是docker-distribution.services, 数据存储在/var/lib/registry

在config.yml中可以修改缓存、存储路径、监听端口等,如果作为专门的rigistry应该把端口改成80或者https的443

1
systemctl start docker-distribution  //启动服务

然后就可以push镜像了

在另外一台主机上向刚搭建好的registry推送镜像

推送之前还应该说一下docker镜像的命名规则

The Docker Registry is a component of Docker’s ecosystem. A registry is a storage and content delivery system, holding named Docker images, available in different tagged versions. For example, the image distribution/registry, with tags 2.0 and latest. Users interact with a registry by using docker push and pull commands such as docker pull myregistry.com/stevvooe/batman:voice.Docker Hub is an instance of a Docker Registry.

Docker仓库是Docker生态系统的一部分。registry是一个存储和交付系统,支持命名镜像,存在不同的标记版本。例如一个镜像 distribution/registry 拥有2.0 和latest标记。用户和registry交互使用docker push 和docker pull命令例如:docker pull myregistry.com/stevvooe/batman:voice.Docker Hub是docker registry的一个实例。

也就是说用仓库名加标签来唯一标识一个镜像,只不过平常我们使用docker pull centos 时,docker.io为默认域名,latest为默认标签即docker pull docker.io/library/centos:latest

所以在我们docke push 镜像时,同样也要遵守命名规则

我们使用docker tag 进行打标

1
docker tag hadoop web1:5000/hadoop:1.0  这里使用顶层仓库
1
2
3
root@ubuntu16:~# docker push web1:5000/hadoop:1.0
The push refers to a repository [web1:5000/hadoop]
Get https://web1:5000/v1/_ping: http: server gave HTTP response to HTTPS client

报错为 http服务器响应https客户端,docker push 默认基于https协议工作,服务器端支持http ,二者不兼容。

我们搭建的是内网的仓库使用http协议就可以,修改客户端的docker daemon

1
2
3
4
vim /etc/docker/daemon.json
{ "insecure-registries" : ["web1:5000"]
}
systemctl restart docker

再去docker push 就可以了

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
[root@Web2 registry]# tree /var/lib/registry/
/var/lib/registry/
└── docker
└── registry
└── v2
├── blobs
│ └── sha256
│ ├── 09
│ │ └── 09d6e0703b59972f3832b563f62afeb0a4d952d79724c933543b4ecd389ac7c3
│ │ └── data
│ ├── 53
│ │ └── 5301edc7ec17551bb197f15b3e9708231924392df6d403ac22cc897da75c6c5b
│ │ └── data
│ ├── 7c
│ │ └── 7cab4876127f1e8ad7460cc656f61e7203cf8a04cebb5585c1e29f1c097266e9
│ │ └── data
│ ├── 89
│ │ └── 8916107b7faec7a28f9bfb0d59579a51b8b9f80835b0ed134f5f511deae095be
│ │ └── data
│ ├── 95
│ │ └── 95acc0e10968e9babf3a942a085279db4269728c4c77f8f3a7d5e208108908c6
│ │ └── data
│ ├── 96
│ │ └── 967a799109e4d74670438c51aba1b270c0f72caca675342acc955512f11e7459
│ │ └── data
│ ├── a1
│ │ └── a185367e7bddc7bb3f22e43f388c0e9aefb2e6b679d2cbed1a3c7ff1f584dbf1
│ │ └── data
│ ├── a4
│ │ └── a4dd3fbaa1db732a34a7ecf2e1f40a095aab3dab94109fd7c628c8966071944e
│ │ └── data
│ └── f4
│ └── f4236122778c0399bad22e265f9c017b5eb6aaead18ea21a21f5c0d9c97e907f
│ └── data
└── repositories
└── hadoop
├── _layers
│ └── sha256
│ ├── 09d6e0703b59972f3832b563f62afeb0a4d952d79724c933543b4ecd389ac7c3
│ │ └── link
│ ├── 5301edc7ec17551bb197f15b3e9708231924392df6d403ac22cc897da75c6c5b
│ │ └── link
│ ├── 7cab4876127f1e8ad7460cc656f61e7203cf8a04cebb5585c1e29f1c097266e9
│ │ └── link
│ ├── 8916107b7faec7a28f9bfb0d59579a51b8b9f80835b0ed134f5f511deae095be
│ │ └── link
│ ├── 95acc0e10968e9babf3a942a085279db4269728c4c77f8f3a7d5e208108908c6
│ │ └── link
│ ├── 967a799109e4d74670438c51aba1b270c0f72caca675342acc955512f11e7459
│ │ └── link
│ ├── a4dd3fbaa1db732a34a7ecf2e1f40a095aab3dab94109fd7c628c8966071944e
│ │ └── link
│ └── f4236122778c0399bad22e265f9c017b5eb6aaead18ea21a21f5c0d9c97e907f
│ └── link
├── _manifests
│ ├── revisions
│ │ └── sha256
│ │ └── a185367e7bddc7bb3f22e43f388c0e9aefb2e6b679d2cbed1a3c7ff1f584dbf1
│ │ └── link
│ └── tags
│ └── 1.0
│ ├── current
│ │ └── link
│ └── index
│ └── sha256
│ └── a185367e7bddc7bb3f22e43f388c0e9aefb2e6b679d2cbed1a3c7ff1f584dbf1
│ └── link
└── _uploads

46 directories, 20 files
[root@Web2 registry]#

使用tree 命令完整的看到了/var/lib/registry/ 下的目录结构,hadoop镜像已经存在,镜像的每一层都是单独推送单独存放。
再找一台服务器 执行docker pull 命令, 同样需要修改daemon.json中的内容,使用http协议。

docker-registry搭建完成。

上一篇博客感觉很粗糙,做的很仓促,本篇博客再重新梳理一下。

------ end ------
0%