docker是PaaS提供商dotCloud开源的一个基于LXC的高级容器引擎,基于go语言并遵循Apache2.0协议,源码托管于GitHub。
docker解决什么问题
docker解决什么问题?容器是怎么运行的?和虚机有什么不同?老外眼里的container是集装箱不是中国人说的容器。docker有哪些优缺点?
虚机有自己的OS操作系统,独立于主机OS,宿主型hypervisor将虚机当作一个个进程运行在主机上,虚机内核可以和主机不同。
宿主型hypervisor包括开源OpenStack的kvm,VMware的vSphere,微软的Hyper-V、思杰Citrix的XenServer 、IBM的PowerVM、Red Hat的Enterprise Virtulization、华为的FusionSphere,中兴的TECS KVM。
裸机型hypervisor本文先不介绍。
容器之间共享主机的OS操作系统,容器引擎将容器当作一个个进程运行在主机上,虚机内核是使用的主机内核,因此依赖于主机内核版本,且不便于升级。
容器引擎包括docker,CoreOS的rkt和Mesos的Mesos containerizer。当然主流还是docker。
容器运行在host操作系统的用户空间,与操作系统其他进程隔离。在容器启动时不需要启动内核空间,所以启动时比虚机较快,开销少,易迁移。
对比完虚机和容器的不同,我们还是回到主咖docker来介绍。
Docker 将集装箱思想(分类管理货物,不受运输时外界带来的损坏)运用到软件打包(容器特性build onece can run anywhere意味着环境隔离,运行一次后打包可在其他环境上运行)上,为代码提供了一个基于容器的标准化运输系统。
docker并不是全能的,局限在于无法在33位的Windows/Linux环境下使用,基于Linux 64位的。cgroup的CPU和CPUset提供的CPU功能相比KVM等虚拟化方案难以度量(dotCloud主要按照内存收费),docker对磁盘管理能力有限,container随着用户进程的停止销毁导致用户log不便收集。docker网络管理简单,主要是基于namespace隔离。
docker架构篇
docker架构篇Docker 采用的是 Client/Server 架构,包含client,docker daemon服务端,image镜像,registry软件仓库,docker container共5部分。客户端向服务器发送请求,服务器负责构建、运行和分发容器。客户端和服务器可以运行在同一个 Host 上,客户端也可以通过 socket 或 REST API 与远程的服务器通信。
docker镜像篇
docker如何构建镜像什么是base镜像?Linux系统包含内核空间kernel和用户空间rootfs两部分,容器只使用各自的rootfs但共用host的kernel,这就产生镜像结构分成,但为何产生镜像结构分层?如何查查看镜像分层结构?
所有容器都共用 host 的 kernel,在容器中没办法对 kernel 升级。
base 镜像有两层含义:不依赖其他镜像,从 scratch 构建。其他镜像可以之为基础进行扩展。base镜像最小到10M,是不是很神奇,你见过这么精简镜像嘛?
新镜像从 base 镜像一层一层叠加生成的,每安装一个软件,就在现有镜像的基础上增加一层。如果多个镜像从相同的 base 镜像构建而来,那么 Docker Host 只需在磁盘上保存一份 base 镜像,同时内存中也只需加载一份 base 镜像,就可以为所有容器服务了,而且镜像的每一层都可以被共享。
如果多个容器共享一份基础镜像,当某个容器修改了基础镜像的内容,比如 /etc 下的文件,这时其他容器的 /etc 是否也会被修改?
这当然不行,也就产生了可写的容器层。当容器启动时,一个新的可写层被加载到镜像的顶部。这一层通常被称作“容器层”,“容器层”之下的都叫“镜像层”。
镜像的分层结构即镜像制作过程中的操作,通过docker history 镜像名称即可。
了解完理论,该实践了!
It is docker time!
下期预告“docker实践篇“!
docker hello world!-已新鲜出炉了!
docker can run anywhere in the pod!
docker image!
docker storage!
docker cpu and memory!
docker network!