Docker公共&本地镜像仓库(七)
分发镜像
我们已经会构建自己的镜像了,那么如果在多个docker主机上使用镜像那?有如下的几种可用的方法:
- 用相同的Dockerfile在其他host上构建镜像
- 将镜像上传到公共registry(比如docker hub),host直接下载使用
- 搭建私有的registry供本地的host使用
镜像命名
无论采用何种方式保存和分发镜像,首先都得给镜像命名。
通过 dock images ls 可以查看镜像的信息。
[root@ken1 ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
myimage latest 7efe0600e48f 27 minutes ago 13MB
centos-vim2 latest 1921b3cd4695 About an hour ago 328MB
centos-vim latest 42083b89a179 About an hour ago 328MB
busybox latest 3a093384ac30 3 weeks ago 1.2MB
centos 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.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: 1359
第五步:登录 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 虽然非常方便,但还是有些限制,比如:
- 需要 internet 连接,而且下载和上传速度慢。
- 上传到 Docker Hub 的镜像任何人都能够访问,虽然可以用私有 repository,但不是免费的。
- 安全原因很多组织不允许将镜像放到外网。
解决方案就是搭建本地的 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文件
{
“registry-mirrors”: [“https://vf3ypopb.mirror.aliyuncs.com”],
“insecure-registries”:[“192.168.64.8:5000”]
}


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


然后重启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:v1
The 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地址,不是该拉取镜像的主机)


Continue Reading
Docker公共&本地镜像仓库(七)的更多相关文章
- Docker公共&本地镜像仓库(七)--技术流ken
分发镜像 我们已经会构建自己的镜像了,那么如果在多个docker主机上使用镜像那?有如下的几种可用的方法: 用相同的Dockerfile在其他host上构建镜像 将镜像上传到公共registry(比如 ...
- Docker_部署本地镜像仓库(6)
在部署本地镜像仓库之前,需要在主机上安装Docker.本地镜像仓库是registry镜像的一个实例,在Docker中运行. 1.创建本地镜像仓库服务 $ docker run -d -p 4000:5 ...
- 微服务架构 - 搭建docker本地镜像仓库并提供权限校验及UI界面
搭建docker本地镜像仓库并提供权限校验及UI界面 docker本地镜像仓库的作用跟maven私服差不多,特别是公司级或者是小组级开发好的docker仓库可以上传到本地镜像仓库中,需要用时,直接从本 ...
- 搭建docker镜像仓库(一):使用registry搭建本地镜像仓库
目录 一.系统环境 二.前言 三.使用registry搭建私有镜像仓库 3.1 环境介绍 3.2 k8smaster节点配置镜像仓库 3.3 k8sworker1节点配置从私有仓库上传和拉取镜像 3. ...
- 搭建docker镜像仓库(二):使用harbor搭建本地镜像仓库
目录 一.系统环境 二.前言 三.Harbor 四.使用harbor搭建私有镜像仓库 4.1 环境介绍 4.2 k8smaster节点安装配置harbor 4.2.1 安装harbor离线包 4.2. ...
- 微服务架构 - 基于Harbor构建本地镜像仓库
之前写过<搭建docker本地镜像仓库并提供权限校验及UI界面>文章,然后有同仁评论道这样做太复杂了,如果Harbor来搭建会更简单同时功能也更强大.于是抽时间研究了基于Harbor构建本 ...
- 6.docker的私用镜像仓库registry
docker方式启动镜像仓库 / # cat /etc/docker/registry/config.yml version: 0.1 log: fields: service: registry s ...
- Kubespray部署Kubernetes 1.13.0(使用本地镜像仓库)
1. 下载kubespray # git clone https://github.com/kubernetes-sigs/kubespray.git # cd kubespray # pip ins ...
- 使用docker搭建“企业级镜像仓库”Harbor
一.前沿 docker的官方镜像仓库registry,功能比较单一,不太好用,特别是删除镜像操作,不够友好. Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,通过添加一 ...
随机推荐
- 微服务技术栈:API网关中心,落地实现方案
本文源码:GitHub·点这里 || GitEE·点这里 一.服务网关简介 1.外观模式 客户端与各个业务子系统的通信必须通过一个统一的外观对象进行,外观模式提供一个高层次的接口,使得子系统更易于使用 ...
- 深入理解k8s中的访问控制(认证、鉴权、审计)流程
Kubernetes自身并没有用户管理能力,无法像操作Pod一样,通过API的方式创建/删除一个用户实例,也无法在etcd中找到用户对应的存储对象. 在Kubernetes的访问控制流程中,用户模型是 ...
- SpringSecurity权限管理系统实战—九、数据权限的配置
目录 SpringSecurity权限管理系统实战-一.项目简介和开发环境准备 SpringSecurity权限管理系统实战-二.日志.接口文档等实现 SpringSecurity权限管理系统实战-三 ...
- 牛客网数据库SQL实战解析(31-40题)
牛客网SQL刷题地址: https://www.nowcoder.com/ta/sql?page=0 牛客网数据库SQL实战解析(01-10题): https://blog.csdn.net/u010 ...
- Java面试题(Spring Boot/Spring Cloud篇)
Spring Boot/Spring Cloud 104.什么是 spring boot? SpringBoot是一个框架,一种全新的编程规范,他的产生简化了框架的使用,所谓简化是指简化了Spring ...
- 写Seo网站标题应该注意什么
http://www.wocaoseo.com/thread-11-1-1.html 最近看了群里一些朋友讨论关于网站优化标题应该注意哪些?各种说法五花八门,好的seo优化标题是可以给网站带来不错的流 ...
- .Net ImageSharp给图片添加文字
开始之前需要Nuget安装的包 ##这三个包是一定要安装的,不然库的有些方法用不了 一.导入字体 var fonts = new FontCollection(); var fontFamily = ...
- 前端防止xxs注入
思路: 去掉所有跟sql有关的标签: $(function () { $(":input").change(function () { // alert($(this ...
- Android Home
unity处理Android的home键响应事件 http://blog.csdn.net/tianyongheng/article/details/38459531 Unity3D教程:处理Home ...
- Python Embedded
文档 https://docs.python.org/3/extending/index.html https://www.codeproject.com/articles/11805/embeddi ...