Docker公共&本地镜像仓库(七)--技术流ken

分发镜像

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

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

镜像命名

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

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

[[email protected] ~]# 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 上登录。

[[email protected] ~]# 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。

[[email protected] ~]# 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 下载使用了。

[[email protected] ~]# 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。

[[email protected] ~]# 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 匹配。

[[email protected] ~]# 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

[[email protected] ~]# systemctl restart docker

重启容器

[[email protected] ~]# docker run -d -p 5000:5000 -v /tes:/var/lib/registry registry:2

第四步:上传镜像

[[email protected] ~]# 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地址,不是该拉取镜像的主机)

原文地址:https://www.cnblogs.com/kenken2018/p/10326023.html

时间: 2024-10-06 21:21:02

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

云计算:Docker安装及本地镜像仓库配置

# **Docker的安装及如何配置从国内镜像中拖取需要的images到本地使用** 实验环境: OS:CentOS7.0 -X64 上网环境:通过代理服务器上网 1.首先下载docker安装包docker-engine-1.7.1-1.el7.centos.x86_64.rpm 安装包下载地址: https://get.docker.com/rpm/1.7.1/centos-7/RPMS/x86_64/docker-engine-1.7.1-1.el7.centos.x86_64.rpm [[

Docker 构建私有镜像仓库(6)

title: Docker 构建私有镜像仓库(6) date: 2018-12-18 08:47:27 tags: Docker categories: Docker copyright: true --- Docker是基于Go语言实现的开源容器项目,Docker让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何接口,Docker诞生于2013年年初,最初发起者是dotCloud公司.

docker 创建私有镜像仓库

docker 创建私有镜像仓库1创建配置文件 {"insecure-registries":["192.168.1.10:5000"] //本地仓库地址}2.重启动docker服务systemctl restart docker3.启动私有仓库docker run -d -p 5000:5000 registry:latest4.上传镜像到私有仓库给镜像打标签后上传 docker tag nginx:latest 192.168.1.10:5000/nginx:la

cobbler批量安装系统使用详解-技术流ken

1.前言 cobbler是一个可以实现批量安装系统的Linux应用程序.它有别于pxe+kickstart,cobbler可以实现同个服务器批量安装不同操作系统版本. 2.系统环境准备及其下载cobbler 一.系统环境 系统版本:CentOS release 6.7 (Final) 内网IP:192.168.232.7/24    #用来对内通信,提供cobbler服务 外网IP:10.220.5.166/24      #连接外网 二. 关闭安全服务 [[email protected] ~

Jenkins+Git+Gitlab+Ansible实现持续集成自动化部署动态网站(二)--技术流ken

项目前言 在上一篇博客<Jenkins+Git+Gitlab+Ansible实现持续化集成一键部署静态网站(一)--技术流ken>中已经详细讲解了如何使用这四个工具来持续集成自动化部署一个静态的网站. 如果大家可以熟练掌握以上内容,势必会在工作中减轻不小的工作量. 本篇博客将再次使用这四个工具结合freestyle和pipeline来完成动态网站的部署. 为了拓宽知识点,本篇博客将使用jenkins的两种常用方法来进行部署,如果你对pipeline还不熟悉,请参考我之前的博客<Jenki

Jenkins+Git+Gitlab+Ansible实现持续集成自动化部署静态网站(一)--技术流ken

前言 在之前已经写了关于Git,Gitlab以及Ansible的两篇博客<Git+Gitlab+Ansible剧本实现一键部署Nginx--技术流ken>,<Git+Gitlab+Ansible剧本实现一键部署动态网站(二)--技术流ken>,以及关于jenkins的简单使用<Jenkins持续集成介绍及插件安装版本更新演示(一)--技术流ken>.相信大家也已经完全掌握了这三项工具的使用,也可以使用这几项工具可以部署静态以及动态网站了. 以前的博客可以实现一键部署网站

nginx实现反向代理、负载均衡-技术流ken

1.简介 本篇博文是<nginx实现动态/静态文件缓存-技术流ken>的二部曲.将详细介绍nginx如何实现反向代理以及负载均衡技术,并辅以实战案例. 反向代理--"反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器." 负载均衡--"网络专用术语,负载均衡建立在现有网络结构之

网站集群架构实战(LVS负载均衡、Nginx代理缓存、Nginx动静分离、Rsync+Inotify全网备份、Zabbix自动注册全网监控)--技术流ken

前言 最近做了一个不大不小的项目,现就删繁就简单独拿出来web集群这一块写一篇博客.数据库集群请参考<MySQL集群架构篇:MHA+MySQL-PROXY+LVS实现MySQL集群架构高可用/高性能-技术流ken>下面是项目的一些简单介绍. WEB集群项目简介 随着网站访问量的激增,势必会导致网站的负载增加,现需求搭载一套高性能,高负载,高可用的网站集群架构以保障网站的持续.高效.安全.稳定的运行. 针对以上需求,我们采用了如下的技术: 使用负载均衡技术来实现网站请求的调度分发,减小后端服务器

zabbix实现百台服务器的自动化监控--技术流ken

前言 最近有小伙伴通过Q联系到我说:公司现在有百多台服务器,想要部署zabbix进行监控,怎么实现自动化全网监控? 本篇博客就把我告诉他的解决方案写出来,供大家以后参考. 实现自动化全网监控,需要用到脚本,以及zabbix的自动注册或者自动发现的功能.以前也写过一篇关于两者的博客<分布式系统监视zabbix讲解八之自动发现/自动注册--技术流ken>,但是内容可能没有那么详尽,本篇博客将详细完整的演示如何使用zabbix实现百台服务器的自动化监控. zabbix自动注册 活动的Zabbix a