linuxea:白话容器之Registry与容器(4)

我们知道,要想使用容器就需要在内核支持namespace,cgroups,借助于在用户空间组织一些工具利用内核所提供的技术,显示运行容器的目的。docker在容器运行简化上又近一步的,提供了镜像,分层构建,使得容器技术的使用更加被简化。后来在docker的主导下,演化出ocf(open container initiative)标准:皆在围绕容器格式和运行时制定一个开放的工业化标准。而runC是在新版本中使用的容器引擎。而dockerhub是容纳容器镜像的站点。 整个docker架构如下组成:

客户端:

server端:Dockerhost,也就是server端,也是一个c/s架构的应用程序,也就是说server和client都是由一个程序提供。有很多子程序,其中有一个子程序子命令叫做daemon,表示运行为守护进程服务器,监听某个套接字之上。为了安全期间,这个套接字默认只提供了unix socket文件套接字。但是支持三种 模式的套接字: ipvs4,ipv6,unix socketfile,默认监听在本地的socketfile文件之上,另外两个是没有监听的。也就是只允许本地范围。

containers images

镜像来自Registry,也就是docker的镜像仓库,默认是dockerhub。镜像是分层构建的,这些仓库中的镜像下载到本地后,是可以进行共享多个上层镜像使用的。镜像也是只读的,所以启动容器时候是基于镜像来启动, 为一个容器创建一个专用的可写仓,从而来启动一个容器。

镜像也可以在本地存储。但是docker的镜像千千万,使用时候只需要在仓库拉取到本地,这里的协议是http/https,默认是https

docker的client的应用层协议也是https。要使用docker就需要将docker应用程序包下载即可。

那么docker在第一次运行一个镜像的时候,会在本地查找,如果没有就会去仓库下载。

  • 镜像与容器之间的关系

镜像是静态的,类似于程序文件。容器是动态的,有生命周期。

当使用镜像(在被下载后)启动一个容器,这个容器被关闭,容器就终止,而镜像文件始终存在。这种关系就是程序和进程的关系

        |--> 容器1
--镜像|
        |--> 容器2
        |--> 容器...      

Registry

一个docker Registry提供两层功能,第一,提供了镜像存储的仓库,第二,提供了用户获取镜像时的认证等功能。同时还提供了当前服务器上所有镜像的搜索索引。

在一个Registry上,仓库会有很多。一个docker镜像仓库,有仓库的名称--> repository,repo,一个仓库通常用来放一个应用程序的镜像,仓库名就是应用程序名,通过tag来表示每个镜像的构建版本,以redis为例, 如下:

那组合起来的名称就是仓库加标签的形式,如:redis:5.0.2,如果没有指定tag,就会使用latest--> redis:latest,latest默认 为最近提交的一个没有指定版本的镜像。当然,还有稳定版redis:stable。

还有其他的基础镜像,也是有标签的。

docker是restfull风格的接口,在docker上每个组件都被当作资源或者对象来管理。支持restfull,那也就意味着支持增删改查。这些对象有:images,containers,networks网络,volumes存储卷,plugins插件。这些对象就可以通过http进行get,pet,delete

0 分享

您可以选择一种方式赞助本站

支付宝扫码赞助

支付宝扫码赞助

日期: 2018-12-23分类: Docker

标签: 白话容器

发表评论