Docker--------循序渐进学Docker笔记
名称 | 使用场景 | 缺点 |
Puppet:集中的配置管理系统 | 需要大批量部署相同服务的应用场景 | |
OpenStack:开源的云计算管理平台项目 | 帮助企业内部实现类似于AmazonEC2的云基础架构服务。优点:灵活。适用于中大型企业 | 组建繁多,构建复杂, |
1.1 初步认识了解Docker
- Docker:是一个开源应用容器。
- Docker:集版本控制、克隆继承、环境隔离等特性于一身,提出一整套软件构件、部署和维护等解决方案。简单、高效、直观。
- 解释:Docker使用容器引擎解决平台依赖关系,它在每台宿主机上都启动一个Docker的守护进程,守护进程屏蔽了与具体平台相关的信息,对上层应用提供统一的接口。这样Docker化的应用,就可以在多个平台上运行,Docker或针对不同的平台解析给不同平台下的执行驱动、存储驱动和网络驱动去执行。
- 认识比较 - 同Java: Java提出“Write Once,Run Anywhere”。Docker提出“Buid once,Run anuwhere,Configure once,Run anything”。
- 认识比较 - 同Android:Docker:是一个开源容器引擎,它有自己的生态圈,它的应用以镜像(image)的形式发布,可以运行在任何装有Docker引擎的操作系统上。它有一个官方的镜像仓库,提供各种各样的应用,当需要某个应用时,就从官方的仓库搜索并下载,个人开发者也可以提交镜像到官方仓库,分享给别人使用。Docker也允许使用第三方的镜像仓库。
- 认识比较- 同Github:使用Docker后,软件部署的应用也可以具备类似Github的版本控制功能,对应用的一些修改,提交新版本,运行环境可以在多个版本之间快速切换,自由选择使用哪个版本对外提供服务。
- 总结:Docker把应用打包成一个镜像,镜像带有版本控制功能,应用的每次修改迭代就对应镜像的一个版本,制作好的镜像可以发布到镜像仓库分享给别人;也可以直接从镜像仓库下载别人制作好的应用,不做任何修改即可运行起来。
1.2 Docker的结构
- Docker当作独立的软件来看:用Golang写的开源程序,C/S架构,包含Docker Server和Docker Client。源码:https://github.com/docker/docker
- Docker看作一个生态:两部分构成:Docker仓库和Docker自身程序。(仓库类似iPhone的Appstore,Docker类似iPhone的iOS操作系统)
1.2.1 Docker仓库
地址:https://hub.docker.com
1.2.1 Docker自身程序
Docker本身是一个单机版的程序,运行在linux操作系统上,属于用户态程序,通过一些接口和内核交互。
Docker Daemo作为Server端,在宿主机上以后台守护进程的形式运行。
Docker Client:既可在本机上以bin命令的形式发送指令,也可以在远端通过RESTful API的形式发送指令;
Docker的Server端接收指令并把指令分解为一系列任务去执行。
1.2.2 Docker的工作流程
1.)Docker Client 向Daemon发送启动xxx指令。
2.) Docker Daemon 就发送给Docker的官方仓库,在仓库中搜索 xxx
3.)如果找到xxx这个应用,就把它下载到我们的服务器上。
4.) Docker Daemon 启动xxx这个应用。
5.)把启动xxx应用示范成功的结果返回Docker Clinet。
1.2.3 Docker化应用的存在形式
分层,共享层,写时拷贝。
镜像:以分层的、可以背LXC/libcontainer理解的文件存储格式。
容器:把应用镜像从Docker仓库下载到本地机器上,以镜像为模板,在一个容器类虚拟机中把这个应用启动,这个虚拟机叫做容器。
1.2.4 Docker对变更的管理
应用文件变更:新增一层记录全部的修改动作信息。
提交应用到Docker仓库:已有的版本不上传,只需把新增的记录修改动作层提交即可。
下载心版本应用:如果已有旧版本,只需要从仓库下载变更层即可。
总结:Docker不仅具有版本控制功能,并且还能够利用分层特性做到增量更新。
1.3 选择Docker的原因
软件部署的主流解决方案:
环境:基础环境、应用环境。
基础环境:包含机器硬件、操作系统、提供基础服务的应用(eg:ssh、syslog等)
应用环境:包含应用所需的软件包和配置文件
策略:
基础环境灵活,对硬件和操作系统没有限制,只需在每台机器安装Docker Engine,用于运行Docker应用
应用环境作为一个有机整体(包括:应用需要的所有软件包、配置文件、依赖的运行环境(操作系统和依赖库)),带有版本控制功能,也可以提到仓库共享。
ps:生产环境的机器上可以同时缓存应用的多个版本镜像,如果发布有问题,可快速切换到以前版本。
优势:
于开发人员:
- Docker化的应用使用容器虚拟化技术,每个应用都运行在独立的虚拟化环境中,天然具有隔断性,不用担心一机多用造成的管理混乱。
- 开发人员在多任务开发时,可以并行启动这些应用的Docker容器,每一个Docker应用有一个独立的运行环境,互不干扰。
- 开发机硬件故障,在新开发机上,重新从Docker仓库下拉开发环境的镜像,一两分钟就可以重新搭建一套开发环境,并且即便新旧开发机的硬件和操作系统不一致,重新搭建的开发环境仍能保持和原来的环境一模一样。另外,还可以通过Docker仓库,把重要变更及时备份到远端。
- Docker的每个复杂软件都可以制成Docker镜像分享给大家。
于测试人员:
- 测试时,无需做任何配置,就能保证开发和测试环境完全一致,测试人员只需要关注测试本身就可以了。
于运维人员:
- 服务具备快速部署能力,阔缩容、版本回退在几秒钟内就可以完成。
- 基于同一个Docker镜像部署服务,可以保证每台机器应用完全一致。
- 由于Docker化应用是虚拟化,多个应用可以混合部署在一台机器上,互不干扰,可以提高机器使用率。
- Docker化应用是虚拟化,多个应用可以混合部署在一台机器上,互不干扰,可以提高机器使用率。
- 通过Dockerfiel管理Docker镜像,即使系统多次易手、交接文档不全,运维人员也可以快速了解系统是如何搭建的。
- “Build once,Run anywhere”,只需制作一次Docker镜像,在任何环境下都可以运行;还可以基于这个镜像做修改,制作新的镜像。