Docker (一)Docker 入门

###1. 什么是docker

  Docker 一个基于go语言开源的应用容器引擎,开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到的 Linux 机器上,也可以实现虚拟化。

  为什么要使用docker?在没有使用docker之前,代码在开发到生产这个过程中往往需要经过一系列的环境的搭建以及数据的准备。例如:部署安装生产环境的的redis集群环境,在这之前需要ruby的底层环境等其他众多底层环境的依赖,而这种简单的环境迁移仅仅是在众多运维工作中的很小的一个部分,可想而知在运维过程中,往往很多的时间和精力都花费在环境的重复搭建和踩坑之中。在拥有了docker之后,可以将需要的应用以及数据按照一定的格式和标准进行封装,打包为一个镜像,有点类似于咱们在系统安装中接触到的iSO文件。而镜像通常可能会遇到损坏的情况,这时候在镜像的外层增加一个容器,如果需要复制到其他环境,只需要简单的几行命令即可将这个应用完全安装到新的环境。在这个过程中,Docker自动将安装和配置的工作完成。##

##2. 应用场景

  • a. 统一不同环境配置,代码部署流水线化
  • b. 隔离不同应用
    强调单个容器来部署单个应用
  • c. 自动化测试和持续集成
    标准化构建方法(buildfile)和良好的REST API,自动化测试和持续集成/部署能够很好的集成进来
  • d. 快速部署扩展应用

##3. 对比

Docker vs OpenStack

这里写图片描述

Docker vs KVM

这里写图片描述
##4. 优点和不足

优点:如同上面在应用场景中介绍的一样,docker在解决应用隔离以及代码快速部署的过程中体现了作为替代VM的潜质。
不足:
i. docker在处理一些携带的敏感数据的应用上,存在可泄露的风险。
ii. 实现docker需要众多的技术支撑。

##5.docker中的哪些概念
客户端 守护进程:

docker客户端向守护进程发送操作命令。

镜像:

 保存了容器启动的各种配置文件及所需运行的文件源码。
最低端为bootfs,类似与windows boot引导;上一层为root文件系统,为一种或者多种操作系统,为unix系统,只能为只读状态。
一个镜像可层叠。

容器:

  通过镜像来启动构建的执行操作单元,容器是在镜像的基础上加载可写文件系统。例如:如果想修改某个文件。这时候docker将会该文件从只读文件层复制到可写文件层,当用户在修改时,仅仅在这个可写层进行操作,只读层并不会改变。这个技术被称为可写时复制技术。
  容器依托于linux内核namespace的虚拟化技术来实现,被称为操作系统的虚拟化技术。而想比与虚拟机,容器化技术仅需要更少的硬件资源,仅依赖于本身的操作系统镜像。

仓库

  仓库中保存了大量的镜像,用户可直接pull下载使用,有点类似于maven的中央仓库。

![这里写图片描述](https://img-blog.csdn.net/20170709184646134?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2ZsMjAxMjEzMTQ=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

LXC

  Linux containers 的简称。基于容器操作系统的虚拟化技术,主要利用namespace以及Cgroup加上一些其他技术来达到进程之间资源的分离。

  Docker在LXC的基础之上构建了一个更高层次的工具集用来管理container,并提供了一套用来管理的工具。
相比于LXC:
  Docker可以将对象打包为一个镜像在任何存在docker环境的机器中运行,而LXC仅仅能做的是进程之间的资源隔离,并不能达到运行的程度。
这里写图片描述

如上图为Docker和Lxc以及Cgroup之间的关系。

NameSpace

  在开发过程中,我们经常见到namespace的概念。同理在linux中,namespace的概念也是一样的。用来协调和隔离linux资源的作用,具体的关系可以归为同一个进程可以属于多个namespace、多个进程可以使用同一个namespace。这里还存在父子命名空间的问题,父空间可以发现子空间的资源进程并可以通过信号等方式影响子进程。反过来,子空间则不可以。

常用命名空间:

  • PID命名空间:进程的之间的隔离。
  • Net命名空间:隔离容器之间的网络。
  • Ipc命名空间:用于访问IPC资源的。
  • Mnt命名空间:用于管理挂载点,每个容器都有自己唯一的目录挂载点。
  • Uts命名空间:隔离系统内核和版本标识。

命名空间作为一种轻量化的虚拟技术,在资源的使用上做非常的好的节省。
但是这样也带来一些问题,相比与传统的虚拟化技术实际上没有做到完全的隔离,只是做到了系统的不同视图来带来的一种对用户的假象。

Control groups 控制组

  是Linux内核提供的一种可以限制、记录、隔离进程组所使用的技术。主要有以下这些方面进行限制:

  • 资源限制
    主要是只cpu和内存
  • 优先级限制
    为单个进程设置优先级顺序
  • 进程组限制
    控制进程组的挂起和恢复

UnionFS

  是一个联合的文件系统,可以将多个目录内容合并在一起,而在物理上是分开的,有点类似于在lucense中的索引文件的分片文件的概念。而Docker正是用了这个技术来达到容器的快速构建和升级。在UnionFS中有一个非常重要的概念,叫写时复制:
  意思是,如果一个资源是重复的,但没有任何修改,这时候并不需要立即创建一个新的资源;这个资源可以被新旧实例共享。创建新资源发生在第一次写操作,也就是对资源进行修改的时候。通过这种资源共享的方式,可以显著地减少未修改资源复制带来的消耗,但是也会在进行资源修改的时候增减小部分的开销。
也就是说,每启动一个容器时,Docker会创建一个只读的层,用来存储和这个容器相关的内容;同时还会创建一个可写的层来执行所有的写操作。
简单的说,docker利用namespace实现系统环境的隔离;利用Cgroup实现资源限制;利用镜像实现根目录环境的隔离。
参考资料:

Linux中的Cgroup:http://speakingbaicai.blog.51cto.com/5667326/1359825/
Linux中的namespace
http://www.infoq.com/cn/articles/docker-kernel-knowledge-namespace-resource-isolation
Linux命名空间的创建:http://blog.csdn.net/mrpre/article/details/25385891

什么是Docker Docker 最初是dotCloud 公司创始人Solomon Hykes 在法国期间发起的一个公司内部项目, 它是基于dotCloud 公司多年云服务技术的一次革新,并于2013 年3 月以Apache 2.0 授权 协议开源,主要项目代码在GitHub 上进行维护。Docker 项目后来还加入了Linux 基金会, 并成立推动开放容器联盟(OCI)。 Docker 自开源后受到广泛的关注和讨论,至今其GitHub 项目已经超过4 万6 千个星标和一 万多个fork。甚至由于Docker 项目的火爆,在2013 年底,dotCloud 公司决定改名为 DockerDocker 最初是在Ubuntu 12.04 上开发实现的;Red Hat 则从RHEL 6.5 开始对 Docker 进行支持;Google 也在其PaaS 产品中广泛应用DockerDocker 使用Google 公司推出的Go 语言进行开发实现,基于Linux 内核的 cgroup,namespace,以及AUFS 类的Union FS 等技术,对进程进行封装隔离,属于操作 系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容 器。最初实现是基于LXC,从0.7 版本以后开始去除LXC,转而使用自行开发的 libcontainer,从1.11 开始,则进一步演进为使用runC 和containerd。 Docker 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极 大的简化了容器的创建和维护。使得Docker 技术比虚拟机技术更为轻便、快捷。 下面的图片比较了Docker 和传统虚拟化方式的不同之处。传统虚拟机技术是虚拟出一套硬件 后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;而容器内的应用进程 直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比 传统虚拟机更为轻便。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柏修

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值