博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Docker公共&本地镜像仓库(七)--技术流ken
阅读量:6975 次
发布时间:2019-06-27

本文共 3950 字,大约阅读时间需要 13 分钟。

 

分发镜像

 

我们已经会构建自己的镜像了,那么如果在多个docker主机上使用镜像那?有如下的几种可用的方法:

  1. 用相同的Dockerfile在其他host上构建镜像
  2. 将镜像上传到公共registry(比如docker hub),host直接下载使用
  3. 搭建私有的registry供本地的host使用

 

镜像命名

 

无论采用何种方式保存和分发镜像,首先都得给镜像命名。

通过 dock images ls 可以查看镜像的信息。

[root@ken1 ~]# docker image lsREPOSITORY          TAG                 IMAGE ID            CREATED             SIZEmyimage             latest              7efe0600e48f        27 minutes ago      13MBcentos-vim2         latest              1921b3cd4695        About an hour ago   328MBcentos-vim          latest              42083b89a179        About an hour ago   328MBbusybox             latest              3a093384ac30        3 weeks ago         1.2MBcentos              latest              1e1148e4cc2c        7 weeks ago         202MB

这里注意到myimage 对应的是 REPOSITORY,而且还有一个叫 latest TAG

 

实际上一个特定镜像的名字由两部分组成:repository 和 tag

[image name] = [repository]:[tag]

 

如果执行 docker build 时没有指定 tag,会使用默认值 latest。其效果相当于:

docker build -t myimage:latest

tag 常用于描述镜像的版本信息.

 

小心 latest tag

千万别被 latest tag 给误导了。latest 其实并没有什么特殊的含义。当没指明镜像 tag 时,Docker 会使用默认值 latest,仅此而已。

虽然 Docker Hub 上很多 repository latest 作为最新稳定版本的别名,但这只是一种约定,而不是强制规定。

所以我们在使用镜像时最好还是避免使用 latest,明确指定某个 tag,比如 httpd:2.3ubuntu:xenial

 

使用公共registry

 

 保存和分发镜像的最直接方法就是使用 Docker Hub。

Docker Hub 是 Docker 公司维护的公共 Registry。用户可以将自己的镜像保存到 Docker Hub 免费的 repository 中。如果不希望别人访问自己的镜像,也可以购买私有 repository。

除了 Docker Hub,quay.io 是另一个公共 Registry,提供与 Docker Hub 类似的服务。

下面介绍如何用 Docker Hub 存取我们的镜像。

 

