Docker 仓库操作

登录仓库

登录仓库使用 docker login 命令:docker login -u 用户名 -p 密码 服务器地址。如果没有给出镜像仓库服务器的地址,会采用 Docker Daemon 中的默认值。

例如,不使用账号参数登录 Docker Hub:

[root@server4 ~]$ docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: assassing
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

仓库配置

由于从 Docker Hub 下载慢,可以配置镜像仓库:

"registry-mirrors": [
    "https://mirror.ccs.tencentyun.com",
    "http://docker.mirrors.ustc.edu.cn",
    "https://5ifniqg5.mirror.aliyuncs.com",
    "https://registry.docker-cn.com",
    "http://hub-mirror.c.163.com",
    "https://mirror.ccs.tencentyun.com"
    ],

自建的私有仓库一般不会设置 TLS,需要把仓库地址添加到信任列表:

"insecure-registries": [
    "192.168.2.241:5000",
    "192.168.2.234:5999"
    ],

一份镜像仓库列表(来源):

阿里云(杭州)   https://registry.cn-hangzhou.aliyuncs.com
阿里云(上海)   https://registry.cn-shanghai.aliyuncs.com
阿里云(青岛)   https://registry.cn-qingdao.aliyuncs.com
阿里云(北京)   https://registry.cn-beijing.aliyuncs.com
阿里云(张家口)   https://registry.cn-zhangjiakou.aliyuncs.com
阿里云(呼和浩特)   https://registry.cn-huhehaote.aliyuncs.com
阿里云(乌兰察布)   https://registry.cn-wulanchabu.aliyuncs.com
阿里云(深圳)   https://registry.cn-shenzhen.aliyuncs.com
阿里云(河源)   https://registry.cn-heyuan.aliyuncs.com
阿里云(广州)   https://registry.cn-guangzhou.aliyuncs.com
阿里云(成都)   https://registry.cn-chengdu.aliyuncs.com
腾讯云   https://mirror.ccs.tencentyun.com
微软云   https://dockerhub.azk8s.com
网易   https://hub-mirror.c.163.com
上海交通大学   https://mirror.sjtu.edu.cn/docs/docker-registry
❤❤❤南京大学   https://docker.nju.edu.cn
道客 DaoCloud   https://f1361db2.m.daocloud.io
阿里云(香港)   https://registry.cn-hongkong.aliyuncs.com
阿里云(日本-东京)   https://registry.ap-northeast-1.aliyuncs.com
阿里云(新加坡)   https://registry.ap-southeast-1.aliyuncs.com
阿里云(澳大利亚-悉尼)   https://registry.ap-southeast-2.aliyuncs.com
阿里云(马来西亚-吉隆坡)   https://registry.ap-southeast-3.aliyuncs.com
阿里云(印度尼西亚-雅加达)   https://registry.ap-southeast-5.aliyuncs.com
阿里云(印度-孟买)   https://registry.ap-south-1.aliyuncs.com
阿里云(德国-法兰克福)   https://registry.eu-central-1.aliyuncs.com
阿里云(英国-伦敦)   https://registry.eu-west-1.aliyuncs.com
阿里云(美国西部-硅谷)   https://registry.us-west-1.aliyuncs.com
阿里云(美国东部-弗吉尼亚)   https://registry.us-east-1.aliyuncs.com
阿里云(阿联酋-迪拜)   https://registry.me-east-1.aliyuncs.com
谷歌云   https://gcr.io
官方   https://registry.hub.docker.com

Docker Registry

可以通过官方提供的开源镜像分发工具 Docker Registry 来简单搭建一套本地私有仓库环境。

镜像存储模块与本地镜像存储相似,Registry 将镜像记录在清单文件中,并同时记录验证信息,形成镜像数据库。

创建仓库

创建镜像仓库时,需要把镜像存放目录挂载出来,例如挂载到 /var/docker_registry 目录下:

[root@server4 ~]$ docker run -d -p 5000:5000 -v /var/docker_registry:/var/lib/registry registry:2

可以通过浏览器访问 http://192.168.2.241:5000/v2/ 来确认镜像已经正确启动。

修改配置

要想通过 HTTP 来使用本地私有仓库,需要修改启动配置文件 /etc/docker/daemon.json

[root@server4 ~]$ vi /etc/docker/daemon.json
{
    "registry-mirrors": ["https://mirror.ccs.tencentyun.com"],
    "insecure-registries": ["192.168.2.241:5000"
   ]
}
[root@server4 ~]$ systemctl restart docker

上传镜像

上传同样使用 tag 修改镜像标记后用 push 上传:

[root@server4 ~]$ docker tag user1:0.1 192.168.2.241:5000/user241:v1.0
[root@server4 ~]$ docker push 192.168.2.241:5000/user241:v1.0
The push refers to repository [192.168.2.241:5000/user241]
c49567fcf544: Pushed 
v1.0: digest: sha256:50e4c287c3287307a0af663b479db763335aeb444f64bb00eb19f547553e38c0 size: 527

下载镜像

在另外一台主机上使用 docker pull 来拉取仓库中的镜像:

[root@server1 ~]$ docker pull 192.168.2.241:5000/user241:v1.0
v1.0: Pulling from user241
01b4f4cd1c49: Pull complete 
Digest: sha256:50e4c287c3287307a0af663b479db763335aeb444f64bb00eb19f547553e38c0
Status: Downloaded newer image for 192.168.2.241:5000/user241:v1.0
192.168.2.241:5000/user241:v1.0
[root@server1 ~]$ docker images
REPOSITORY                   TAG       IMAGE ID       CREATED       SIZE
192.168.2.241:5000/user241   v1.0      7549e3270b72   7 hours ago   5.6MB

其他操作

对于镜像的创建、更新、分发等操作,Docker Registry 提供 HTTP API 接口来实现操作调用。主要功能如下表:

方法 路径 说明
GET /v2/ 检查是否支持 2.0 接口。
GET /v2/<name>/tags/list 获得镜像的标签列表。
GET/PUT/DELETE /v2/<name>/manifests/<reference> 获得/修改/删除镜像的主要信息。
GET/DELETE /v2/<name>/blobs/<digest> 获得/删除镜像层。
POST /v2/<name>/blobs/uploads/ 开始分块上传。
GET /v2/catalog 获得镜像列表。