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

标签: | 发表时间:2017-12-02 09: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镜像仓库Harbor

- - 灰狐博客
Habor是由VMWare公司开源的容器镜像仓库. Habor是在Docker Registry上进行了相应的企业级扩展,这些企业级特性包括:管理用户界面,基于角色的访问控制 ,AD/LDAP集成以及审计日志等. 京东使用了Harbor搭建了自己的私有Dockr镜像仓库. 用Harbor实现容器镜像仓库的管理和运维.

几款 Shadowsocks 的 Docker 镜像

- - Shadowsocks非官方网站
Docker 是一个开放源代码软件项目,让应用程序布署在软件容器下的工作可以自动化进行,借此在 Linux 操作系统上,提供一个额外的软件抽象层,以及操作系统层虚拟化的自动管理机制. Docker 利用 Linux 核心中的资源分脱机制,例如 cgroups,以及 Linux 核心名字空间(name space),来创建独立的软件容器(containers).

解决Docker镜像爆满的问题

- - holmofy
使用过docker的人都知道,在正常情况下. 我们使用multi-stage构建利用docker镜像缓存机制,可以加快构建速度. 但是缓存的镜像一多,没有及时释放磁盘空间,磁盘就容易爆满. 容量 已用 可用 已用% 挂载点. 如果每次构建完手动 docker rmi又达不到加快构建速度的效果.

Docker 最佳实践:构建最小镜像

- - IT瘾-dev
镜像大小其实是衡量我们容器打包技术的重要指标,我们应该在不影响应用正常运行的情况下,尽量让我们的容器镜像变得更小,这样,不管是从安全还是维护效率角度来讲,都是最佳实践. 本文我们从两种情况阐述我们的问题和解决方案,我们从实现我们的application的编程语言角度,按照语言是解释型还是编译型语言来演示如何解决容器镜像体积大的问题.

docker/kubernetes国内源/镜像源解决方式

- - Xinkun Blog
最近在使用kubeadm时,被各种连接不上搞到崩溃. 这里统一整理了国内的一些镜像源,apt源,kubeadm源等,以便查阅. Azure China提供了目前用过的质量最好的镜像源. 而且都支持匿名拉取,也就是不需要登录. 这里,我开发了一个小的脚本azk8spull,这个脚本可以自动根据镜像名称进行解析,转换为azure的mirror镜像源域名.

Docker 最佳实践:5 个方法精简镜像

- - IT瘾-dev
本文记录了精简Docker镜像尺寸的必要性及好处. 上篇文章回顾: HBase实战:记一次Safepoint导致长时间STW的踩坑之旅. 精简Docker镜像的好处很多,不仅可以节省存储空间和带宽,还能减少安全隐患. 优化镜像大小的手段多种多样,因服务所使用的基础开发语言不同而有差异. 本文将介绍精简Docker镜像的几种通用方法.

使用Jib快速简便地创建Docker镜像

- - DockOne.io
在本文中,我们将看看Jib,它是Google提供的一个工具,可以轻松快速地创建Docker镜像. 无需创建Dockerfile文件,也无需安装Docker守护进程,Jib可直接使用. 到目前为止,我们一直使用来自Spotify的 dockerfile-maven-plugin来构建和推送Docker镜像.

Docker镜像优化:如何从1.16GB优化到22.4MB

- - DockOne.io
图源  www.docker.com. Docker是软件开发者和系统管理员用容器构建、运行和共享应用程序的平台. 一个 容器是一个运行在隔离环境中、拥有自己的文件系统上的进程;这个文件系统是使用 docker镜像构建的. 镜像文件包括运行应用程序所需的一切(编译后的代码、依赖关系、库等). 镜像可以使用一个名为 Dockerfile的文件来定义.

Docker 多平台构建指南:构建 WebAssembly 镜像

- - Jimmy Song - 专注于探索后 Kubernetes 时代的云原生新范式 – 博客
Docker 多平台构建是一种用于构建 Docker 镜像以在多种 CPU 架构和操作系统上运行的技术. 它可以让用户在一个 Dockerfile 中定义一个通用的构建过程,然后使用 Docker CLI 命令将其构建为多个不同平台的镜像. 这些镜像可以在不同的计算机、云平台和容器编排系统上运行,从而为用户提供更广泛的部署选项.