docker

1.软件开发会经历多个阶段,如开发、测试、生产等,如何保证这些阶段的环境一致?通常人们使用虚拟化技术(如虚拟机)解决,但虚拟化技术存在占用空间资源大等问题。相对来说,docker极大的提高了资源的利用率,可在短时间内大量部署server。

2.为什么使用?

   保证不同环境软件版本同步,qa测试环境版本一致,不同组联调集成时一致

3.优势:

   极大的提高资源利用率,不独立运行guest OS,启动速度快

   更快的开发效率,不需要单独部署环境

   不会依赖单一供应商,如oracle,可替代性强

   减少环境差异

   更快的发现由环境引起的问题

   生产中更容易处理问题

 4.什么是docker?

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

    Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。

5.结构

  client: 联系daemon,可以远程连接daemon

  daemon: 是一个server,接受client的请求,发送给handler处理

  registry: 存储仓库,类似于github,默认使用dockerhub,也可以部署私有registry

6.Docker 微服务教程:  http://www.ruanyifeng.com/blog/2018/02/docker-wordpress-tutorial.html

   Docker 入门教程:  http://www.ruanyifeng.com/blog/2018/02/docker-tutorial.html

   Docker文档:  https://docs.docker.com/engine/reference/run/#detached-vs-foreground

7.docker image

  类似与windows镜像安装盘,包含多个层,使用联合操作系统把所有层联合变成一个单一的读写系统

  image如何bulid: 通过一个基础container进行修改变成docker image,   或者从一个干净的操作系统安装程序变成一个docker image

  操作记录说明存在dockerfile文件中

8.graphdb管理image之间的关系,使用SQLite,不是一个真正的图数据库

9.docker image & container

  类似与类和对象的关系, 可以根据一个docker image 生成多个container

10.namespace 隔离两个container的线程和资源

11.cgroup(countrol group) 限制container使用的系统资源,超过会把container kill

12.docker driver 控制container的参数

13.runC 是建立在docker dirver和linux kernel 之间的抽象api, 使用api定制符合需求的contioner

14.docker usage 加快workflow, 自动化部署开发,测试,集成环境

15.handle spike traffics 处理高峰流量,可以在秒级启动,没有依赖性的任务可以同时处理

16.docker引用场景

下面是我总结的一些Docker的使用场景,它为你展示了如何借助Docker的优势,在低开销的情况下,打造一个一致性的环境。内容来自:八个Docker的真实应用场景
1. 简化配置
这是Docker公司宣传的Docker的主要使用场景。虚拟机的最大好处是能在你的硬件设施上运行各种配置不一样的平台(软件、系统),Docker在降低额外开销的情况下提供了同样的功能。它能让你将运行环境和配置放在代码中然后部署,同一个Docker的配置可以在不同的环境中使用,这样就降低了硬件要求和应用环境之间耦合度。
2. 代码流水线(Code Pipeline)管理
前一个场景对于管理代码的流水线起到了很大的帮助。代码从开发者的机器到最终在生产环境上的部署,需要经过很多的中间环境。而每一个中间环境都有自己微小的差别,Docker给应用提供了一个从开发到上线均一致的环境,让代码的流水线变得简单不少。
3. 提高开发效率
这就带来了一些额外的好处:Docker能提升开发者的开发效率。如果你想看一个详细一点的例子,可以参考Aater在DevOpsDays Austin 2014 大会或者是DockerCon上的演讲。

不同的开发环境中,我们都想把两件事做好。一是我们想让开发环境尽量贴近生产环境,二是我们想快速搭建开发环境。

理想状态中,要达到第一个目标,我们需要将每一个服务都跑在独立的虚拟机中以便监控生产环境中服务的运行状态。然而,我们却不想每次都需要网络连接,每次重新编译的时候远程连接上去特别麻烦。这就是Docker做的特别好的地方,开发环境的机器通常内存比较小,之前使用虚拟的时候,我们经常需要为开发环境的机器加内存,而现在Docker可以轻易的让几十个服务在Docker中跑起来。
4. 隔离应用
有很多种原因会让你选择在一个机器上运行不同的应用,比如之前提到的提高开发效率的场景等。

我们经常需要考虑两点,一是因为要降低成本而进行服务器整合,二是将一个整体式的应用拆分成松耦合的单个服务(译者注:微服务架构)。如果你想了解为什么松耦合的应用这么重要,请参考Steve Yege的这篇论文,文中将Google和亚马逊做了比较。
5. 整合服务器
正如通过虚拟机来整合多个应用,Docker隔离应用的能力使得Docker可以整合多个服务器以降低成本。由于没有多个操作系统的内存占用,以及能在多个实例之间共享没有使用的内存,Docker可以比虚拟机提供更好的服务器整合解决方案。
6. 调试能力Docker
提供了很多的工具,这些工具不一定只是针对容器,但是却适用于容器。它们提供了很多的功能,包括可以为容器设置检查点、设置版本和查看两个容器之间的差别,这些特性可以帮助调试Bug。你可以在《Docker拯救世界》的文章中找到这一点的例证。
7. 多租户环境
另外一个Docker有意思的使用场景是在多租户的应用中,它可以避免关键应用的重写。我们一个特别的关于这个场景的例子是为IoT(译者注:物联网)的应用开发一个快速、易用的多租户环境。这种多租户的基本代码非常复杂,很难处理,重新规划这样一个应用不但消耗时间,也浪费金钱。

使用Docker,可以为每一个租户的应用层的多个实例创建隔离的环境,这不仅简单而且成本低廉,当然这一切得益于Docker环境的启动速度和其高效的diff命令。

你可以在这里了解关于此场景的更多信息。

8. 快速部署
在虚拟机之前,引入新的硬件资源需要消耗几天的时间。Docker的虚拟化技术将这个时间降到了几分钟,Docker只是创建一个容器进程而无需启动操作系统,这个过程只需要秒级的时间。这正是Google和Facebook都看重的特性。

你可以在数据中心创建销毁资源而无需担心重新启动带来的开销。通常数据中心的资源利用率只有30%,通过使用Docker并进行有效的资源分配可以提高资源的利用率。
17. docker container和hypervisor的区别是什么
 docker container 没有guest os
 docker container共享相同的底层文件
原文地址:https://www.cnblogs.com/fanshudada/p/10846060.html