mdblog/Docker镜像中心.md at master · downgoon/mdblog · GitHub

标签: | 发表时间:2017-12-02 01:37 | 作者:
出处:https://github.com

Docker 镜像中心

温馨提醒

如果您第一接触 Docker,请先阅读: 手把手体验DockerHelloWorld

Docker领域, 镜像一词有两个含义:

  • Docker Image: 它是用来运行出 Docker Container的。比如 nginx imagetomcat imagenodejs image等。
  • Docker Registry Mirrors: 为了让大家方便使用,不需要每个人都去制作 Docker Image,我们可以分享:你制作一个 nginx image,然后发布到 Docker Registry去;我制作一个 tomcat image,也发布出去。这样大家就可以快速拥有许多 Docker Image。中心化的 Docker Registry的好处是:资源集中,便于大家发现,减少重复劳动,通过社区推选出最优质的 Docker Image(比如 nginx image可能有100个人做了,但是经过社区的使用,慢慢社区会推选出最优秀的几个)。但是中心化的弊端是性能瓶颈,大家下载 image的时候特别慢。于是需要 mirrors(就是 Master-Slave复制结构,以便做到写读分离,但是云厂商都想占据写源头,所以实际上各个厂商都会支持用户上传 image,同时会从 docker.com同步其他 image)。

课程目标

本文的目标只有一个: docker pull ${image-name}的时候要快 !!! 方式有两个:

  • 仓库镜像:不要访问 hub.docker.com了,换国内的( Registry Mirrors)。
  • 设置代理: Docker Daemon可以设置代理,也可以读取环境变量 HTTP_PROXY, HTTPS_PROXYNO_PROXY

国内镜像地址

Registry Mirrors Web 界面地址 Download 加速地址 备注
Docker官方 https://hub.docker.com/ 内置在docker客户端 具有stars质量度和详细使用文档
阿里云 https://dev.aliyun.com/search.html 每个用户得单独创建专属地址,类似:123456.mirror.aliyuncs.com 质量度认证:Docker和阿里云认证
网易蜂巢 https://c.163.com/hub hub.c.163.com docker pull hub.c.163.com/library/tomcat:latest
国内创业:DaoCloud https://dashboard.daocloud.io/packages/explore daocloud.io docker pull daocloud.io/library/tomcat
国内创业:灵雀云 https://hub.alauda.cn/ registry.alauda.cn docker pull registry.alauda.cn/tutum/tomcat
国内创业:希云 http://csphere.cn/hub/ index.csphere.cn docker pull index.csphere.cn/microimages/tomcat:8.0
国内创业:时速云 https://hub.tenxcloud.com/ index.tenxcloud.com docker pull index.tenxcloud.com/tenxcloud/tomcat

注意

阿里云的镜像加速器(123456.mirror.aliyuncs.com)是每个用户各用各的子域名。这个需要登陆阿里云,在Web控制台上提前生成。然后配置到 Docker DaemonRegistry Mirrors里面。

Image 寻址

唯一标识一个 Docker Image,需要4个值: Registry-> UserName(Uploader)-> ImageName-> Tag(Version)

之所以4个信息,是因为,比如我们拉取一个 tomcat镜像:成千上万个用户都可以制作 tomcat镜像,上百个服务商也都可以创建 Docker Registry

$ docker pull tomcat#表示 hub.docker.com 网站,官方账号(默认是library)发布的 tomcat 镜像的最新版本 tomcat:latest$ docker pull bitnami/tomcat#表示 hub.docker.com 网站,名叫 bitnami的用户,发布的 tomcat 镜像的最新版本$ docker pull registry.alauda.cn/tutum/tomcat#表示 registry.alauda.cn 网站,名叫 tutum 的用户,发布的 tomcat 最新版本$ docker pull registry.alauda.cn/tutum/tomcat:8.0#表示 registry.alauda.cn 网站,名叫 tutum 的用户,发布的 Tomcat 8$ docker pull index.csphere.cn/microimages/tomcat:8.0#跟上一条类似

注意

image-name:tag中的 tag未必是版本的意思。比如我们发布JDK的镜像,可以是JDK7的镜像,也可以是JDK8的镜像,对于JDK8的镜像,可能你第一次发的时候没有配置$JAVA_HOME环境变量,后来又修改了一下,配置了环境变量。这些都可以通过 tag来区分。

下载镜像

Pull an image from Docker Hub

$ docker pull debian