第一步:首先得在 Docker Hub 上注册一个账号。(https://cloud.docker.com/)

 

第二步:在 Docker Host 上登录。

[root@ken1 ~]# docker login -u ken2019Password:Login Succeeded

这里用的是我自己的账号,用户名为 ken2019,输入密码后登录成功。

 

第三步: 修改镜像的 repository 使之与 Docker Hub 账号匹配。

Docker Hub 为了区分不同用户的同名镜像,镜像的 registry 中要包含用户名,完整格式为:[username]/xxx:tag

  我们通过 docker tag 命令重命名镜像。

注:Docker 官方自己维护的镜像没有用户名,比如 httpd。

 

第四步:通过 docker push 将镜像上传到 Docker Hub。 

[root@ken1 ~]# docker push ken2019/myimage:v1The push refers to repository [docker.io/ken2019/myimage]cc65436a9bce: Pushed b5d564d59792: Pushed 44d9b0246bf5: Pushed 7d419408a46e: Pushed 683f499823be: Mounted from library/busybox v1: digest: sha256:e7fcb8fd9a68131317b095030f6b13353bb6e20cefe6f9871a6e0d47cdd02083 size: 1359

 

第五步:登录 https://hub.docker.com,在Public Repository 中就可以看到上传的镜像。

如果要删除上传的镜像,只能在 Docker Hub 界面上操作。

 

第六步:这个镜像可被其他 Docker host 下载使用了。

[root@ken1 ~]# docker pull ken2019/myimage:v1v1: Pulling from ken2019/myimageDigest: sha256:e7fcb8fd9a68131317b095030f6b13353bb6e20cefe6f9871a6e0d47cdd02083Status: Downloaded newer image for ken2019/myimage:v1

 

搭建本地的registry

 

Docker Hub 虽然非常方便,但还是有些限制,比如:

  1. 需要 internet 连接,而且下载和上传速度慢。

  2. 上传到 Docker Hub 的镜像任何人都能够访问,虽然可以用私有 repository,但不是免费的。

  3. 安全原因很多组织不允许将镜像放到外网。

解决方案就是搭建本地的 Registry。

 

第一步:运行registry容器

Docker 已经将 Registry 开源了,同时在 Docker Hub 上也有官方的镜像 registry。下面我们就在 Docker 中运行自己的 registry。

[root@ken1 ~]# docker run -d -p 5000:5000 -v /tes:/var/lib/registry registry:2

我们使用的镜像是 registry:2。

-d 是后台启动容器。

-p 将容器的 5000 端口映射到 Host 的 5000 端口。5000 是 registry 服务端口。

-v 将容器 /var/lib/registry 目录映射到 Host 的 /test,用于存放镜像数据。

 

第二步:通过 docker tag 重命名镜像,使之与 registry 匹配。

[root@ken1 ~]# docker tag ken2019/myimage:v1 172.20.10.2:5000/ken2019/myimage:v1

我们在镜像的前面加上了运行 registry 的主机名称和端口。

前面已经讨论了镜像名称由 repository 和 tag 两部分组成。而 repository 的完整格式为:[registry-host]:[port]/[username]/xxx
只有 Docker Hub 上的镜像可以省略 [registry-host]:[port] 。

 

第三步:修改damon.json文件

用逗号分开,不加这行会报下面的错

 

然后重启docker

[root@ken1 ~]# systemctl restart docker

 重启容器

[root@ken1 ~]# docker run -d -p 5000:5000 -v /tes:/var/lib/registry registry:2

 

第四步:上传镜像

[root@ken1 ~]# docker push 172.20.10.2:5000/ken2019/myimage:v1The push refers to repository [172.20.10.2:5000/ken2019/myimage]cc65436a9bce: Pushed b5d564d59792: Pushed 44d9b0246bf5: Pushed 7d419408a46e: Pushed 683f499823be: Pushed v1: digest: sha256:e7fcb8fd9a68131317b095030f6b13353bb6e20cefe6f9871a6e0d47cdd02083 size: 1359

 

第五步:从其他主机进行下载镜像

注意:其他主机也要添加  "insecure-registries":["172.20.10.2:5000"] (这里的IP是registry主机的IP地址,不是该拉取镜像的主机)

 

转载于:https://www.cnblogs.com/kenken2018/p/10326023.html

你可能感兴趣的文章
SQL中,将一列中的多条数据连接在一起
查看>>
程序猿看小说还要去找TXT?自己动手爬一个TXT才是正确的打开方式
查看>>
PYTHON-mysql fetchall和 fetchone之间的区别
查看>>
【POJ】1742 coins 【背包问题】
查看>>
批评你的才是你生命中的贵人
查看>>
http升级为https--SSL证书
查看>>
ubuntu用户如何打开root用户并允许远程登录
查看>>
我只是表明我的态度:我热爱这个行业,请不要再片面的黑我们了
查看>>
kibana做图表无法选取需要选的字段
查看>>
WCF 第六章 编码与序列化 使用NetDataContractSerializer共享类型
查看>>
wss的webpart的3种开发方式(转载)
查看>>
如何单独编译Android源代码中的模块
查看>>
atop工具检测linux硬件异常
查看>>
OSGI环境中Quartz2.2.0使用数据库连接池
查看>>
视图、索引、存储过程优缺点
查看>>
JS、JQuery和ExtJs动态创建DOM对象
查看>>
PhotoShop简介
查看>>
SwitchHosts简明教程
查看>>
11- jmeter主要元件
查看>>
Servlet实现验证码图片(一)
查看>>