Doker搭建私有镜像库

0x01 Doker私有镜像库服务端

1.1 拉取registry

1
docker pull registry

拉取registy.jpg

1.2 创建容器

1
2
3
命令示例:

docker run -itd -v /data/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:latest

注:–restart=always: 这个参数表示如果容器异常退出,则会自动重启

运行registy容器.jpg

1.3 测试Dokcer镜像仓库

本地访问:

1
curl http://127.0.0.1:5000/v2/_catalog

远程访问地址

1
http://服务器IP

0x02 测试镜像仓库

2.1 修改镜像源

2.1.1 修改下镜像源

1
2
3
4
5
vim /etc/docker/daemon.json

{
"registry-mirrors": [ "你的仓库地址:端口"]
}

2.1.2 重启docker服务

1
systemctl restart docker

2.2 为镜像打标签

命令说明

1
2
3
4
5
格式说明:Usage: docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG] :lastest 

docker tag centos7:latest 172.18.62.55:5000/centos7:v1
// centos7:latest这是源镜像,也是刚才pull下来的镜像文件;
// 172.18.62.55:5000/centos7:v1,这是目标镜像,也是registry私有镜像服务器的IP地址和端口;

tag标签.jpg

2.3 上传镜像到仓库

1
docker push 172.18.62.55:5000/centos7:v1
1
2
The push refers to repository [172.18.62.55:5000/centos7:v1]
Get https://172.18.62.55:5000/v2/: http: server gave HTTP response to HTTPS client

注意了,这是报错了,需要https的方法才能上传,我们可以修改下daemon.json来解决:

1
2
3
4
5
6
vim /etc/docker/daemon.json

{
"registry-mirrors":[ "https://registry.docker-cn.com"],
"insecure-registries": [ "你的仓库地址:端口"]
}

添加私有镜像服务器的地址,注意书写格式为json,有严格的书写要求,然后重启docker服务:

1
systemctl restart docker

在次上传可以看到没问题 了:

1
2
3
4
docker push 172.18.18.90:5000/centos7:v1
The push refers to repository [172.18.18.90:5000/centos7]
c5183829c43c: Pushed
v1: digest: sha256:c7b0a24019b0e6eda714ec0fa137ad42bc44a754d9cea17d14fba3a80ccc1ee4 size: 527

2.4 下载镜像

以上传的centos7:v1的镜像为例,如下:

1
docker pull 172.18.18.90:5000/centos7:v1

2.5 其他信息

2.5.1 列出所有镜像

1
2
3
4
curl http://172.18.18.90:5000/v2/_catalog

预期的结果例如:
{"repositories":["centos7"]}

2.5.2 列出centos7镜像有哪些tag

1
2
3
4
curl http://172.18.18.90:5000/v2/busybox/tags/list

预期的结果例如:
{"name":"busybox","tags":["v1"]}