简介
仓库(Repository)是集中存放镜像的地方,又分公共仓库和私有仓库。
有时候容易把仓库与注册服务器(Registry)混淆。实际上注册服务器是存放仓库的具体服务器,一个注册服务器上可以有多个仓库,而每个仓库下面可以有多个镜像。从这方面来说,仓库可以被认为是一个具体的项目或目录。例如对于仓库地址private-docker.com/ubuntu
来说,private-docker.com
是注册服务器地址,ubuntu
是仓库名。
访问 Docker 仓库
Docker Hub公共镜像市场
Docker Hub是Docker官方提供的最大的公共镜像仓库,目前包括了超过100 000的镜像,地址为 https://hub.docker.com。
登录:docker login
➜ .docker 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: dfface
Password:
Login Succeeded
基本操作
无需登录就可搜索和拉取:
docker search [OPTIONS] TERM
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
已经在镜像部分做了介绍。
自动创建
自动创建则允许用户通过Docker Hub指定跟踪一个目标网站(目前支持GitHub或BitBucket)上的项目,一旦项目发生新的提交,则自动执行创建。
要配置自动创建,包括如下的步骤:
1)创建并登录Docker Hub,以及目标网站如Github;
2)在目标网站中允许Docker Hub访问服务;
3)在Docker Hub中配置一个“自动创建”类型的项目;
4)选取一个目标网站中的项目(需要含Dockerfile)和分支;
5)指定Dockerfile的位置,并提交创建。
之后,可以在Docker Hub的“自动创建”页面中跟踪每次创建的状态。
示例(新建仓库):
autobuild第三方镜像市场
国内不少云服务商都提供了Docker镜像市场,包括腾讯云、网易云、阿里云等。
以阿里云为例,进入容器镜像服务,选择地区(此处为北京,registry.cn-beijing.aliyuncs.com
)
下载镜像也是使用docker pull
命令,但是要在镜像名称前添加注册服务器的具体地址。格式为registry.cn-beijing.aliyuncs.com/<namespace>/<repository>:<tag>。例如:registry.cn-beijing.aliyuncs.com/dfface/mytest2
。
下载后,可以更新镜像的标签,以方便使用。
使用镜像加速器可以提升获取Docker官方镜像的速度,参看其指导:
镜像加速器操作指南:
- 登录阿里云Docker Registry
sudo docker login --username=dfface registry.cn-beijing.aliyuncs.com
用于登录的用户名为阿里云账号全名,密码为开通服务时设置的密码。
您可以在产品控制台首页修改登录密码。 - 从Registry中拉取镜像
sudo docker pull registry.cn-beijing.aliyuncs.com/dfface/mytest2:[镜像版本号]
- 将镜像推送到Registry
sudo docker login --username=dfface registry.cn-beijing.aliyuncs.com
sudo docker tag [ImageId] registry.cn-beijing.aliyuncs.com/dfface/mytest2:[镜像版本号]
sudo docker push registry.cn-beijing.aliyuncs.com/dfface/mytest2:[镜像版本号]
请根据实际镜像信息替换示例中的[ImageId]
和[镜像版本号]
参数。 - 选择合适的镜像仓库地址
从ECS推送镜像时,可以选择使用镜像仓库内网地址。推送速度将得到提升并且将不会损耗您的公网流量。
如果您使用的机器位于VPC网络,请使用registry-vpc.cn-beijing.aliyuncs.com
作为Registry的域名登录,并作为镜像命名空间前缀。 - 示例
使用docker tag
命令重命名镜像,并将它通过专有网络地址推送至Registry。
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
registry.aliyuncs.com/acs/agent 0.7-dfb6816 37bb9c63c8b2 7 days ago 37.89 MB
$ sudo docker tag 37bb9c63c8b2 registry-vpc.cn-beijing.aliyuncs.com/acs/agent:0.7-dfb6816
使用"docker images"命令找到镜像,将该镜像名称中的域名部分变更为Registry专有网络地址。
$ sudo docker push registry-vpc.cn-beijing.aliyuncs.com/acs/agent:0.7-dfb6816
搭建本地私有仓库
使用registry
镜像创建私有仓库
安装Docker后,可以通过官方提供的registry
镜像来简单搭建一套本地私有仓库环境:
docker run -d -p 5000:5000 registry:2
这将自动下载并启动一个registry
容器,创建本地的私有仓库服务。
默认情况下,仓库会被创建在容器的/var/lib/registry
目录下。可以通过-v
参数来将镜像文件存放在本地的指定路径。
例如下面的例子将上传的镜像放到/opt/data/registry
目录:
docker run -d -p 5000:5000 -v /opt/data/registry:/var/lib/registry registry:2
此时,在本地将启动一个私有仓库服务,监听端口为5000
。
管理私有仓库服务
首先在 macOS
或 windows
上搭建私有仓库,查看其地址为10.0.2.2:5000
,然后在虚拟机系统Ubuntu 18.04
里测试上传和下载镜像。
注意此时的注册服务器的具体地址为IP:port
(因为此时不是80
或443
端口,就必须指出来)。例如push
前更名ubuntu镜像名称为10.0.2.2:5000/test
(格式为docker tag IMAGE[:TAG][REGISTRYHOST/][USERNAME/]NAME[:TAG]
)。
用curl
查看仓库10.0.2.2:5000
中的镜像:curl http://10.0.2.2:5000/v2/search
。
现在可以到任意一台能访问到10.0.2.2
地址的机器去下载这个镜像了。
比较新的Docker版本对安全性要求较高,会要求仓库支持SSL/TLS证书。对于内部使用的私有仓库,可以自行配置证书或关闭对仓库的安全性检查。
首先,修改Docker daemon
(json
配置文件在~/.docker/daemon.json
中,也可以去桌面版属性中更改)的启动参数,添加如下参数,表示信任这个私有仓库,不进行安全证书检查:
"insecure-registries" : [
"10.0.2.2:5000"
],
之后重启Docker服务,并从私有仓库中下载镜像到本地。
insecure-registries daemon.json如果要使用安全证书,用户也可以从较知名的CA服务商(如verisign)申请公开的SSL/TLS证书,或者使用OpenSSL
等软件来自行生成。
以上只是做了一个简介,更为详细的做法,可以参考其他文章:详解docker实战之搭建私有镜像仓库。
仓库 小结
仓库是集中维护容器镜像的地方,为Docker镜像文件的分发和管理提供了便捷的途径。在企业的生产环境中,往往需要使用私有仓库来维护内部镜像在企业的生产环境中,往往需要使用私有仓库来维护内部镜像。
除了官方的registry
项目外,用户还可以使用其他的开源方案(例如nexus
)来搭建私有化的容器镜像仓库。
Cheat Sheet
# 仓库 关键指令回顾
docker login # 登录 docker hub
docker login --username=dfface registry.cn-beijing.aliyuncs.com # 登录第三方镜像市场
docker tag [ImageId] registry.cn-beijing.aliyuncs.com/dfface/mytest2:[镜像版本号] # push 之前的重命名,打标签,镜像还是指向同一个
docker push registry.cn-beijing.aliyuncs.com/dfface/mytest2:[镜像版本号] # 上传到阿里云
docker run -d -p 5000:5000 registry:2 # 使用官方的 registry:2 搭建私有仓库服务,默认镜像存储于 /var/lib/registry
docker run -d -p 5000:5000 -v /opt/data/registry:/var/lib/registry registry:2 # 使用官方的 registry:2 搭建私有仓库服务,并将镜像存储于 /opt/data/registry
网友评论