什么Docker Registry

概述

官方的 Docker Hub 是一个用于管理公共镜像的地方,我们可以在上面找到我们想要的镜像,也可以把我们自己的镜像推送上去。但是,有时候我们的服务器无法访问互联网,或者你不希望将自己的镜像放到公网当中,那么你就需要 Docker Registry,它可以用来存储和管理自己的镜像。

基于 Docker 安装 Registry

我们使用 Docker 来安装和运行 Registry ,通过pull命令获取镜像,注意: 这一步可以省略,配置了docker-compose.yml文件,启动项目docker-compose up发现没有images会自动去官服下载镜像

1
docker pull registry

在/usr/local/docker/路劲新建目录mkdir registry,新建文件touch docker-compose.yml

docker-compose.yml 配置如下:

1
2
3
4
5
6
7
8
9
10
version: '3.1'
services:
registry:
image: registry
restart: always
container_name: registry
ports:
- 5000:5000
volumes:
- /usr/local/docker/registry/data:/var/lib/registry

启动项目:

1
2
3
docker-compose up   

注意使用docker-compose 命令必须在docker-compose.yml文件目录下

访问

启动成功后需要测试服务端是否能够正常提供服务,有两种方式:

  • 浏览器端访问
1
http://ip:5000/v2/

  • 终端访问
1
curl http://ip:5000/v2/

配置 Docker Registry 客户端

我使用的是 Ubuntu Server 16.04 LTS 版本,属于 systemd 系统,需要在 /etc/docker/daemon.json 中增加如下内容(如果文件不存在请新建该文件)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
"registry-mirrors":
[
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com",
"https://pee6w651.mirror.aliyuncs.com"
],
"insecure-registries":
[
"ip:5000"
]
}

# registry-mirrors:国内镜像加速器
# insecure-registries: 用于识别服务端 (192.168.40.136:5000)服务端

注意:该文件必须符合 json 规范,否则 Docker 将不能启动。

之后重新启动服务。

1
2
3
systemctl daemon-reload

systemctl restart docker

检查客户端配置是否生效

使用 docker info 命令手动检查,如果从配置中看到如下内容,说明配置成功(192.168.75.133 为我的 IP)

1
2
3
4
5
6
7
8
9
Labels:
Experimental: false
Insecure Registries:
192.168.40.136:5000
127.0.0.0/8
Registry Mirrors:
https://registry.docker-cn.com/
http://hub-mirror.c.163.com/
https://pee6w651.mirror.aliyuncs.com/

测试镜像上传

我们以 tomcat 为例测试镜像上传功能

1
2
3
4
5
6
7
8
9
10
11
## 拉取一个镜像
docker pull tomcat

## 查看全部镜像
docker images

## 标记本地镜像并指向目标仓库(ip:port/image_name:tag,该格式为标记版本号)
docker tag tomcat 192.168.40.136:5000/tomcat:8.5.32

## 提交镜像到仓库
docker push 192.168.40.136:5000/tomcat:8.5.32

查看全部镜像

1
2
3
curl -XGET http://192.168.40.136:5000/v2/_catalog

浏览器访问: http://192.168.40.136:5000/v2/_catalog

查看指定镜像

1
2
3
curl -XGET http://192.168.40.136:5000/v2/tomcat/tags/list

浏览器访问: http://192.168.40.136:5000/v2/tomcat/tags/list

测试拉取镜像

  • 先删除镜像
1
2
docker rmi tomcat
docker rmi 192.168.40.136:5000/tomcat:8.5.32
  • 再拉取镜像
1
docker pull 192.168.40.136:5000/tomcat:8.5.32

部署 Docker Registry WebUI

私服安装成功后就可以使用 docker 命令行工具对 registry 做各种操作了。然而不太方便的地方是不能直观的查看 registry 中的资源情况。如果可以使用 UI 工具管理镜像就更好了。这里使用 Docker Registry WebUI工具

docker-registry-frontend

我们使用 docker-compose 来安装和运行,docker-compose.yml 配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
version: '3.1'
services:
frontend:
image: konradkleine/docker-registry-frontend:v2
ports:
- 8080:80
volumes:
- ./certs/frontend.crt:/etc/apache2/server.crt:ro
- ./certs/frontend.key:/etc/apache2/server.key:ro
environment:
- ENV_DOCKER_REGISTRY_HOST=192.168.40.136
- ENV_DOCKER_REGISTRY_PORT=5000

# version:项目版本号
# services:服务
# frontend:服务名
# images:镜像
# ports:端口 - 宿主机端口:服务端口
# volumes:数据卷 -宿主机:服务机
# environment :环境变量

注意:请将配置文件中的主机和端口换成自己仓库的地址

运行

1
2
3
docker-compose up -d

# docker-compose命令必须在docker-compose.yml同文件目录下运行

运行成功后在浏览器访问:http://192.168.40.136:8080)