分发镜像

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

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

镜像命名

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

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

[root@ken1 ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
myimage latest 7efe0600e48f minutes ago 13MB
centos-vim2 latest 1921b3cd4695 About an hour ago 328MB
centos-vim latest 42083b89a179 About an hour ago 328MB
busybox latest 3a093384ac30 weeks ago .2MB
centos latest 1e1148e4cc2c 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.3,ubuntu: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 ken2019
Password:
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:v1
The 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:

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

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

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

[root@ken1 ~]# docker pull ken2019/myimage:v1
v1: Pulling from ken2019/myimage
Digest: sha256:e7fcb8fd9a68131317b095030f6b13353bb6e20cefe6f9871a6e0d47cdd02083
Status: 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 : -v /tes:/var/lib/registry registry:

我们使用的镜像是 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:/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 : -v /tes:/var/lib/registry registry:

第四步:上传镜像

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

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

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

Docker公共&本地镜像仓库(七)--技术流ken的更多相关文章

  1. Docker公共&本地镜像仓库(七)

    分发镜像 我们已经会构建自己的镜像了,那么如果在多个docker主机上使用镜像那?有如下的几种可用的方法: 用相同的Dockerfile在其他host上构建镜像 将镜像上传到公共registry(比如 ...

  2. Docker日志管理--docker部署安装ELK (十一)--技术流ken

    Docker logs 对于一个运行的容器,Docker 会将日志发送到 容器的 标准输出设备(STDOUT)和标准错误设备(STDERR),STDOUT 和 STDERR 实际上就是容器的控制台终端 ...

  3. Docker跨主机通信(九)--技术流ken

    容器网络 在前面的博客中已经详细讲解了几种网络方案: none, host, bridge,user-defined.但是他们只是解决了单个主机间的容器的通信问题,并不能实现多个主机容器之间的通信.本 ...

  4. Docker端口映射及创建镜像演示(二)--技术流ken

    前言 在上一篇博客<Docker介绍及常用操作演示--技术流ken>中,已经详细介绍了docker相关内容以及有关镜像和容器的使用命令演示. 现在我们已经可以自己下载镜像,以及创建容器了. ...

  5. Docker_部署本地镜像仓库(6)

    在部署本地镜像仓库之前,需要在主机上安装Docker.本地镜像仓库是registry镜像的一个实例,在Docker中运行. 1.创建本地镜像仓库服务 $ docker run -d -p 4000:5 ...

  6. Docker之使用Dockerfile创建定制化镜像(四)--技术流ken

    前言 在之前的博客<Docker端口映射及创建镜像演示(二)--技术流ken>,演示了如何使用一个现有容器创建一个镜像,以及镜像在阿里云的上传和下载. 但是这样的镜像有很大的局限性,不能根 ...

  7. 微服务架构 - 搭建docker本地镜像仓库并提供权限校验及UI界面

    搭建docker本地镜像仓库并提供权限校验及UI界面 docker本地镜像仓库的作用跟maven私服差不多,特别是公司级或者是小组级开发好的docker仓库可以上传到本地镜像仓库中,需要用时,直接从本 ...

  8. 搭建docker镜像仓库(一):使用registry搭建本地镜像仓库

    目录 一.系统环境 二.前言 三.使用registry搭建私有镜像仓库 3.1 环境介绍 3.2 k8smaster节点配置镜像仓库 3.3 k8sworker1节点配置从私有仓库上传和拉取镜像 3. ...

  9. 搭建docker镜像仓库(二):使用harbor搭建本地镜像仓库

    目录 一.系统环境 二.前言 三.Harbor 四.使用harbor搭建私有镜像仓库 4.1 环境介绍 4.2 k8smaster节点安装配置harbor 4.2.1 安装harbor离线包 4.2. ...

随机推荐

  1. vue+element-ui之tree树形控件有关子节点和父节点之间的各种选中关系详解

    做后端管理系统,永远是最蛋疼.最复杂也最欠揍的事情,也永远是前端开发人员最苦逼.最无奈也最尿性的时刻.蛋疼的是需求变幻无穷,如同二师兄的三十六般变化:复杂的是开发难度寸步难行,如同蜀道难,难于上青天: ...

  2. 关于vue的数据增删的一些细节

    第一种情况:在vue中使用的数据必须先在data中定义数据,不然报错: 第二种情况:访问对象中不存在的值,是可以得到undefined,但是不会报错 第三种:vue只会监听data已经定义的值,后续添 ...

  3. VS Code 常用插件

    1.Chinese (Simplified) Language Pack for Visual Studio Code              VS Code软件汉化 2.Auto Close Ta ...

  4. Go语言基础之包

    Go语言基础之包 在工程化的Go语言开发项目中,Go语言的源码复用是建立在包(package)基础之上的.本文介绍了Go语言中如何定义包.如何导出包的内容及如何导入其他包. Go语言的包(packag ...

  5. Notepad++常用快捷键

    Ctrl-H    打开Find / Replace 对话框 Ctrl-D    复制当前行 Ctrl-L    删除当前行 Ctrl-T    上下行交换 F3    找下一个 Shift-F3   ...

  6. Expedition---POJ - 2431

    A group of cows grabbed a truck and ventured on an expedition deep into the jungle. Being rather poo ...

  7. node.js搭建Web服务器

    Node.js 博客搭建 一. 学习需求 Node 的安装运行 会安装node,搭建node环境 会运行node. 基础模块的使用 Buffer:二进制数据处理模块 Event:事件模块 fs:文件系 ...

  8. Springboot关于脚本脚本启动的项目:

    #!/bin/bash if [ -f ~/.bash_profile ];then  . ~/.bash_profilefi JAVA_HOME=/usr/local/usr_software/jd ...

  9. 马哥k8s

    https://pan.baidu.com/s/1BAX-j54bLcmWF-0ei-c-pw 31y6

  10. nginx参数 uri和request_uri讨论

    uri可以输出rewrite后的uri不带参数,要用args查看 request_uri 是请求的完整的uri带参数