Docker Registry

Docker Registry 是一个无状态,高度可扩展的服务器端应用程序,可以存储和分发Docker映像。

private registry: such a registry is located behind a firewall, or protected by an additional security layer (HTTP authorization, SSL client-side certificates, IP address authorization…). The registry is operated by a private entity, outside of Docker's control. It can optionally delegate additional authorization to the Index, but it is not mandatory.

官方文档
项目 Github


部署

后端

在主机的 5000 端口运行一个 Registry 容器。

docker run -d --restart=always -p 5000:5000 registry

前端

第三方的开源项目为 Registry 定制了一套可使用的前端界面。

项目 Github

映射主机 8000 端口运行一个前端界面服务的容器,这里需要配置 ENV_DOCKER_REGISTRY_HOST 也就是 Registry 容器所在的主机 ip 地址和端口号,该处以笔者内网所分配的 192.168.1.113 为例。

docker run -d  --restart=always \
  -e ENV_DOCKER_REGISTRY_HOST=192.168.1.113 \
  -e ENV_DOCKER_REGISTRY_PORT=5000 \
  -p 8080:80 \
  konradkleine/docker-registry-frontend


基础操作

假设你已经做好了一个本地镜像,可以用如下命令将该镜像推送到私服上。

1. 先打一个标签。

这里以 113 服务器为例。

$ sudo docker tag [your image name] 192.168.1.113:5000/[your image name on registry]

例如把 ubuntu:14.04 push 到私服上并重命名为 adleida-ubuntu:1.0.0。

$ sudo docker tag ubuntu:14.04 192.168.1.113:5000/adleida-ubuntu:1.0.0

2. 完成标签后推送。

$ sudo docker push 192.168.1.113:5000/[your image name on registry]

3. 从113上面 pull 下来刚刚推送的镜像。

$ sudo docker pull 192.168.1.113:5000/[your image name on registry]


常用 API

官方 API 文档

以下相关内容来自 kev 的贡献。

  • Images
    • Get image layer
    • Put image layer
  • Image
    • Put image layer
    • Get image layer
  • Ancestry
    • Get image ancestry
  • Tags
    • List repository tags
    • Get image id for a particular tag
    • Delete a repository tag
    • Set a tag for a specified image id
  • Repositories
    • Delete a repository
  • Search
  • Status
    • Status check for registry
  • Authorization
curl http://192.168.1.113:5000/v1/search
{
    "num_results": 2,
    "query": "",
    "results": [
        {
            "description": "",
            "name": "adleida/ubuntu"
        },
        {
            "description": "",
            "name": "adleida/redis"
        }
    ]
}

List repository tags

curl http://192.168.1.113:5000/v1/repositories/adleida/ubuntu/tags
{
    "latest": "5506de2b643be1e6febbf3b8a240760c6843244c41e12aa2f60ccbb7153d17f5"
}

Status check for registry

curl http://192.168.1.113:5000/v1/_ping
true

Delete a repository

curl -X DELETE http://192.168.1.113:5000/v1/repositories/adleida/ubuntu/
true

FIXME

Jovi Meng 2017/09/05 10:59