IT@程序员猿媛

Docker 技术之仓库

2019-05-02  本文已影响76人  柳厌之

简介

仓库(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

ailiyun

下载镜像也是使用docker pull命令,但是要在镜像名称前添加注册服务器的具体地址。格式为registry.cn-beijing.aliyuncs.com/<namespace>/<repository>:<tag>。例如:registry.cn-beijing.aliyuncs.com/dfface/mytest2

下载后,可以更新镜像的标签,以方便使用。

使用镜像加速器可以提升获取Docker官方镜像的速度,参看其指导:

镜像加速器

操作指南:

  1. 登录阿里云Docker Registry
    sudo docker login --username=dfface registry.cn-beijing.aliyuncs.com
    用于登录的用户名为阿里云账号全名,密码为开通服务时设置的密码。
    您可以在产品控制台首页修改登录密码。
  2. 从Registry中拉取镜像
    sudo docker pull registry.cn-beijing.aliyuncs.com/dfface/mytest2:[镜像版本号]
  3. 将镜像推送到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][镜像版本号]参数。
  4. 选择合适的镜像仓库地址
    从ECS推送镜像时,可以选择使用镜像仓库内网地址。推送速度将得到提升并且将不会损耗您的公网流量。
    如果您使用的机器位于VPC网络,请使用registry-vpc.cn-beijing.aliyuncs.com作为Registry的域名登录,并作为镜像命名空间前缀。
  5. 示例
    使用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

管理私有仓库服务

首先在 macOSwindows 上搭建私有仓库,查看其地址为10.0.2.2:5000,然后在虚拟机系统Ubuntu 18.04里测试上传和下载镜像。

注意此时的注册服务器的具体地址为IP:port(因为此时不是80443端口,就必须指出来)。例如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 daemonjson配置文件在~/.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
上一篇下一篇

猜你喜欢

热点阅读