天天看点

Docker实战-如何去访问Docker仓库?

作者:云原生微服务
Docker实战-如何去访问Docker仓库?

仓库在之前的分享中我们介绍过,它主要的作用就是用来存放镜像文件,又可以分为是公共的仓库和私有仓库。有点类似于Maven的中央仓库和公司内部私服。

下面我们就来介绍一下在Docker中如何去访问各种仓库。

Docker Hub 公共镜像仓库

Docker Hub 是Docker官方提供的最大的公共镜像仓库,其中包含了很多的镜像。基本上可以满足大部分的镜像需求,在大部分的情况下都是可以从Docker Hub上获取到自己想要的镜像。

Docker实战-如何去访问Docker仓库?

在本地使用的时候,可以不用登录通过docker search命令来查找官方镜像仓库中的镜像,并且利用 docker pull 命令将其获取到本地进行使用,如下所示。

[root@localhost ~]# docker search centos
NAME                                         DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
centos                                       DEPRECATED; The official build of CentOS.       7620      [OK]       
kasmweb/centos-7-desktop                     CentOS 7 desktop for Kasm Workspaces            39                   
couchbase/centos7-systemd                    centos7-systemd images with additional debug…   8                    [OK]
dokken/centos-stream-9                                                                       6                    
dokken/centos-7                              CentOS 7 image for kitchen-dokken               5                    
eclipse/centos_jdk8                          CentOS, JDK8, Maven 3, git, curl, nmap, mc, …   5                    [OK]           

根据是否为官方提供,可以将这些资源镜像分成两类

  • 类似于上面查询到的CentOS这样的基础镜像,也被称为是根镜像,这些镜像是由Docker公司创建并且支持维护的。所以比较稳定,也很安全。
  • 另一种镜像则是Docker上的用户进行上传的,在特定场景中使用比较好,但是在一些特殊场景中需要慎用。

第三方镜像仓库

在国内有比较多的云服务提供商都是提供了Docker镜像服务,例如腾讯云、阿里云、网易云等。

当然在下载这些站点上的镜像的时候,需要在镜像前面添加注册服务的具体地址,如下所示

docker  pull index.tenxcloud.com/docker_library/node:latest           

在正常情况下,国内的站点上的东西要比国外站点上的东西下载的快很多。

在下载完成之后由于是第三方的站点标签,所以要使用docker tag 将镜像的标签更新一下,与官方标签保持一致。

当然除了使用这些公共镜像之外,我们还可以搭建本地的或者私有的仓库。

搭建本地私有仓库

使用registry 镜像创建私有仓库

在安装好了Docker之后,可以通过官方提供的registry 镜像来搭建简单的一套本地私有的仓库环境

docker  run -d -p 5050:5050 registry:2           

通过这个命令将会自动下载并且启动一个registry的容器。

[root@localhost ~]# docker run -d -p 5000:5000 registry:2
Unable to find image 'registry:2' locally
2: Pulling from library/registry
31e352740f53: Pull complete 
7f9bcf943fa5: Pull complete 
3c98a1678a82: Pull complete 
51f7a5bb21d4: Pull complete 
3f044f23c427: Pull complete 
Digest: sha256:9977826e0d1d0eccc7af97017ae41f2dbe13f2c61e4c886ec28f0fdd8c4078aa
Status: Downloaded newer image for registry:2
51a114b227dcfa31fc3e7bf1a851a91c4648d15b6a0737ce64a5d6cf288e53a7           

在默认情况下,仓库会被创建到/var/lib/registroy目录下,然后我们可以通过-v参数来将镜像文件存放在本地的指定路径下。

docker  run -d -p 5000:5000 -v /opt/data/registory:/var/lib/registory  registry:2           

管理私有仓库

首先,我们刚刚创建并启动了一个Registry的仓库,这里我们可以访问对应的5000端口,这里我们来查看已有的Ubuntu镜像,并且使用docker tag 命令对该镜像进行标记。

[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
ubuntu       v1.0      d2718af1a9f2   6 hours ago    77.8MB
nginx        0.1       56d8d0398d46   6 days ago     126MB
test         0.1       05268b440fd9   6 days ago     63.2MB
ubuntu       latest    5a81c4b8502e   4 weeks ago    77.8MB
registry     2         4bb5ea59f8e0   6 weeks ago    24MB
ubuntu       18.04     f9a80a55f492   2 months ago   63.2MB
[root@localhost ~]# docker tag ubuntu:18.04 192.168.1.202:5000/testu
[root@localhost ~]# docker images
REPOSITORY                 TAG       IMAGE ID       CREATED        SIZE
ubuntu                     v1.0      d2718af1a9f2   6 hours ago    77.8MB
nginx                      0.1       56d8d0398d46   6 days ago     126MB
test                       0.1       05268b440fd9   6 days ago     63.2MB
ubuntu                     latest    5a81c4b8502e   4 weeks ago    77.8MB
registry                   2         4bb5ea59f8e0   6 weeks ago    24MB
192.168.1.202:5000/testu   latest    f9a80a55f492   2 months ago   63.2MB
ubuntu                     18.04     f9a80a55f492   2 months ago   63.2MB
           

操作完成之后会看到在镜像库里面就会存在对应的镜像。接下来就是使用docker push 将本地镜像上传。

[root@localhost ~]# docker push 192.168.1.202:5000/testu
Using default tag: latest
The push refers to repository [192.168.1.202:5000/testu]
Get "https://192.168.1.202:5000/v2/": http: server gave HTTP response to HTTPS client
[root@localhost ~]#            

上传完成之后我们可以使用 curl 查看

curl http://192.168.1.202:5000/v2/           

由于新版本的Docker对安全性的要求较高,所以会要求仓库有SSL/TLS的证书,对内部使用的私有仓库可以关闭对证书的安全性检查。

总结

仓库作为镜像集中存储的地方,在企业使用的过程中,通常会使用到私有仓库来维护一些公司内部的镜像,上面也介绍了如何去搭建一个简单的私有仓库,当然还有很多的开源的私有仓库实现方式,这就需要有兴趣的读者自己去操作了。