Docker镜像仓库

Docker镜像仓库

顾名思义,Docker Registry就是用来存储docker镜像的。就像maven私服,我们也可以搭建自己的仓库来存自己的镜像。

在前面的文章中,我们已经提到了如何搭建简单registy服务和使用:Docker入门,这篇文章作进一步介绍名、版本和API等。

一、简单安装使用

  1. 安装
docker run -d -p 5000:5000 --restart=always --name registry \
  -v /data:/var/lib/registry \
  registry:2
  1. 打标签并推送
➜   docker tag busybox 192.168.99.100:5000/erdaoya/busybox
➜   docker push 192.168.99.100:5000/erdaoya/busybox
The push refers to a repository [192.168.99.100:5000/erdaoya/busybox]
Get https://192.168.99.100:5000/v1/_ping: http: server gave HTTP response to HTTPS client
  1. 配置非认证模式 2中推送报错,给DOCKER_HSOT添加认证,在给docker主机添加启动变量。
# 不同版本和不同机器上的docker配置地方不太一样,如果有多个register,再加--insecure-registry xxx:port
--insecure-registry 192.168.99.100:5000

重启docker daemon,再push就可以了。 4. 停止

docker stop registry && docker rm -v registry

二、镜像命名

2.1 tag

先说tag是怎么玩法:

docker tag IMAGE[:TAG] IMAGE[:TAG]

打标签时,通过:v2给镜像加tag,如果不加,往仓库推送时,默认是latest。tag名唯一,后面推送的镜像会覆盖前面的,非latest并不会覆盖latest,所以latest并不是最新镜像的意思。

如果有一个myname:v2的镜像,你希望推送到仓库,还希望是latest。先推送v2,在使用docker tag -f myname:v2 myname:latest,再推送一次latest。

2.2 命名

[仓库地址]<仓库名>:<标签>
  • 仓库地址:ip:port 或者域名,没有变成官方仓库
  • 仓库名:一般由<用户名>/<软件名>构成,没有用户名表示library。
  • 标签:2.1 所述tag

三、register认证配置

这儿有两篇文章可参考:

  1. deploying-a-secure-docker-registry/
  2. secure-docker-with-tls

四、V2 API

官网文档:Docker Registry HTTP API V2

这儿只列出几个查询接口:

4.1 查询镜像列表

➜  work curl http://192.168.99.100:5000/v2/_catalog -s |jq .
{
  "repositories": [
    "erdaoya/busybox",
    "erdaoya/doc"
  ]
}

4.2 查询tag列表

➜  work curl http://192.168.99.100:5000/v2/erdaoya/busybox/tags/list -s |jq .
{
  "name": "erdaoya/busybox",
  "tags": [
    "latest",
    "1.0-SNAPSHOT"
  ]
}

4.3 查镜像详细信息

curl http://192.168.99.100:5000/v2/erdaoya/busybox/manifests/1.0-SNAPSHOT -s |jq .

五、UI管理

官方没有提供web界面,第三方提供了一些,如下:

docker run -d \
       -p 8080:8080 \
       --name registry-web \
       -e REGISTRY_URL=http://192.168.99.100:5000/v2 \
       -e REGISTRY_NAME=192.168.99.100:5000 \
       hyper/docker-registry-web
CONTENTS