Dockerhub-Registry本地搭建

搭建Registry

Dockerhub本地搭建,即服务器Docker Registry本地搭建,服务器Registry搭建完成后,客户端可以进行PULL/PUSH镜像。

dockerhub-registry
1
2
3
4
5
6
7
8
9
10
11
12
# 服务器动作
# 安装docker
sudo apt update
sudo apt install -y docker.io
sudo systemctl start docker
sudo systemctl enable docker

# PULL Registry镜像
docker pull registry:2

# 启动Registry 绑定端口 指定数据卷(镜像存储 用于持久化)
docker run -d -p 5000:5000 -v /home/ubuntu/myregistry:/var/lib/registry --restart always --name registry registry:2
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
# 客户端动作
sudo vim /etc/docker/daemon.json

# 添加信任站点
"insecure-registries":["<本地仓库服务器IP/服务器搭建的IP>:5000"]

# 添加后长这样(registry-mirrors是原本的配置)
{
"insecure-registries":["XXXX.XXXX.XXXX.XXXX:5000"],
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com",
"https://mirror.ccs.tencentyun.com"
]
}

# 重启客户端Docker服务
sudo systemctl reload docker.service
sudo systemctl restart docker.service

# 获取一个官方仓库的小镜像用于测试
docker pull hello-world:latest
# 本地可以尝试试用一下hw
# docker run hello-world
# 显示:Hello from Docker!...

# 给容器打一个Tag标记,其可通过IP:PORT标定仓库地址
docker tag hello-world:latest XXXX.XXXX.XXXX.XXXX:5000/hello-world
# 推送到自搭建Registry上
docker push XXXX.XXXX.XXXX.XXXX:5000/hello-world

Registry Web粗略查看

1
2
3
4
5
6
# 查看Registry管理了那些镜像
http://XXX.XXX.XXX.XXX:5000/v2/_catalog
# 如:http://172.16.249.151:5000/v2/_catalog

# 查看特定镜像的tags信息
http://172.16.249.151:5000/v2/hello-world/tags/list
image-20250605172145145
image-20250605172119790

Registry Web友好展示

有没有更加直观的仓库查看管理方式?

1
2
3
4
5
# 服务器部署浏览器容器管理面板
docker pull konradkleine/docker-registry-frontend:v2
docker run -d -e ENV_DOCKER_REGISTRY_HOST=172.16.249.151 -e ENV_DOCKER_REGISTRY_PORT=5000 -p 5002:80 konradkleine/docker-registry-frontend:v2

# 浏览器访问:http://172.16.249.151:5002
image-20250605170226785
image-20250605170350814
image-20250605172250581

企业级Registry管理(Harbor)

另外Harbor是企业级Docker Registry,它【内置】了Registry:2 并且通过调整部分yml配置参数就能快速的安装与启动一组Registry相关套件。

1
2
3
4
cd /home/ubuntu
wget https://github.com/goharbor/harbor/releases/download/v2.8.3/harbor-offline-installer-v2.8.3.tgz
tar xvf harbor-offline-installer-v2.8.3.tgz
cd harbor
image-20250606004557848

复制并简单配置harbor.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 修改以下2句
hostname: 172.16.249.151
http:
port: 5003

# 先注释掉https相关
# 记住admin的密码 harbor_admin_password: Harbor12345
:wq

bash ./install.sh

# 注意:
# 1. 在运行的容器中检查一下,不要有前面我们自己运行的 registry:2 的容器,否则会报错.
# 2. /etc/docker/daemon.json 中记得加 "insecure-registries": ["172.16.249.151:5003"],
# 不出意外会成功,可以看看docker ps启动了很多容器。
image-20250606004831691

此时访问 Harbor,输入admin / Harbor12345

可以看见Harbor集成了很多功能,如果需要可以通过阅读yml配置文件和Document进行配置,因为内置db+redis,harbor其实就是一个管理级系统。

image-20250606005248269

PULL/PUSH

注意,Harbor与手动Docker Run的Registry不同,它有一个项目(project)的概念,所以,我们在给镜像打Tag的时候,注意格式 host:ip/project_name/image_name:tag_name

1
2
3
4
5
6
7
8
docker tag hello-world:latest 172.16.249.151:5003/library/hello-world:latest
docker push 172.16.249.151:5003/library/hello-world:latest

# awk 使用的是单引号 print在{}内 想要用 管道参数 后面使用xargs
# docker images | grep 172.16.249.151:500 | awk '{print $1":"$2}' | xargs docker rmi -f
docker rmi 172.16.249.151:5003/library/hello-world:latest
docker images
docker pull 172.16.249.151:5003/library/hello-world:latest
image-20250606010349201