Using default tag: latest
latest: Pulling from library/debian
fdd5d7827f33: Pullcompletea3ed95caeb02: PullcompleteDigest: sha256:e7d38b3517548a1c71e41bffe9c8ae6d6d29546ce46bf62159837aad072c90aa
Status: Downloaded newer imagefordebian:latest

命令 docker pull debian是简写的方式,如果写全了应该是:

$ docker pull hub.docker.com/library/debian:latest

Pull from a different registry

$ docker pull myregistry.local:5000/testing/test-image
$ docker pull registry.alauda.cn/tutum/tomcat:8.0#表示 registry.alauda.cn 网站,名叫 tutum 的用户,发布的 Tomcat 8

镜像分层

镜像分层大意是这样的:

比如我们有个:(1)基础镜像是 CentOS;(2)接着在上面安装了一个 JDK,以便可以运行普通的Java程序,发布一个新的镜像叫 image-jdk;(3.1)再在 image-jdk上,安装一个 Tomcat,以便能够跑Web应用,又发布一个镜像叫 image-tomcat;(3.2)有人不习惯 Tomcat,他在 image-jdk上,安装了一个 GlassFish,也可以跑Web应用,于是发布了一个 image-glassfish

Multi Layers of a docker image

看到这里,你会发现,它非常类似包管理时的依赖管理(具有传递性):比如Java中的 maven管理 *.jar包,再比如node.js中的 npm管理 node modules

这样做的好处非常明显:提高复用性,介绍存储和传输空间。比如我们先 docker pull image-tomcat,这个时候会下载3个小单元,分别是:底层的 CentOS,中层的 image-jdk和上层的 image-tomcat。再当我们 docker pull image-glassfish的时候,发现底层的 CentOS和中层的 image-jdk前面已经下载过,不用再下了,可直接下载上层的 image-glassfish

所以我们看 docker pull debian的日志,会有两个片段:

    $ docker pull debian

Using default tag: latest
latest: Pulling from library/debian
fdd5d7827f33: Pull complete
a3ed95caeb02: Pull complete

第一片段 fdd5d7827f33: Pull completea3ed95caeb02: Pull complete

设置代理

Docker for MacDaemon程序上,点击: Preferences-> Proxies即可

docker proxy settings

下载Tomcat

笔者把镜像服务器配置为阿里云专属的,在配置下代理(如果你所在的环境需要代理才能上外网的话),然后:

$ docker search tomcat
NAME                           DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
tomcat                         Apache Tomcat is an opensourceimplementa...   1428      [OK]
consol/tomcat-7.0              Tomcat 7.0.57, 8080, admin/admin             16                   [OK]

我们搜索 tomcat,然后发现有很多,笔者选了两条,第一条拥有1428个STARS,同时OFFICIAL=[OK]表明是官方发布(这里的官方是指 docker.com,而不是阿里云)。

如果我们直接运行 docker pull tomcat也可以,但是我们无法知道这个 tomcattomcat-7呢?还是 tomcat-8?它依赖的JDK是7呢,还是8呢?

另外,下载后,我们怎么知道怎么使用它呢?image是不是会描述它的用法?

关于这些问题,最好的办法还是上Web控制台,比如: https://dev.aliyun.com/list.html?namePrefix=tomcat

然后可以找到 Supported tags,我们选择 7.0.79-jre8,继续点击可查看它的 Dockerfile描述,就可以知道怎么用了。

$ docker pull tomcat:7.0.79-jre8

7.0.79-jre8: Pulling from library/tomcat
06b22ddb1913: Pullcomplete336c28b408ed: Pullcomplete1f3e6b8d80c3: Pullcompleteaeac59510475: Pullcompleteb01db8bd8540: Pullcompletef7f398af5fea: Pullcomplete1c5595fa1317: Pullcompletee1a6cc83dc3d: Pullcomplete9efe1c932022: Pullcompleteeef936b7f842: Pullcomplete3c1e71063aec: Pullcomplete1f55c7359164: Pullcompletefc4f5c3be8ed: PullcompleteDigest: sha256:92f2451fc09e6973a9886f6ea8e3b5cb49a5d9aa0d074c218f70ee33596ba738
Status: Downloaded newer imagefortomcat:7.0.79-jre8

$ docker images
REPOSITORY                             TAG                 IMAGE ID            CREATED             SIZE
tomcat                                 7.0.79-jre8         b0280f28ef9b        16 hours ago        293 MB

它的Layers很多,总大小 293MB。

参考资料

相关 [mdblog docker 镜像] 推荐:

