咱们经过四W(what,when, why, how)原则去学习一下dockerpython
What
什么是docker?linux
docker是一种虚拟化技术,太过专业的术语这里不聊,反而容易乱。能够将其比做相似vmware的虚拟软件,一个docker容器里面能够包含一套完整的软件运行环境。docker
When
何时须要使用docker技术,或者说docker技术的应用场景有哪些?安全
场景一:节省项目环境部署时间
1.单项目打包
每次部署项目到测试、生产等环境,都要部署一大堆依赖的软件、工具,并且部署期间出现问题概率很大,不经意就花费了很长时间。
Docker主要理念就是环境打包部署,可在任意Docker Engine运行。前期咱们只须要将每一个项目环境打包到镜像,push到镜像仓库,当有须要部署这个项目时,直接pull镜像启动容器,这个项目就能够访问了!一次构建屡次部署,一劳永逸。
2.整套项目打包
公司有一项这样的业务:有一个产品能够整套部署到客户那里,以往都是派一名实施工程师到客户那部署。若是用了Docker,咱们能够前期将这套项目封装打包起来,实现一键部署,分分钟钟搞定,就不须要再派人过去了。好比官方的Docker Compose编排工具。
3.新开源技术试用
有时,咱们想调研一些开源项目,咱们能够直接从公共镜像仓库pull项目官方作好镜像启动容器便可。
场景二:环境一致性
开发工程师在Windows系统上开发项目,测试、生产环境操做系统都是Linux系统,这就产生了环境不一致的状况:项目在开发电脑本地运行没问题,到了测试或生产环境就运行不起来,解决这问题最好方式就是这三处环境保持一致。软件版本、操做系统、物理机、云主机......试想下,能作到吗?
Docker将项目环境打包成镜像,能够在任何Docker Engine上浪。此时Docker就是咱们这些项目的基石,Docker可移植性,保持运行状态一致性,可想而知,是否更容易解决问题呢?
场景三:持续集成
一个项目版本快速迭代的测试场景,须要一个合理的CI(持续集成)/CD(持续部署)环境支撑。CI/CD是一个周期性自动化项目测试流程,包括构建、部署、测试、发布等工做,不多须要人工干预。
项目测试流程大体以下图:
Docker结合Jenkins构建持续集成环境大体以下图:
Docker在上面这个图的做用是项目镜像构建和快速部署,打通测试环境与生产环境,高度保持多个环境之间一致性。
场景四:微服务
微服务是近几年来IT圈内谈论比较多的一个名词,意义也很简单:尽量细粒度拆分业务程序架构,由多个独立服务组成业务系统。
Docker的容器设计原则:一个容器一个服务,容器之间相互隔离,不妨试想一下,若是容器做为这些独立服务的部署单元,是否是有点恰到好处呢?
场景五:弹性伸缩
说到弹性伸缩,一般是集群模式下存在。像AWS AutoScaling,能够自定义资源阈值,SLB自动添加EC2云主机,应对业务访问量突发状况。
当适用Docker技术之后,这种弹性伸缩的单元就是云主机之上的容器了。
容器集群化管理已经有成熟的解决方案,好比:官方的Swarm,谷歌的K8S
因为Docker容器快速启动特性,能够很快速的启动几十个、上百个容器来提供更多并发和资源利用率(若是宿主机资源不够,还须要加主机到集群中)。
总结:简化部署流程,提升生产力!
Why
为何使用docker?服务器
咱们来比较一下虚拟机和docker容器的架构架构
kvm虚拟机

docker容器

经过上面两图的比较,能够发行架构上有两个区别:并发
一、引擎不同,一个是hypervisor引擎,一个是docker daemon引擎微服务
二、虚拟机在hypervisor之上,须要一个guest os(客户端操做系统);而docker没有工具
docker容器与虚拟机的比较
既然架构上有区别了,那么具体在性能等一些方面,确定会有所不一样,这也是咱们why使用docker的缘由。性能
时间上:docker秒级启动,kvm虚拟机分钟级别(多了一层guest os,确定会拖延启动的时间)
空间上:docker资源占用小,部署起来比虚拟机更快速(docker镜像一般以M为单位,而虚拟机一般以G为单位)
性能上:docker共享宿主机内核,系统级虚拟化,占用资源少,容器性能接近物理机;虚拟机须要hypervisor支持来虚拟化一些设备,并且有完整的GuestOs,虚拟化开销大,故而性能没有容器的好
安全上:docker只是进程级的隔离(每一个容器是一个进程,进程之间是共享宿主机器内核的),因此 隔离性 和 稳定性 不如虚拟机
使用上:docker容器可运行在主流的任何linux发行版上(由于容器共享宿主机内核,不用考虑pu是否支持虚拟化技术);而kvm是基于硬件的彻底虚拟化,须要硬件的支持,若是cpu不支持虚拟化技术的话,虚拟机就没法正确安装
How
怎么使用docker,这是最费脑子的环节了,须要记忆的东西比较多,拆分开来一一介绍,这里只作一些基本概念的介绍
基本概念
仓库(Registry)
集中存放镜像文件的场所。
仓库分:公有仓库 和私有仓库。
仓库服务器上能够放多个仓库,每一个仓库能够包含多个镜像。
镜像(Image)
能够理解成一个压缩包
是一个只读的模板。如:一个镜像能够包含一个完整的操做系统环境,里面仅仅安装了python环境。
镜像能够用来建立Docker容器,一个镜像能够建立不少容器。
容器(Container)
Docker利用容器来运行应用。
容器是从镜像建立的运行实例。它能够被启动、开始、中止、删除。
每一个容器都是相互隔离的、保证安全的平台。
能够把容器看作是一个简易版的Linux环境和运行在其中的应用程序
记住一个原则:容器只作运算,不作存储,就算连程序的代码也不要放到docker里(只是推荐,并不是必定要这样)