四、Docker仓库(一)

一、仓库说明

仓库(Repository)是集中存放镜像的地方。相对镜像和容器来说,对仓库的操作来说相对较少。
官方的镜像仓库地址为:https://hub.docker.com/,缺点,位于国外,有时候不能访问,而且速度有时候很慢。在使用kubeadm搭建k8s集群时,我一般都是用的阿里提供的公共镜像仓库registry.aliyuncs.com/google_containers下载相关k8s的基础组件,速度快 (无须注册,直接配置使用)。下图为使用阿里云提供的个人私有镜像仓库地址截图。
在这里插入图片描述

二、Docker Hub

官方维护的镜像库是Docker Hub,大部分需求都可以通过在 Docker Hub 中直接下载镜像来实现。

1、注册
可以自行注册一个账号,收藏一些自己经常使用的镜像。

2、登陆
可以通过执行 docker login 命令交互式的输入用户名及密码来完成在命令行界面登录 Docker Hub,
登陆后就可以指定从自己的镜像仓库拉取推送镜像。可以通过 docker logout 退出登录。

[root@k8s-m1 ~]# docker login  -u 332772194
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
[root@k8s-m1 ~]# docker search centos  #从官方仓库查找
NAME                                         DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
centos                                       DEPRECATED; The official build of CentOS.       7588      [OK]       
kasmweb/centos-7-desktop                     CentOS 7 desktop for Kasm Workspaces            38                   
couchbase/centos7-systemd                    centos7-systemd images with additional debug…   7                    [OK]
dokken/centos-stream-9                                                                       6                    
eclipse/centos_jdk8                          CentOS, JDK8, Maven 3, git, curl, nmap, mc, …   5                    [OK]
dokken/centos-7                              CentOS 7 image for kitchen-dokken               5                    
dokken/centos-stream-8                                                                       4                    
continuumio/centos5_gcc5_base                                                                3                    
dokken/centos-8                              CentOS 8 image for kitchen-dokken               3                    
adoptopenjdk/centos7_build_image                                                             1                    
spack/centos7                                CentOS 7 with Spack preinstalled                1                    
spack/centos6                                CentOS 6 with Spack preinstalled                1                    
......
[OK]
[root@k8s-m1 ~]# docker search docker.io/332772194/centos   #从自己的仓库查找,需要详细指明
NAME               DESCRIPTION   STARS     OFFICIAL   AUTOMATED
332772194/centos                 0                    

可以看到返回了很多包含关键字的镜像,其中包括镜像名字、描述、收藏数、是否官方创建(OFFICIAL)、是否自动构建 (AUTOMATED)。
根据是否是官方提供,可将镜像分为两类。
一种是类似 centos 这样的镜像,被称为基础镜像或根镜像。这些基础镜像由 Docker 官方创建、验证、支持、提供。这样的镜像往往使用单个单词作为名字,这类镜像往往比较大,镜像里面各种命令比较齐全,但不太适合做业务的基础镜像。
还有一种类型,比如eclipse/centos_jdk8 镜像,它是由 Docker Hub 的注册用户创建并维护的,往往带有用户名称前缀。可以通过前缀 username/ 来指定使用某个用户提供的镜像,比如eclipse用户。
另外,在查找的时候通过 --filter=stars=N 参数可以指定仅显示收藏数量为 N 以上的镜像。

3、拉取镜像

下载官方 centos 镜像到本地。

[root@k8s-m1 ~]# docker pull centos
Using default tag: latest
latest: Pulling from library/centos    #可以看到官方镜像默认的下载地址为library
Digest: sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177
Status: Image is up to date for centos:latest
docker.io/library/centos:latest
[root@k8s-m1 ~]# docker tag centos:latest 332772194/centos:latest
[root@k8s-m1 ~]# vim initconfig.yaml ^C
[root@k8s-m1 ~]# docker push  332772194/centos:latest
The push refers to repository [docker.io/332772194/centos]
74ddd0ec08fa: Mounted from library/centos 
latest: digest: sha256:a1801b843b1bfaf77c501e7a6d3f709401a1e0c83863037fa3aab063a7fdb9dc size: 529

4、推送镜像

用户也可以在登录后通过 docker push 命令来将自己的镜像推送到 Docker Hub。
以下命令中的 username 请替换为你的 Docker 账号用户名。

[root@k8s-m1 ~]# docker tag centos:latest 332772194/centos:latest
[root@k8s-m1 ~]# docker push  332772194/centos:latest
The push refers to repository [docker.io/332772194/centos]
74ddd0ec08fa: Mounted from library/centos    #可以看到其实推送也就是从官方仓库挂载到自己的仓库,节约空间
latest: digest: sha256:a1801b843b1bfaf77c501e7a6d3f709401a1e0c83863037fa3aab063a7fdb9dc size: 529

三、私有仓库

有时候我们需要自己的私有仓库做业务使用,公司一般也不会允许将自己的业务镜像放在共有镜像库。在这先简单简绍一下用如何使用docker-registry搭建一个自己的私有仓库。缺点,删仓库里面的已有镜像麻烦,无法通过UI界面查看。
1、容器运行
使用官方提供的registry 镜像来搭建。

