范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

Docker基础(一)

  一、简介:
  前言
  统称来说,容器是一种工具,指的是可以装下其它物品的工具,以方便人类归纳放置物品、存储和异地运输,具体来说比如人类使用的衣柜、行李箱、背包等可以成为容器,但今天我们所说的容器是一种IT技术。
  容器技术是虚拟化、云计算、大数据之后的一门新兴的并且是炙手可热的新技术,容器技术提高了硬件资源利用率、方便了企业的业务快速横向扩容、实现了业务启机自愈功能,因此未来数年会是一个容器愈发流行的时代,这是一个对于IT行业来说非常有影响和价值的技术,而对于IT行业的从业者来说,熟练掌握容器技术无疑是一个很有前景的行业工作机会。
  容器技术最早出现在freebsd叫做jail。
  1.1: docker 简介:
  1.1.1: Docker 是什么:
  首先Docker是一个在2013年开源的应用程序并且是一个基于go语言编写是 一个开源的PAAS服务(Platform as a Service,平台即服务的缩写), go语言是 由 google 开发, docker 公司最早叫 dotCloud后由于Docker 开源后大受欢迎就将公司改名为Docker Inc,总部位于美国加州的旧金山, Docker是基于linux内核实现,Docker最早采用LXC技术(LinuX Container的简写,LXC是Linux原生支持的容器技术,可以提供轻量级的虚拟化,可以说docker就是基于LXC发展起来的(0.1.5 (2013-04-17),提供LXC的高级封装,发展标准的配置方法), 而虚拟化技术KVM(Kernel-based Virtual Machine)基于模块实现,Docker后改为自己研发并开源的runc技术运行容器(1.11.0 (2016-04-13)。
  Docker now relies on containerd and runc to spawn containers.
  Docker相比虚拟机的交付速度更快,资源消耗更低, Docker采用客户端/服务端架构,使用远程API来管理和创建Docker容器,其可以轻松的创建一个轻量级的、可移植的、自给自足的容器, docker的三大理念是build(构建)、ship(运 输)、run(运行), Docker 遵从 apache 2.0 协议,并通过(namespace及cgroup等)来提供容器的资源隔离与安全保障等,所以Docke容器在运行时不需要类似虚拟机(空运行的虚拟机占用物理机的一定性能开销)的额外资源开销,因此可以大幅提高资源利用率,总而言之Docker是一种用了新颖方式实现的轻量级虚拟机.类似于VM但是在原理和应用上和VM的差别还是很大的,并且docker
  的专业叫法是应用容器(Application Container)。
  1.1.2: Docker 的组成:
  https://docs.docker.com/engine/docker-overview/
  Docker 主机(Host): 一个物理机或虚拟机,用于运行Docker服务进程和容器。
  Docker服务端(Server): Docker 守护进程,运行 docker容器。
  Docker客户端(Client): 客户端使用docker 命令或其他工具调用docker API。
  Docker 仓库(Registry): 保存镜像的仓库,类似于git或svn这样的版本控制系
  Docker 镜像(Images): 镜像可以理解为创建实例使用的模板。
  Docker 容器(Container): 容器是从镜像生成对外提供服务的一个或一组服务。 官方仓库: https://hub.docker.com
  1.1.3: Docker 对比虚拟机:
  资源利用率更高: 一台物理机可以运行数百个容器,但是一般只能运行数十个虚拟机。
  开销更小: 不需要启动单独的虚拟机占用硬件资源。
  启动速度更快: 可以在数秒内完成启动。
  使用虚拟机是为了更好的实现服务运行环境隔离,每个虚拟机都有独立的内核,虚拟化可以实现不同操作系统的虚拟机,但是通常一个虚拟机只运行一个服务,很明显资源利用率比较低且造成不必要的性能损耗,我们创建虚拟机的目的是为了运行应用程序,比如Nginx. PHP、 Tomcat等web程序,使用虚拟机无疑带来了一些不必要的资源开销,但是容器技术则基于减少中间运行环节带来较大的性能提升。
  但是,如上图一个宿主机运行了N个容器,多个容器带来的以下问题怎么解决:
  1.怎么样保证每个容器都有不同的文件系统并且能互不影响?
  2.一个docker主进程内的各个容器都是其子进程,那么实现同一个主进程下不同类型的子进程?各个进程间通信能相互访问(内存数据)吗?
  3.每个容器怎么解决IP及端口分配的问题?
  4.多个容器的主机名能一样吗?
  5.每个容器都要不要有root用户?怎么解决账户重名问题?
  以上问题怎么解决?
  1.1.4: Linux Namespace 技术:
  namespace是Linux系统的底层概念,在内核层实现,即有一些不同类型的命名空间被部署在核内,各个docker容器运行在同一个docker主进程并且共用同一个宿主机系统内核,各docker容器运行在宿主机的用户空间,每个容器都要有类似于虚拟机一样的相互隔离的运行空间,但是容器技术是在一个进程内实现运行指定服务的运行环境,并且还可以保护宿主机内核不受其他进程的干扰和影响,如文件系统空间、网络空间、进程空间等,目前主要通过以下技术实现容器运行空间的相互隔离
  1.1.4.1: MNT Namespace:
  每个容器都要有独立的根文件系统有独立的用户空间,以实现在容器里面启动服务并且使用容器的运行环境,即一个宿主机是ubuntu的服务器,可以在里面启动一个centos运行环境的容器并且在容器里面启动一个Nginx服务,此Nginx运行时使用的运行环境就是centos系统目录的运行环境,但是在容器里面是不能访问宿主机的资源,宿主机是使用了chroot技术把容器锁定到一个指定的运,行目录里面。
  例如: /var/lib/containerd/io.containerd.runtime.v1.linux/moby/容器ID
  1.1.4.2: IPC Namespace:
  一个容器内的进程间通信,允许一个容器内的不同进程的(内存、缓存等)数据访问,但是不能跨容器访问其他容器的数据。
  1.1.4.3: UTS Namespace:
  UTS namespace (UNIX Timesharing System包含了运行内核的名称、版本、底层体系结构类型等信息)用于系统标识,其中包含了hostname和域名
  domainname ,它使得一个容器拥有属于自己hostname标识,这个主机名标识独立于宿主机系统和其上的其他容器。
  1.1.4.4: PID Namespace:
  Linux 系统中,有一个PID为1的进程(init/systemd)是其他所有进程的父进程,那么在每个容器内也要有一个父进程来管理其下属的子进程,那么多个容器的进程通PID namespace进程隔离(比如PID编号重复、器内的主进程生成与回收子进程等)。
  1.1.4.5: Net Namespace:
  每一个容器都类似于虚拟机一样有自己的网卡、监听端口、TCP/IP协议栈等, Docker 使用network namespace 启动一个vethX接口,这样你的容器将拥有它自己的桥接ip地址,通常是docker0,而 docker0实质就是Linux的虚拟网桥,网桥是在OSI七层模型的数据链路层的网络设备,通过mac地址对网络进行划分,并且在不同网络直接传递数据。
  1.1.4.5.2:查看宿主机桥接设备:
  通过`brctl show`命令查看桥接设备:
  1.1.4.5.3 实逻辑网络图
  1.1.4.5.4 宿主机iptables规则
  1.1.4.6: User Namespace:
  各个容器内可能会出现重名的用户和用户组名称,或重复的用户UID或者GID,那么怎么隔离各个容器内的用户空间呢?
  User Namespace允许在各个宿主机的各个容器空间内创建相同的用户名以及相同的用户UID和GID,只是会把用户的作用范围限制在每个容器内,即A容器和B容器可以有相同的用户名称和ID的账户,但是此用户的有效范围仅是当前容器内,不能访问另外一个容器内的文件系统,即相互隔离、互补影响、永不相见。
  1.1.5: Linux control groups:
  在一个容器,如果不对其做任何资源限制,则宿主机会允许其占用无限大的内存空间,有时候会因为代码bug程序会一直申请内存,直到把宿主机内存占完,为了避免此类的问题出现,宿主机有必要对容器进行资源分配限制,比如CPU. 内存等, Linux Cgroups 的全称是Linux Control Groups,它最主要的作用,就是限制一个进程组能够使用的资源上限,包括CPU、内存、磁盘、网络带宽等等。此外,还能够对进程进行优先级设置,以及将进程挂起和恢复等操作。
  1.1.5.1:验证系统cgroups:
  Cgroups 在内核层默认已经开启,从centos 和ubuntu对比结果来看,显然内核较新的ubuntu支持的功能更多
  1.1.5.1.1 Centos 7.6 cgroups
  1.1.5.1.2 Ubuntu cgroups
  1.1.5.1.3 cgroup 中内存模块
  1.1.5.1.4 cgroup 具体实现
  blkio: 块设备IO限制。
  cpu: 使用调度程序为cgroup任务提供cpu的访问。
  cpuacct:产生 cgroup任务的cpu资源报告。
  cpuset:如果是多核心的cpu,这个子系统会为cgroup任务分配单独的cpu和内存。
  devices:允许或拒绝cgroup任务对设备的访问。
  freezer:暂停和恢cgroup任务。
  memory:设置每个 cgroup的内存限制以及产生内存资源报告。
  net_cls:标记每个网络包以供cgroup方便使用。
  ns:命名空间子系统。
  perf_event:增加了对每group 的监测跟踪的能力,可以监测属于某个特定的
  group 的所有线程以及运行在特定CPU上的线程。
  1.1.5.1.5 查看系统cgroups
  有了以上的chroot, namespace, cgroups 就具备了基础的容器运行环境,但是还需要有相应的容器创建与删除的管理工具、以及怎么样把容器运行起来、容器数据怎么处理、怎么进行启动与关闭等问题需要解决,于是容器管理技术出现
  了。
  1.1.6:容器管理工具:
  目前主要是使用docker,早期有使用Ixc.
  1.1.6.1: Ixc:
  LXC: LXC 为Linux Container的简写。可以提供轻量级的虚拟化,以便隔离进 程和资源,官方网站: https://linuxcontainers.org/
  1.1.6.2: docker:
  Docker启动一个容器也需要一个外部模板但是较多镜像,docke的镜像可以保存在一个公共的地方共享使用,只要把镜像下载下来就可以使用,最主要的是可以在镜像基础之上做自定义配置并且可以再把其提交为一个镜像,一个镜像可以被启动为多个容器。
  Docker的镜像是分层的,镜像底层为库文件且只读层即不能写入也不能删除数据,从镜像加载启动为一个容器后会生成一个可写层,其写入的数据会复制到容器目录,但是容器内的数据在删除容器后也会被随之删除。
  1.1.6: Docker 的优势:
  快速部署:短时间内可以部署成百上千个应用,更快速交付到线上。
  高效虚拟化:不需要额外的hypervisor支持,直接基于linux实现应用虚拟化,相比虚拟机大幅提高性能和效率。
  节省开支:提高服务器利用率,降低IT支出。
  简化配置:将运行环境打包保存至容器,使用时直接启动即可。
  快速迁移和扩展:可跨平台运行在物理机、虚拟机,公有云等环境,良好的兼容性可以方便将应用从A宿主机迁移到B宿主机,甚至是A平台迁移到B平台。
  1.1.7: Docker的缺点:
  隔离性:各应用之间的隔离不如虚拟机彻底。
  1.1.8: docker(容器)的核心技术:
  1.1.8.1:容器规范:
  容器技术除了的docker之外,还有coreOS的rkt,还有阿里的Pouch,为了保证容器生态的标准性和健康可持续发展,包括Linux基金会、Docker、微软、红帽谷歌和、IBM、等公司在2015年6月共同成立了一个叫 open container(OCI)的组织,其目的就是制定开放的标准的容器规范,目前OCI一共发布了 两个规范,分别是runtime spec和image format spec,有了这两个规范,不同的容器公司开发的容器只要兼容这两个规范,就可以保证容器的可移植性和相互可操作性。
  1.1.8.1.1:容器 runtime(runtime spec):
  runtime是真正运行容器的地方,因此为了运行不同的容器runtime需要和操作系统内核紧密合作相互在支持,以便为容器提供相应的运行环境。
  目前主流的三种runtime:
  Lxc: linux 上早期的runtime, Docker 早期就是采用Ixc作为runtime.
  runc: 目前Docker 默认的runtime, runc遵守OCI规范,因此可以兼容Ixc.
  rkt:是CoreOS 开发的容器 runtime,也符合OCI规范,所以使用rktruntime也可以运行Docker容器。
  runtime 主要定义了以下规范,并以json格式保存在/run/docker/runtime-runc/moby/容器 ID/state.json文件, 此文件会根据容器的状态
  实时更新内容
  1.1.8.1.2:容器镜像(image format spec):
  OCI容器镜像主要包含以下内容:
  1.1.8.2:容器管理工具:
  管理工具连接runtime与用户,对用户提供图形或命令方式操作,然后管理工具将用户操作传递给runtime执行。
  Ixc是Ixd的管理工具。
  Runc的管理工具是 docker engine, docker engine 包含后台 deamon cli 两部分,大家经常提到的Docker就是指的docker engine.
  Rkt的管理工具是rkt cli.
  1.1.8.3:容器定义工具:
  容器定义工具允许用户定义容器的属性和内容,以方便容器能够被保存、共享和重建。
  Docker image:是docker 容器的模板, runtime依据docker image创建容器。
  Dockerfile: 包含N个命令的文本文件,通过dockerfile 创建出 docker image. ACI(App container image): 与 docker image 类似,是CoreOS 开发的 rkt 容器
  的镜像格式。
  1.1.8.4: Registry:
  统一保存镜像而且是多个不同镜像版本的地方,叫做镜像仓库。
  Image registry: docker 官方提供的私有仓库部署工具。
  Docker hub: docker 官方的公共仓库,已经保存了大量的常用镜像,可以方便大家直接使用。
  Harbor: vmware提供的自带 web界面自带认证功能的镜像仓库,目前有很多公司使用。
  1.1.8.5:编排工具:
  当多个容器在多个主机运行的时候,单独管理容器是相当复杂而且很容易出错,而且也无法实现某一台主机容机后容器自动迁移到其他主机从而实现高可用的目的,也无法实现动态伸缩的功能,因此需要有一种工具可以实现统一管理、动态伸缩、故障自愈、批量执行等功能,这就是容器编排引擎。
  容器编排通常包括容器管理、调度、集群定义和服务发现等功能。
  Docker swarm: docker 开发的容器编排引擎。
  Kubernetes: google领导开发的容器编排引擎,内部项目为Borg,且其同时支 持docker和CoreOS.
  Mesos+Marathon:通用的集群组员调度平台, mesos(资源分配)与marathon(容器编排平台)一起提供容器编排引警功能,
  一、简介:
  前言
  统称来说,容器是一种工具,指的是可以装下其它物品的工具,以方便人类归纳放置物品、存储和异地运输,具体来说比如人类使用的衣柜、行李箱、背包等可以成为容器,但今天我们所说的容器是一种IT技术。
  容器技术是虚拟化、云计算、大数据之后的一门新兴的并且是炙手可热的新技术,容器技术提高了硬件资源利用率、方便了企业的业务快速横向扩容、实现了业务启机自愈功能,因此未来数年会是一个容器愈发流行的时代,这是一个对于IT行业来说非常有影响和价值的技术,而对于IT行业的从业者来说,熟练掌握容器技术无疑是一个很有前景的行业工作机会。
  容器技术最早出现在freebsd叫做jail。
  1.1: docker 简介:
  1.1.1: Docker 是什么:
  首先Docker是一个在2013年开源的应用程序并且是一个基于go语言编写是 一个开源的PAAS服务(Platform as a Service,平台即服务的缩写), go语言是 由 google 开发, docker 公司最早叫 dotCloud后由于Docker 开源后大受欢迎就将公司改名为Docker Inc,总部位于美国加州的旧金山, Docker是基于linux内核实现,Docker最早采用LXC技术(LinuX Container的简写,LXC是Linux原生支持的容器技术,可以提供轻量级的虚拟化,可以说docker就是基于LXC发展起来的(0.1.5 (2013-04-17),提供LXC的高级封装,发展标准的配置方法), 而虚拟化技术KVM(Kernel-based Virtual Machine)基于模块实现,Docker后改为自己研发并开源的runc技术运行容器(1.11.0 (2016-04-13)。
  Docker now relies on containerd and runc to spawn containers.
  Docker相比虚拟机的交付速度更快,资源消耗更低, Docker采用客户端/服务端架构,使用远程API来管理和创建Docker容器,其可以轻松的创建一个轻量级的、可移植的、自给自足的容器, docker的三大理念是build(构建)、ship(运 输)、run(运行), Docker 遵从 apache 2.0 协议,并通过(namespace及cgroup等)来提供容器的资源隔离与安全保障等,所以Docke容器在运行时不需要类似虚拟机(空运行的虚拟机占用物理机的一定性能开销)的额外资源开销,因此可以大幅提高资源利用率,总而言之Docker是一种用了新颖方式实现的轻量级虚拟机.类似于VM但是在原理和应用上和VM的差别还是很大的,并且docker
  的专业叫法是应用容器(Application Container)。
  1.1.2: Docker 的组成:
  https://docs.docker.com/engine/docker-overview/
  Docker 主机(Host): 一个物理机或虚拟机,用于运行Docker服务进程和容器。
  Docker服务端(Server): Docker 守护进程,运行 docker容器。
  Docker客户端(Client): 客户端使用docker 命令或其他工具调用docker API。
  Docker 仓库(Registry): 保存镜像的仓库,类似于git或svn这样的版本控制系
  Docker 镜像(Images): 镜像可以理解为创建实例使用的模板。
  Docker 容器(Container): 容器是从镜像生成对外提供服务的一个或一组服务。 官方仓库: https://hub.docker.com
  1.1.3: Docker 对比虚拟机:
  资源利用率更高: 一台物理机可以运行数百个容器,但是一般只能运行数十个虚拟机。
  开销更小: 不需要启动单独的虚拟机占用硬件资源。
  启动速度更快: 可以在数秒内完成启动。
  使用虚拟机是为了更好的实现服务运行环境隔离,每个虚拟机都有独立的内核,虚拟化可以实现不同操作系统的虚拟机,但是通常一个虚拟机只运行一个服务,很明显资源利用率比较低且造成不必要的性能损耗,我们创建虚拟机的目的是为了运行应用程序,比如Nginx. PHP、 Tomcat等web程序,使用虚拟机无疑带来了一些不必要的资源开销,但是容器技术则基于减少中间运行环节带来较大的性能提升。
  但是,如上图一个宿主机运行了N个容器,多个容器带来的以下问题怎么解决:
  1.怎么样保证每个容器都有不同的文件系统并且能互不影响?
  2.一个docker主进程内的各个容器都是其子进程,那么实现同一个主进程下不同类型的子进程?各个进程间通信能相互访问(内存数据)吗?
  3.每个容器怎么解决IP及端口分配的问题?
  4.多个容器的主机名能一样吗?
  5.每个容器都要不要有root用户?怎么解决账户重名问题?
  以上问题怎么解决?
  1.1.4: Linux Namespace 技术:
  namespace是Linux系统的底层概念,在内核层实现,即有一些不同类型的命名空间被部署在核内,各个docker容器运行在同一个docker主进程并且共用同一个宿主机系统内核,各docker容器运行在宿主机的用户空间,每个容器都要有类似于虚拟机一样的相互隔离的运行空间,但是容器技术是在一个进程内实现运行指定服务的运行环境,并且还可以保护宿主机内核不受其他进程的干扰和影响,如文件系统空间、网络空间、进程空间等,目前主要通过以下技术实现容器运行空间的相互隔离
  1.1.4.1: MNT Namespace:
  每个容器都要有独立的根文件系统有独立的用户空间,以实现在容器里面启动服务并且使用容器的运行环境,即一个宿主机是ubuntu的服务器,可以在里面启动一个centos运行环境的容器并且在容器里面启动一个Nginx服务,此Nginx运行时使用的运行环境就是centos系统目录的运行环境,但是在容器里面是不能访问宿主机的资源,宿主机是使用了chroot技术把容器锁定到一个指定的运,行目录里面。
  例如: /var/lib/containerd/io.containerd.runtime.v1.linux/moby/容器ID
  1.1.4.2: IPC Namespace:
  一个容器内的进程间通信,允许一个容器内的不同进程的(内存、缓存等)数据访问,但是不能跨容器访问其他容器的数据。
  1.1.4.3: UTS Namespace:
  UTS namespace (UNIX Timesharing System包含了运行内核的名称、版本、底层体系结构类型等信息)用于系统标识,其中包含了hostname和域名
  domainname ,它使得一个容器拥有属于自己hostname标识,这个主机名标识独立于宿主机系统和其上的其他容器。
  1.1.4.4: PID Namespace:
  Linux 系统中,有一个PID为1的进程(init/systemd)是其他所有进程的父进程,那么在每个容器内也要有一个父进程来管理其下属的子进程,那么多个容器的进程通PID namespace进程隔离(比如PID编号重复、器内的主进程生成与回收子进程等)。
  1.1.4.5: Net Namespace:
  每一个容器都类似于虚拟机一样有自己的网卡、监听端口、TCP/IP协议栈等, Docker 使用network namespace 启动一个vethX接口,这样你的容器将拥有它自己的桥接ip地址,通常是docker0,而 docker0实质就是Linux的虚拟网桥,网桥是在OSI七层模型的数据链路层的网络设备,通过mac地址对网络进行划分,并且在不同网络直接传递数据。
  1.1.4.5.2:查看宿主机桥接设备:
  通过`brctl show`命令查看桥接设备:
  1.1.4.5.3 实逻辑网络图
  1.1.4.5.4 宿主机iptables规则
  1.1.4.6: User Namespace:
  各个容器内可能会出现重名的用户和用户组名称,或重复的用户UID或者GID,那么怎么隔离各个容器内的用户空间呢?
  User Namespace允许在各个宿主机的各个容器空间内创建相同的用户名以及相同的用户UID和GID,只是会把用户的作用范围限制在每个容器内,即A容器和B容器可以有相同的用户名称和ID的账户,但是此用户的有效范围仅是当前容器内,不能访问另外一个容器内的文件系统,即相互隔离、互补影响、永不相见。
  1.1.5: Linux control groups:
  在一个容器,如果不对其做任何资源限制,则宿主机会允许其占用无限大的内存空间,有时候会因为代码bug程序会一直申请内存,直到把宿主机内存占完,为了避免此类的问题出现,宿主机有必要对容器进行资源分配限制,比如CPU. 内存等, Linux Cgroups 的全称是Linux Control Groups,它最主要的作用,就是限制一个进程组能够使用的资源上限,包括CPU、内存、磁盘、网络带宽等等。此外,还能够对进程进行优先级设置,以及将进程挂起和恢复等操作。
  1.1.5.1:验证系统cgroups:
  Cgroups 在内核层默认已经开启,从centos 和ubuntu对比结果来看,显然内核较新的ubuntu支持的功能更多
  1.1.5.1.1 Centos 7.6 cgroups
  1.1.5.1.2 Ubuntu cgroups
  1.1.5.1.3 cgroup 中内存模块
  1.1.5.1.4 cgroup 具体实现
  blkio: 块设备IO限制。
  cpu: 使用调度程序为cgroup任务提供cpu的访问。
  cpuacct:产生 cgroup任务的cpu资源报告。
  cpuset:如果是多核心的cpu,这个子系统会为cgroup任务分配单独的cpu和内存。
  devices:允许或拒绝cgroup任务对设备的访问。
  freezer:暂停和恢cgroup任务。
  memory:设置每个 cgroup的内存限制以及产生内存资源报告。
  net_cls:标记每个网络包以供cgroup方便使用。
  ns:命名空间子系统。
  perf_event:增加了对每group 的监测跟踪的能力,可以监测属于某个特定的
  group 的所有线程以及运行在特定CPU上的线程。
  1.1.5.1.5 查看系统cgroups
  有了以上的chroot, namespace, cgroups 就具备了基础的容器运行环境,但是还需要有相应的容器创建与删除的管理工具、以及怎么样把容器运行起来、容器数据怎么处理、怎么进行启动与关闭等问题需要解决,于是容器管理技术出现
  了。
  1.1.6:容器管理工具:
  目前主要是使用docker,早期有使用Ixc.
  1.1.6.1: Ixc:
  LXC: LXC 为Linux Container的简写。可以提供轻量级的虚拟化,以便隔离进 程和资源,官方网站: https://linuxcontainers.org/
  1.1.6.2: docker:
  Docker启动一个容器也需要一个外部模板但是较多镜像,docke的镜像可以保存在一个公共的地方共享使用,只要把镜像下载下来就可以使用,最主要的是可以在镜像基础之上做自定义配置并且可以再把其提交为一个镜像,一个镜像可以被启动为多个容器。
  Docker的镜像是分层的,镜像底层为库文件且只读层即不能写入也不能删除数据,从镜像加载启动为一个容器后会生成一个可写层,其写入的数据会复制到容器目录,但是容器内的数据在删除容器后也会被随之删除。
  1.1.6: Docker 的优势:
  快速部署:短时间内可以部署成百上千个应用,更快速交付到线上。
  高效虚拟化:不需要额外的hypervisor支持,直接基于linux实现应用虚拟化,相比虚拟机大幅提高性能和效率。
  节省开支:提高服务器利用率,降低IT支出。
  简化配置:将运行环境打包保存至容器,使用时直接启动即可。
  快速迁移和扩展:可跨平台运行在物理机、虚拟机,公有云等环境,良好的兼容性可以方便将应用从A宿主机迁移到B宿主机,甚至是A平台迁移到B平台。
  1.1.7: Docker的缺点:
  隔离性:各应用之间的隔离不如虚拟机彻底。
  1.1.8: docker(容器)的核心技术:
  1.1.8.1:容器规范:
  容器技术除了的docker之外,还有coreOS的rkt,还有阿里的Pouch,为了保证容器生态的标准性和健康可持续发展,包括Linux基金会、Docker、微软、红帽谷歌和、IBM、等公司在2015年6月共同成立了一个叫 open container(OCI)的组织,其目的就是制定开放的标准的容器规范,目前OCI一共发布了 两个规范,分别是runtime spec和image format spec,有了这两个规范,不同的容器公司开发的容器只要兼容这两个规范,就可以保证容器的可移植性和相互可操作性。
  1.1.8.1.1:容器 runtime(runtime spec):
  runtime是真正运行容器的地方,因此为了运行不同的容器runtime需要和操作系统内核紧密合作相互在支持,以便为容器提供相应的运行环境。
  目前主流的三种runtime:
  Lxc: linux 上早期的runtime, Docker 早期就是采用Ixc作为runtime.
  runc: 目前Docker 默认的runtime, runc遵守OCI规范,因此可以兼容Ixc.
  rkt:是CoreOS 开发的容器 runtime,也符合OCI规范,所以使用rktruntime也可以运行Docker容器。
  runtime 主要定义了以下规范,并以json格式保存在/run/docker/runtime-runc/moby/容器 ID/state.json文件, 此文件会根据容器的状态
  实时更新内容
  1.1.8.1.2:容器镜像(image format spec):
  OCI容器镜像主要包含以下内容:
  1.1.8.2:容器管理工具:
  管理工具连接runtime与用户,对用户提供图形或命令方式操作,然后管理工具将用户操作传递给runtime执行。
  Ixc是Ixd的管理工具。
  Runc的管理工具是 docker engine, docker engine 包含后台 deamon cli 两部分,大家经常提到的Docker就是指的docker engine.
  Rkt的管理工具是rkt cli.
  1.1.8.3:容器定义工具:
  容器定义工具允许用户定义容器的属性和内容,以方便容器能够被保存、共享和重建。
  Docker image:是docker 容器的模板, runtime依据docker image创建容器。
  Dockerfile: 包含N个命令的文本文件,通过dockerfile 创建出 docker image. ACI(App container image): 与 docker image 类似,是CoreOS 开发的 rkt 容器
  的镜像格式。
  1.1.8.4: Registry:
  统一保存镜像而且是多个不同镜像版本的地方,叫做镜像仓库。
  Image registry: docker 官方提供的私有仓库部署工具。
  Docker hub: docker 官方的公共仓库,已经保存了大量的常用镜像,可以方便大家直接使用。
  Harbor: vmware提供的自带 web界面自带认证功能的镜像仓库,目前有很多公司使用。
  1.1.8.5:编排工具:
  当多个容器在多个主机运行的时候,单独管理容器是相当复杂而且很容易出错,而且也无法实现某一台主机容机后容器自动迁移到其他主机从而实现高可用的目的,也无法实现动态伸缩的功能,因此需要有一种工具可以实现统一管理、动态伸缩、故障自愈、批量执行等功能,这就是容器编排引擎。
  容器编排通常包括容器管理、调度、集群定义和服务发现等功能。
  Docker swarm: docker 开发的容器编排引擎。
  Kubernetes: google领导开发的容器编排引擎,内部项目为Borg,且其同时支 持docker和CoreOS.
  Mesos+Marathon:通用的集群组员调度平台, mesos(资源分配)与marathon(容器编排平台)一起提供容器编排引警功能,

上了年纪,每年打吊针,冲血管,清除体内垃圾真的有必要么?9。29日为世界心脏日世界心脏日,而与心脏息息相关的就是血管,因为心脏是泵血的器官,血管是传输血液的主要通路,两者相辅相成为我们机体正常运转贡献力量。因此也借这一天我们一起来学习下大卫詹姆斯布卡约萨卡应该转会到曼城阿森纳边锋布卡约萨卡如果想赢得奖杯,应该会转会到曼城,前利物浦门将大卫詹姆斯说。在过去的几个赛季里,这位英格兰国脚一直是枪手最好的球员之一,在前七场英超比赛中,他以一个进球和四次助欠薪外援逃离!武汉长江四连败深陷保级苦战沧州补外援真成雄狮主场14遭沧州雄狮逆转,武汉长江遭遇四连败六轮不胜,李金羽在场边只能默默摇头。俱乐部欠薪球队外援缺失战斗力下降,尽管武汉长江队还领先降级区6分,但在广州城广州队都有明显起色的情况下中超最新积分榜武磊2球上海海港完胜,申花客场大逆转稳居第3今天,中超联赛进行了多场补赛,上海海港主场30完胜成都蓉城,继续稳居联赛第4位,武磊梅开二度,终于打进回归后的首球沧州雄狮客场41大胜武汉长江,延续着强劲势头,坎特上演助攻帽子戏,痰是肺病的预警,黑痰黄痰白痰分别暗示了什么?一文说清出门逛街看到随地吐痰的人,就会觉得素质欠佳。不过由于食物或者疾病的原因,每个人都经历过咳嗽有痰的症状。那喉咙里产生的痰到底脏不脏?如果咽下去的话,对身体有没有害呢?一黏在喉咙上的痰8年高血压的困扰!讲一个常用的有效方,专门除根调本血压指的是血液对血管壁的测压力,正常情况下血液运行带来能量营养物质氧气等可满足我们身体细胞组织器官正常功能代谢的需求。而当我们的血液运行不能满足我们身体细胞组织器官正常功能代谢的需几块钱的逍遥丸,不仅疏肝健脾养血,还适用于这5种病逍遥丸我们都不陌生,已经是成为许多家庭的常备药了,它是张仲景舒肝养血的代表方,又被称为妇科圣药。但还有很多人对逍遥丸的理解都处在简单的层面上,认为逍遥丸只是治疗生气之后不舒服的,今警惕!这些都是公认的一级致癌物!就藏在每个人的身边由于生活习惯饮食习惯,癌症的发病率越来越高,在这个谈癌色变的年代,癌症或许没有你想象中的那么遥远,一些致癌物就藏在我们饮食生活的点滴之间。01hr藏在身边的一级致癌物癌症并不是一夕痔疮,大便出血,乃是风伤肠络中医如何治疗潘先生,便后间断性出血4年。4年前因大便干燥,出现大便出血。颜色鲜红。平时一天只有一次大便,且常常特别干燥。解出不畅快,偶有肛门瘙痒。患者精神状况良好,无恶寒发热,饮食正常,夜寐安湿气重的人怎么排湿减肥最有效?湿气重这三个词听得太频繁了,可以说很多人去看中医,会被告知身体水分很重,尤其是女性朋友,更容易受到水分的侵袭。女性朋友如何判断她们的水分不重?事实上,这很简单,如果你经常疲劳,舌头一种不起眼的小蒜,却能通心气,是用于心脏病心绞痛的良药提起薤白(薤,音xi泻)这味中药,你可能比较陌生,但说起它的亲戚,你就会很熟悉了,那就是葱和蒜。大葱大蒜薤白有的地方叫小蒜野蒜藠头(藠,音叫),闻起来也有一股类似于蒜的气味。和葱蒜
母女罕见同框走红地毯!40岁瓦妮莎身材凹凸有致,气场十足太美了点击阅读可看更多857体育资讯湖人队残阵对阵尼克斯,最终以4分惜败对手,战绩下降到西部第十一名的位置不过,我们还是不担心湖人的季后赛前景,只要能够打进附加赛,就会像那一年一样突围进特等功臣郭俊卿,参军5年从不脱衣睡觉,生病后才被发现不是男人在我军的战史上,有一位特殊的特等功臣郭俊卿。他参军5年,从不脱衣睡觉,也从不和其他人一起上厕所洗澡。直到一次生病住院才被医生发现他不是男儿身,而是一个女娃子。这一切是怎么回事呢?郭男人年过50喝酒要注意,牢记1喝2不喝,早点知道益处多男人年过50,不仅身上的压力没有变小,反而变得更重了,肩上的责任也更大了,这个时候一定要有一个好的身体,毕竟健康的身体是革命的本钱,也正因如此,越来越多人开始注重养生。对于爱喝酒的马赛的地中海风情提起法国,除了巴黎,知名度最高的大概就是马赛了。马赛是法国的第二大城市和最大海港,东南濒地中海,水深港阔,无急流险滩,万吨级轮可畅通无阻西部有罗纳河及平坦河谷与北欧联系,地理位置得315国际消费者权益日的前世今生每年的3月15日是国际消费者权益日,这个特殊的日子是为了庆祝和宣传消费者权益而设立的。然而,这个节日的历史却并不平静。它是如何走过漫长的历史而成为今天普及的全球性节日的呢?下面讲述86年实行的夏令时,每年省电相当于3个三峡,最后为何被取消历史开讲三更灯火五更鸡,正是男儿读书时,在钟表还没有发明和普及的时候,聪明的中国人靠着对自然界规律的掌握来判断时间,从而决定一天的作息时间。日出而作,日落而息,从古至今皆是如此,虽人是怎么学会制火的?中国和西方的传说,你更信哪一个?火的制造是一个伟大的发明,恩格斯把这看做是人类历史的开端。人类是在和大自然的长期斗争中,掌握了使用火的技术的。那么,制火的技术是盗来的还是学来的呢?如果是盗来的,又是盗了谁的?如果骑行长安街畔,在高楼大厦的缝隙中寻找昔日的王公府邸前面我介绍了西单大悦城附近的郑王府。看完郑王府,我便骑着车一路向南,穿过长安街,去到长安街的南侧去寻找剩下的两座府邸。长安街在北京是很特殊的存在,没有词语能够形容它的威严和气势。它近代十大家喻户晓科学家,钱学森第一,华罗庚第三,袁隆平第五我国开始了经济发展和科学水平的快速提高,从而涌现了一代又一代的优秀科学家,很多海外游子开始回到祖国,开始了日夜不停的努力和坚持付出,让我国的科学发展事业走向前所未有的进步,相信大家讨董战争历史开讲董卓废立皇帝,正好给了袁绍等地方实力派军阀一个挑起战争的借口。东汉初平元年(190),东汉各地的军阀们联合起来,开始了一场历时15个月的讨董战争。当时地方军阀的联军总兵力远北宋仁宗赵祯宋仁宗赵祯画像赵祯,原名赵受益,为北宋王朝第四任皇帝,是北宋真宗赵恒的第6子,母为李宸妃。北宋真宗大中祥符三年(庚戌,1010年)四月十四日,赵祯出生。时值,其父宋真宗赵恒宠信的美