【笔记】搭建私有Docker镜像仓库

前言

搭建私有Docker镜像仓库学习笔记

搭建没有GUI界面的仓库

  • 通过Docker官方提供的镜像搭建镜像仓库
1
docker run --name registry --restart=always -p 5000:5000 -d -v registry-data:/var/lib/registry registry

搭建有GUI界面的仓库

  • 通过Docker官方提供的镜像以及第三方开发者开发的GUI界面组合,实现带GUI界面的仓库搭建

docker-compose.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
version: "3.0"

services:
registry:
image: registry
volumes:
- ./registary-data:/var/lib/registry
ui:
image: joxit/docker-registry-ui:static
ports:
- 8080:80
environment:
- REGISTRY_TITLE=私有仓库标题
- REGISTRY_URL=http://registry:5000
depends_on:
- registry

配置Docker的信任地址

  • 配置从UI容器访问仓库容器的信任地址,访问仓库地址时,默认Docker只信任https,如果没有https,需要配置http

insecure-registries:配置仓库容器的IP地址和端口号(实际上就是宿主机的IP地址,端口号默认为5000)

/etc/docker/daemon.json

1
2
3
4
{
"registry-mirrors": ["https://n0dwemtq.mirror.aliyuncs.com"],
"insecure-registries": ["http://xx.xx.xx.xx:5000"]
}
  • 配置完成后重载配置并重启Docker
1
2
systemctl daemon-reload
systemctl restart docker

从本机推送镜像到仓库

重新标记tag

  • 发起推送之前要先通过docker tag命令,将镜像重新标记tag,必须将推送的仓库地址作为前缀

<name_local>:<version_local>:本机上镜像的名称和标签
<ip_ui>:<port_ui>:如果搭建的是有GUI的仓库,那么需要指定UI容器的IP地址和端口
<name_remote>:<version_remote>:发送到仓库时镜像的名称和标签,可以与本机上镜像的名称和标签相同

1
docker tag <name_local>:<version_local> <ip_ui>:<port_ui>/<name_remote>:<version_remote>

发起推送

  • 重新标记tag完成后,才可以发起推送
1
docker push <ip_ui>:<port_ui>/<name_remote>:<version_remote>

从仓库拉取镜像到本机

1
docker pull <ip_ui>:<port_ui>/<name_remote>:<version_remote>

完成

参考文献

哔哩哔哩——黑马程序员