mdblog/Docker镜像中心.md at master · downgoon/mdblog · GitHub

- -
手把手体验DockerHelloWorld. Docker Image: 它是用来运行出. Docker Container的. nodejs image等. Docker Registry Mirrors: 为了让大家方便使用,不需要每个人都去制作. Docker Image,我们可以分享:你制作一个.

docker初体验之docker-tomcat

- - BlogJava-首页技术区
docker已经是现在最热的容器技术,最近也去体验了一下,在daocloud注册了一个账号,并开始本机实战docker. daocloud免费有两个容器可用,体验送T恤,邀请送书,这里我分享一个daocloud的邀请码 https://account.daocloud.io/signup?invite_code=mxeq2jkmcur37vz6ven8,daocloud是非常棒的容器云平台,使用体验好,问题响应也及时,绑定微信还送一个额外容器.

Docker应用场景

- - 灯火阑珊
Flynn:一个使用go语言编写的开源PaaS平台,目标是简化分布式环境中应用的部署和维护,可以通过git push命令,将应用部署到Docker,从而省去复杂的配置和操作. CoreOS:一种新的架构体系重新设计的Linux发型版,可以运行在既有的硬件活着云服务器上. CoreOS不提供类似yum或apt的包管理工具,用户不需要在CoreOS中安装软件,而是让程序都在Docker容器中运行.

docker使用场景

- - 开源软件 - ITeye博客
Docker应用容器相对于 VM 有以下几个优点:. 1、启动速度快,容器通常在一秒内可以启动,而 VM 通常要更久. 2、资源利用率高,一台普通PC 可以跑上千个容器,你跑上千个 VM 试试. 3、性能开销小, VM 通常需要额外的 CPU 和内存来完成 OS 的功能,这一部分占据了额外的资源. 因为VM 的 Hypervisor 需要实现对硬件的虚拟化,并且还要搭载自己的操作系统,自然在启动速度和资源利用率以及性能上有比较大的开销.

Docker 监控实战

- - SegmentFault 最新的文章
如今,越来越多的公司开始使用 Docker 了,现在来给大家看几组数据:. 2 / 3 的公司在尝试了 Docker 后最终使用了它. 也就是说 Docker 的转化率达到了 67%,而转化市场也控制在 60 天内. 越大型的公司越早开始使用 Docker. 研究发现主机数量越多的公司,越早开始使用 Docker.

Docker入门例子

- - 开源软件 - ITeye博客
Docker 提供了一个可以运行应用程序的容器. Docker 容器并不包含一个单独的操作系统,而是基于已有的基础设施中操作系统提供的功能来运行的. 2 Docker安装与启动. #将docker加入开机启动. 3 Docker的14个基础命令. 检查Docker的安装是否正确. 运行"Hello World"例子.

Docker认识基础

- - CSDN博客推荐文章
作者:chszs,版权所有,未经同意,不得转载. 博主主页: http://blog.csdn.net/chszs. Docker是一个C/S架构的容器引擎,它包括镜像、容器和库这三个重要的概念. Docker是一个开源平台,它包含容器引擎和Docker Hub注册服务器. 1)Docker容器引擎.

Docker 调试技巧

- - 行业应用 - ITeye博客
摘要: 『重用』容器名 但我们在编写/调试Dockerfile的时候我们经常会重复之前的command,比如这种docker run --name jstorm-zookeeper zookeeper:3.4,然后就容器名就冲突了. 但我们在编写/调试Dockerfile的时候我们经常会重复之前的command,比如这种.

一起研究来Docker

- - 研发管理 - ITeye博客
Docker是一个用了一种新颖方式实现的超轻量虚拟机,在实现的原理和应用上还是和VM有巨大差别,专业的叫法是应用容器(Application Container). Docker应用容器相对于 VM 有以下几个优点:. 1、启动速度快,容器通常在一秒内可以启动,而 VM 通常要更久. 2、资源利用率高,一台普通PC 可以跑上千个容器,你跑上千个 VM 试试.

Docker —— 从入门到实践

- - RSS - IT博客云
Docker 是个伟大的项目,它彻底释放了虚拟化的威力,极大降低了云计算资源供应的成本,同时让应用的分发、测试、部署都变得前所未有的高效和轻松. Docker 是一个开源项目,诞生于2013年初,最初是dotCloud公司内部的一个业余项目. 它基于Google公司推出的Go语言实现. 项目后来加入了Linux基金会,遵从了Apache 2.0协议,项目代码在GitHub上进行维护.