什么是Docker?
Docker是一个用来装应用的容器,就好比杯子用来装水,笔筒用来装笔,书包用来装书一样,你可以把hello world放到Docker里,你可以把网站放到Docker里,你可以把你想的到的任何程序放到Docker里。
Docker的思想
Docker的思想来源于集装箱
下图为运输行业没有集装箱之前的货物处理:
上面的处理异常麻烦,而且还有下面三个问题:
1.货物的运输效率非常慢并且需要非常大的人力资源
2.货物直接与外界接触,不安全
3.每种类型的货物都需要专门的车辆或者轮船来运输
Docker 的思想来源于集装箱,集装箱最大的作用在于能够将货品标准化,在运输的过程中,不需要直接装载和卸载各种各样的商品,而是统一标准的集装箱,这样装载和卸载的环节就可以实现流水线和自动化了,并且商品封装在集装箱中,没有暴露在外面,提高安全性,集装箱与集装箱之间也是互相隔离,不会有任何相互影响的问题。我们也不再需要专门的船去运输专门的货品,只要货品在集装箱内好好封存着,那就可以使用一艘大船将他们都运走。并且你可以很方便的将集装箱装载到飞机、轮船、货车、火车,大大的提高了运输的便利性。
对于我们来说,Docker 也担任了集装箱类似的角色,我们的应用或者所依赖的第三方服务可以理解为货品,而 Docker 则是将我们的货品规范化管理起来,从而可以轻易的完成产品交付,环境转移等等诸多问题。还有我们的货品由Docker这个集中箱封装,对外隔离,提高安全性。并且 Docker 对于主机资源的消耗非常小,可以实现对服务器资源的最大利用。
重点:就是借鉴集装箱的全球统一标准的思想,因为是全球统一标准,就能够实现流水线式来处理流水线上的货物
Docker为我们解决了哪些问题?
首先目前软件业遇到的问题:
1.大量的重复部署的工作
2.应用上线的安全性问题:
没有容器之前,应用由于是直接部署在系统上,安全性问题不是一点半点
而Docker解决安全性的问题:是采取容器与外界系统的隔离
3.环境冲突带来的资源浪费问题
有了Docker之后环境冲突可以这样解决环境冲突的问题
简单总结为:
-
便携性
另一问题是,以传统的方式部署你的应用,如果我们的应用如果后期需要迁移(这里的迁移包括相同操作系统和不同操作系统的迁移),还是需要做大规模的集群,都是一件工作量非常大的操作。而容器化了的应用,对这些操作都是非常方便的。
-
安全性
最后一个不得不提的问题就是安全,以传统的方式部署你的应用,如果该应用被攻击者攻击,或者因为程序自身的bug,又或是运行环境多个应用间混乱的依赖关系导致的问题,这样的话,你的服务器系统安全危险级别会很高,因为这些问题将直接影响你的系统安全。但如果你的应用是运行在Docker容器中,那么一切的危害都会被隔离在容器内,因为容器的资源跟系统是隔离的,危害将被降到最低。
-
组织有序性
以传统的方式部署你的应用,可能出现由于多个应用程序的依赖不用,导致应用之间的依赖变得非常混乱,若此时出现两个应用依赖同一个程序但却依赖不同版本,便会出现让人比较头痛的问题,使用Docker便可以很方便的帮我们管理各个应用的依赖,并以容器为基础将应用的运行环境独立开来,从而不会互相影响,还能提高资源利用率。
Docker VS VM
Docker 的核心是 基于 LXC(Liunx container) 技术的实现,可以理解为一个轻量级的虚拟机(实际上是容器的概念,Docker 不是虚拟机),Docker 使用 Linux 的 namespace 和 cgroups 技术实现容器隔离与资源限制。
Docker的容器隔离的技术是依赖于Linux的技术,与VM完全虚拟出计算机隔离主机的原理根本不同
具体上的不同
应用场景
面向产品:
产品的交付模式改变
之前需要的是:要开发人员到现场部署,现在有了Docker之后,直接发个镜像过去就OK了
面向开发:
个人开发环境发生改变
比如之前在开发环境没有任何问题,但是在测试环境有问题
有了Docker之后,可以在镜像上运行环境,开发/测试的时候
直接在容器上测试就不会有上面的问题了
面向运维:
获得比虚拟机性能损失更小的解决方案
可以更快的进行自动化扩容(VM 是分钟级扩容,Docker 是秒级)
Docker 适用于微服务架构
面向测试:
同一环境下多版本测试
自动化、微服务、大规模集群(微博红包案例)百度的 Paas 平台、等等…
应用场景扩展:http://www.docker.org.cn/docker/151.html
docker中文学习网:http://www.docker.org.cn
Docker带来的挑战:DevOps
基本概念
Docker 有三大重要的概念:仓库、镜像、容器
仓库(Repository):
仓库是用于存放镜像的地方,类似于 Maven 仓库、Git 仓库、yum仓库等用途,仓库之上还有仓库注册服务器(Registry)的概念,上面存放着多个仓库,每个仓库中又有多个镜像,而每个镜像又可以有多个标签(tag)。目前最大的公开仓库是 Docker Hub,我们可以使用类似 Git 命令的方式去 pull/push 镜像
镜像(Image):
可以理解为一个只读的模板,镜像可以用来创建容器,一个镜像可以创建多个容器,你可以直接从官方仓库(docker hub)或者其他私服仓库拉取(pull)想要的镜像,或通过 Dockerfile 来构建属于你自己的镜像,这一切操作都非常的简单
容器(Container):
容器是由镜像创建的实例,他可以被启动、停止、运行、删除(生命周期)。每个容器之间是互相隔离的、保证安全的平台。可以把容器看做为一个简单的 Linux 环境
安装Docker
安装Docker的大前提:Linux内核必须是3.1 不然无法安装
Docker 的安装相对来说也算比较简单, Docker 官方要求 CentOS 操作系统内核必须在 3.10 以上,所以我们这边使用 CentOS7 来安装;
PS:可以使用 uname -r 来查看当前系统的内核版本
- 更新 yum 仓库,确保 yum 包都是最新版本
yum update
提示:假如不是阿里云ECS而是本地搭建的虚拟机,该命令慎用,因为会耗费大量的时间
- 查看是否有安装 docker,若有则将其删除
yum list installed |