[root@k8s-m1 ~]#  docker run -d -p 5000:5000 --restart=always --name registry registry
Unable to find image 'registry:latest' locally
latest: Pulling from library/registry
79e9f2f55bf5: Pull complete 
0d96da54f60b: Pull complete 
5b27040df4a2: Pull complete 
e2ead8259a04: Pull complete 
3790aef225b9: Pull complete 
Digest: sha256:169211e20e2f2d5d115674681eb79d21a217b296b43374b8e39f97fcf866b375
Status: Downloaded newer image for registry:latest
d7e4249bc56197893f8d3e7aff1f377da5988caaffb222d49f34619280a53dd4

这将使用官方的registry镜像来启动私有仓库。默认情况下,仓库会被创建在容器的 /var/lib/registry 目录下。可以通过 -v 参数来将镜像文件存放在本地的指定路径,防止容器异常时数据丢失。如下将上传的镜像放到本地的 /opt/data/registry 目录。

[root@k8s-m1 ~]# docker run -d -p 5000:5000 -v /opt/data/registry:/var/lib/registry  registry

在私有仓库上传、搜索、下载镜像
创建好私有仓库之后,就可以使用 docker tag 来标记一个镜像,然后使用 docker push上传标记的镜像到私有仓库。私有仓库地址为 127.0.0.1:5000。

[root@k8s-m1 ~]# docker tag registry:latest  127.0.0.1:5000/registry:latest
[root@k8s-m1 ~]# docker push     127.0.0.1:5000/registry:latest
The push refers to repository [127.0.0.1:5000/registry]
aeccf26589a7: Pushed 
f640be0d5aad: Pushed 
aa4330046b37: Pushed 
ad10b481abe7: Pushed 
69715584ec78: Pushed 
latest: digest: sha256:36cb5b157911061fb610d8884dc09e0b0300a767a350563cbfd88b4b85324ce4 size: 1363

用 curl 查看仓库中的镜像。

[root@k8s-m1 ~]#  curl 127.0.0.1:5000/v2/_catalog
{"repositories":["registry"]}

这里可以看到 {“repositories”:[“registry”]},表明镜像已经被成功上传了。

先删除已有镜像,再尝试从私有仓库中下载这个镜像。

[root@k8s-m1 ~]# docker rmi 127.0.0.1:5000/registry:latest 
Untagged: 127.0.0.1:5000/registry:latest
Untagged: 127.0.0.1:5000/registry@sha256:36cb5b157911061fb610d8884dc09e0b0300a767a350563cbfd88b4b85324ce4

[root@k8s-m1 ~]# docker pull 127.0.0.1:5000/registry:latest 
latest: Pulling from registry
Digest: sha256:36cb5b157911061fb610d8884dc09e0b0300a767a350563cbfd88b4b85324ce4
Status: Downloaded newer image for 127.0.0.1:5000/registry:latest    #可以看到是从自己搭建的私有仓库拉取的镜像
127.0.0.1:5000/registry:latest

配置非 https 仓库地址(重要)
默认情况下,只能使用 127.0.0.1:5000 作为仓库地址,但是这样的话就只能本机能使用仓库。但是如果我们想让本网段的其他主机也能把镜像推送到私有仓库。例如192.168.2.140:5000 这样的内网地址作为私有仓库地址,默认情况下我们会发现无法成功推送镜像。这是因为 Docker 默认不允许非 HTTPS 方式推送镜像。我们可以通过 Docker 的配置选项来取消这个限制,或者通过添加证书相关的配置就能够使用 HTTPS 访问的私有仓库(后续分享)。
以 centos 7为例
对于使用 systemd 的系统,请在 /etc/docker/daemon.json 中写入如下内容(如果文件不存在请新建该文件)

[root@k8s-m1 ~]# docker tag  registry:latest  192.168.2.140:5000/registry:latest
[root@k8s-m1 ~]# docker push  192.168.2.140:5000/registry:latest
The push refers to repository [192.168.2.140:5000/registry]
Get https://192.168.2.140:5000/v2/: http: server gave HTTP response to HTTPS client  #默认的报错信息

[root@k8s-m1 ~]# cat /etc/docker/daemon.json 
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "registry-mirrors": [
      "https://fz5yth0r.mirror.aliyuncs.com",
      "http://hub-mirror.c.163.com/",
      "https://docker.mirrors.ustc.edu.cn/",
      "https://registry.docker-cn.com"
  ],
  "insecure-registries": [
    "192.168.2.140:5000"
  ],
  "storage-driver": "overlay2",
  "storage-opts": [
    "overlay2.override_kernel_check=true"
  ],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
    "max-file": "3"
  }

[root@k8s-m1 ~]# systemctl restart docker  
#需重启使配置生效,注意该文件必须符合 json 规范,否则 Docker 将不能启动,此处我原先加入了一些额外的配置,
不需要可以删除,但是注意格式注意格式注意格式!!!!

[root@k8s-m1 ~]# docker push  192.168.2.140:5000/registry:latest
The push refers to repository [192.168.2.140:5000/registry]
aeccf26589a7: Layer already exists 
f640be0d5aad: Layer already exists 
aa4330046b37: Layer already exists 
ad10b481abe7: Layer already exists 
69715584ec78: Layer already exists 
latest: digest: sha256:36cb5b157911061fb610d8884dc09e0b0300a767a350563cbfd88b4b85324ce4 size: 1363
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

margu_168

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值