1、docker入门简介
一、docker入门简介
本章要点:快速说就是docker是一个能快速持续交付并且持续部署的好工具,介绍了服务虚拟化有基于主机或者容器虚拟化两种,还有四种基础设设施(iaas,paas,saas,caas)
理论部分来源: docker1,容器云理念详解-超详细
什么是docker
- Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。
- Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
- 容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低
为什么用docker
- 简化程序: 项目重启、协同代码部署 、微服务部署
- 持续交付和部署:使用 Docker 可以通过定制应用镜像来实现持续集成、持续交付、部署
- 更轻松的迁移:只要CPU架构支持,一个docker容器可以在任意平台上运行,与jdk类似
Docker的应用场景
- Web 应用的自动化打包和发布。
- 自动化测试和持续集成、发布。
- 在服务型环境中部署和调整数据库或其他的后台应用。
- 从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。
容器与云服务
基础设备云服务
- IaaS 是“Infrastructure as a Service”的首字母缩写,意思是基础设施即服务,即把 IT 系统的基础设施层作为服务出租出去。由云服务提供商把 IT 系统的基础设施建设好,并对计算设备进行池化,然后直接对外出租硬件服务器、虚拟主机、存储或网络设施(负载均衡器、防火墙、公网IP地址及诸如 DNS 等基础服务)等;
- PaaS 是“Platform as a Service”的首字母缩写,意为平台即服务,即把 IT 系统的平台软件层作为服务出租出去;
- SaaS 是“Software as a Service”的首字母缩写,意为软件即服务。简言之,就是软件部署在云端,让用户通过因特网来使用它,即云服务提供商把 IT 系统的应用软件层作为服务出租出去,而消费者可以使用任何云终端设备接入计算机网络,然后通过网页浏览器或者编程接口使用云端的软件;
容器云服务
CaaS 容器即服务,可以按需提供容器化环境和应用服务,CaaS提供一个受控的、安全的应用环境,让开发人员以自助的方式构建和部署应用
基础要素与关键特性
基础要素
- 容器调度: 调度和管理容器
- 服务发现:将容器化的服务,注册到服务发现工具,确保服务之间的通信;
- 网络配置:用户可访问容器,并实现跨主机容器通信;
- 安全配置:只开放容器监听的端口;
- 负载均衡:避免单点过载;
- 数据持久化:容器内数据云端持久化;
- 容器与高可用:日志与管理,容器监控;
关键特性
- 开发者和运维角色的进一步有机融合;
- 容器化应用程序生命周期的所有阶段;
- 让开发者更加关注构建应用本身,而无需关注运行环境;
- 支持多种底层基础设施,包括多种操作系统和平台;
- API变得越来越重要,不同服务之间通过API相互调用;
CaaS架构
编排服务将受控的资源抽象成三个层次;
- 容器:软件及运行环境;
- Pod:相关联的容器组合,相互间通信无需跨网络,例如应用服务器和本地缓存,可以容纳一个或多个容器;
- Node:提供计算、网络、存储的资源节点,可以容纳一个或多个Pod;
持续集成系统构建
选择关联代码源到github或其它版本库,当代码提交时会触发Docker镜像的自动构建,在镜像webhook里配置容器服务的trigger API, 这样当镜像构建完毕后,就会触发容器的自动部署,实现流水线般的CI/CD
当整合公有云的虚拟机和Docker方式,可能获得更多的好处,如
- 更快速的持续交付和部署能力;
- 利用内核级虚拟化,对公有云中服务器资源进行更加高效的利用;
- 得用公有云和Docker的特性更加方便地迁移和扩展应用;
部署流程
虚拟化说明
两种:主机级虚拟机、容器级虚拟机
- 主机级虚拟机
- 也可以称为服务器虚拟化: 虚拟化是一种资源管理技术,是将计算机的各种实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以 比原本的组态更好的方式来应用这些资源
- Type-I: hyper-v, vshpere
- Type-II: vmware, virtualbox
- 容器级虚拟化
- 容器有效地将由单个操作系统管理的资源划分到孤立的组中,以更好地孤立的组之间平衡有冲突的资源使用需求。与虚拟化相比,这样即不需要指令级模拟,也不需要即时编译,容器可以在核心CPU本地运行指令 ,而不需要任何专门的解释机制。此处也避免了准虚拟化和系统调用 替换中的复杂性。
Docker和虚拟机总结
名词解释:
infrastructure (基础服务)硬件 Host OS 主机操作系统
VM 虚拟机 Hypervisor 虚拟层程序
-
实现原理技术不同 虚拟机是⽤来进⾏硬件资源划分的完美解决⽅案,利⽤的是硬件虚拟化技术,如此VT-x 、AMD-V会通 过⼀个 hypervisor 层来实现对资源的彻底隔离。 而容器则是操作系统级别的虚拟化,利⽤的是内核的 Cgroup 和 Namespace 特性,此功能通过软件 来实现,仅仅是进程本身就可以实现互相隔离,不需要任何辅助。
-
使⽤资源⽅⾯不同 Docker 容器与主机共享操作系统内核,不同的容器之间可以共享部分系统资源,因此更加轻量级, 消耗的资源更少。 虚拟机会独占分配给⾃⼰的资源,不存在资源共享,各个虚拟机之间近乎完全隔离,更加重量级,也会消耗更多的资源。
-
应⽤场景不同 若需要资源的完全隔离并且不考虑资源的消耗,可以使用虚拟机。 若是想隔离进程并且需要运行大量进程实例,应该选择 Docker 容器。
特性 | 容器 | 虚拟机 |
---|---|---|
启动 | 秒级 | 分钟级 |
硬盘使用 | 一般为MB | 一般为GB |
性能 | 接近原生 | 占用资源更多,性能差不多 |
系统支持量 | 单机支持上千个容器 | 一般几十个 |
Docker总结
- Docker是世界领先的软件容器平台。
- Docker使用Google公司推出的Go语言进行开发实现,基于Linux内核的cgroup,namespace,以及AUFS类的UnionFS等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。Docke最初实现是基于LXC。
- Docker能够自动执行重复性任务,例如搭建和配置开发环境,从而解放了开发人员以便他们专注在真正重要的事情上:构建杰出的软件。
- 用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就
像管理普通的代码一样。 - Docker的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性,从而不会再出现“这段代码在我机器上没问题啊”这类问题;——一致的运行环境
- 可以做到秒级、甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时间。——更快速的启动时间
避免公用的服务器,资源会容易受到其他用户的影响。——隔离性 - 善于处理集中爆发的服务器使用压力;——弹性伸缩,快速扩展
- 可以很轻易的将在一个平台上运行的应用,迁移到另一个平台上,而不用担心运行环境的变化导致应用无法正
常运行的情况。——迁移方便 - 使用Docker可以通过定制应用镜像来实现持续集成、持续交付、部署。——持续交付和部署