Deploy Docker Private Registry
1. 概述
- 通过部署Docker Registry,可实现自建Docker私有仓库。
- 自建Docker私有仓库,主要是方便内部分发或部署项目。如果只有一个服务器,可以直接build镜像,且不建私有仓库。
- 各大厂商有提供免费的私有仓库服务,可以不用自建。
官方相关文档:
- Registry | Docker Docs
- CNCF Distribution | Distribution Registry
- registry - Official Image | Docker Hub
- Docker Registry User Interface
2. 部署
- 假设在IP为
192.168.0.1
的服务器上部署。 - Docker Registry采用端口
5000
,docker-registry-ui
采用端口80
。 - 建议使用Docker Compose方式进行部署。
- 为了方便管理(主要是执行“删除”操作),同时部署了可视化操作的Web界面。
- 由于是内部部署,Docker Registry没有配置用户管理(包括用户的身份验证、权限管理之类)。
- Registry的所有配置项,均可通过环境变量设置。相关的完整配置项说明,详见:Configuring a registry
部署Registry的docker-compose.yaml
文件,参考如下:
version: '3.8'
services:
registry-server:
image: registry:latest
#container_name: registry-server
restart: always
environment:
- REGISTRY_STORAGE_DELETE_ENABLED: true
volumes:
- ./registry:/var/lib/registry
registry-ui:
image: joxit/docker-registry-ui:latest
#container_name: registry-ui
restart: always
ports:
- 80:80
environment:
- SINGLE_REGISTRY=true
- REGISTRY_TITLE=Docker Registry UI
- DELETE_IMAGES=true
- SHOW_CONTENT_DIGEST=true
- NGINX_PROXY_PASS_URL=http://registry-server:5000
- SHOW_CATALOG_NB_TAGS=true
- CATALOG_MIN_BRANCHES=1
- CATALOG_MAX_BRANCHES=1
- TAGLIST_PAGE_SIZE=100
- REGISTRY_SECURED=false
- CATALOG_ELEMENTS_LIMIT=1000
3. 上传镜像
给镜像设置名称和tag,然后执行docker push
上传。其中镜像名称需要以Registry地址(IP或域名)+端口作为前缀。
示例命令如下:
# 给镜像设置tag
docker tag <镜像名称>:<tag> 192.168.0.1:5000/<镜像名称>:<tag>
# 上传镜像
docker push 192.168.0.1:5000/<镜像名称>:<tag>
4. 下载镜像
4.1. 修改Docke配置文件。
一般Linux上,Docker服务的配置文件在/etc/docker/daemon.json
。insecure-registries
添加Docker Registry服务,例如:
{
"insecure-registries":["192.168.0.1:5000"]
}
修改后需要使用配置生效。可重启本机Docker服务,或执行热更新操作。例如:
# 重启本机Docker服务
sudo systemctl restart docker
# Docker配置文件热更新
sudo kill -SIGHUP $(pidof dockerd)
4.2. 从自建私有仓库下载镜像
docker pull 192.168.0.10:5000/<镜像名称>:<tag>
5. 仓库管理
一般通过docker-registry-ui
(即http://192.168.0.1/
),对私有仓库的镜像进行查看、删除。
Docker Registry本身提供了接口,用于管理其存储的镜像。
- 查看所有镜像:http://192.168.0.1:5000/v2/_catalog
- 查看指定镜像的所有tag:http://192.168.0.1:5000/v2/{镜像名称}/tags/list
- 所有API,详见官方文档:https://github.com/opencontainers/distribution-spec/blob/v1.0.1/spec.md#api
- 参考说明:Docker Registry API – Listing Images and Tags