Docker简介

1、什么是docker

1.1、docker 起源

开源项目
诞生2013年初
GO语言开发实现
遵从了Apache2.0协议
项目代码在GitHub维护

1.2、docker目标

docker项目目标是实现轻量级的操作解约方案。
linux容器(LXC)等技术,在LXC的基础上进行了封装,让用户不需要关心docker的管理,使得操作更为简单。

1.3 、docker三大理念

构建:不仅仅是代码构建,也可以是环境
运输:运输,可以把构建环境放到任何地方。
运行:可以在任何环境运行

一次创建,处处运行

可以做一些整体的交付(不一定是代码 交付,可以是运行环境和代码放到一起构建,可以提供运行环境和代码)

环境不变可以不用docker,看业务使用,不同业务会有不同的契合度。

通俗点解释:

就像docker的log一样,鲸鱼(操作系统)和集装箱(存放各种服务应用),我们需要把各种各样的货物放到鲸鱼身,你得为每件货物考虑,怎么安放(应用程序所需要的环境),考虑货物与货物之间是否合适(应用程序依赖环境是否冲突)。

现在我们只要把货物放入到集装箱里,就可以安全的存放,稳定,方便。

引自:https://www.zhihu.com/question/28300645

1.4docker组成部分

C/S架构

Docker Client
Docker server

注:docker服务端挂掉所有的客户端也会挂掉

1.5、docker 组件

镜像(Image):和虚拟机镜像作用完全一样,但是组成部分不同。
容器(Container):从镜像创建的一个实例,相互之间隔离的,不会像虚拟机那样隔离的彻底。可以理解为简化版的linux环境。
仓库(Repository):镜像仓库,镜像做好可以放进去,所有服务器只要可以连接到仓库,都可以直接下载,相当与yum仓库。docker自己也有一个docker hub。

1.6、docker虚拟化的不同之处

   可见容器实在操作系统层面实现虚拟化,直接复用本地主机的操作系统,而传统虚拟化方式则是在硬件层面实现的。

注:hypervisor

 Hypervisor是一种运行在物理服务器和操作系统之间的中间软件层,可允许多个操作系统和应用共享一套基础物理硬件,因此也可以看作是虚拟环境中的“元”操作系统,它可以协调访问服务器上的所有物理设备和虚拟机,也叫虚拟机监视器(Virtual Machine Monitor)。
Hypervisor是所有虚拟化技术的核心。非中断地支持多工作负载迁移的能力是Hypervisor的基本功能。当服务器启动并执行Hypervisor时,它会给每一台虚拟机分配适量的内存、CPU、网络和磁盘,并加载所有虚拟机的客户操作系统。

2、为什么使用docker

docker项目的发起人和Docker.Inc的CTO 认为,docker在正确的地点、时间顺应了正确的趋势即高效地构建应用,现在开发者需要能方便地创建运行在云平台的应用,也就是说应用必须能够脱离底层机器,而且同时是任何时间任何地点可获取的。因此开发者需要创建一种分布式应用程序的方式,这也是docker所能够提供的。

docker通过容器来打包应用,这样我们就可以在新的机器上启动这个容器就可以了,这无疑节约了大量的时间,并且大大降低了部署过程中的错误。并且可以支持把代码和容器打包,这样我们就可以直接启动容器做相应的测试,上线。真正做到了一次搭建,处处运行。

2.1、docker在哪几方面具有较大优势

更快的交付和部署

对于开发和运维人员来说,最希望的就是一次创建或配置,可以在任意地方运行。
开发者可以使用一个标准的镜像来构建一套开发容器,开发完成后,运维人员开一直接使用这个容器来部署代码。
docker可以快速创建容器,快速迭代应用程序,并让整个过程全程可见,使团队中的其他成员更容易理解应用程序是如何创建和工作的。
Docker很轻很快!容器启动时间是 秒级,大量地节约开发、测试、部署的时间。

更高效虚拟化

docker容器的运行不需要额外的hypervisor支持,它是内核级的虚拟化,因此可以实现更高的性能和效率。

更轻松的迁移和扩展

Docker容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。这种兼容性可以让用户把一个应用程序从一个平台直接迁移到另一个。

更简单的管理

使用docker,只需要小小的修改就可以替代大量更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理

2.2、docker与虚拟机的对比

虚拟机需要运行hypervisor,docker都跑在docker引擎里面,docker不是虚拟机,没有操作系统直接运行应用。

docker无法像虚拟机一样提供完全的资源隔离,甚至好多地方都没有隔离,比如用户空间,一直再填坑,体验新功能需要内核支持。


类别 Docker Openstacke/KVM
部署难度 非常简单 组件多部署复杂
启动速度 秒级 分钟级
执行性能 和物理系统几乎一致 VN会占用一些资源
镜像体积 镜像是MB级别的 虚拟机镜像是GB级别的
管理效率 管理简单 组件相互依赖,管理复杂
隔离性 隔离性高 彻底隔离
可管理性 单进程,不建议启动SSH 完整的系统管理
网络连接 比较弱 借助Neutron可以灵活组件各类网络架构

需要注意:

docker里面只能启动一个单进程,还是在前台,如果挂了docker就直接退出。
docker容器就是一个进程,挂了也就挂了,按照docker理念不需要打开ssh,不需要连接上。 容器挂了再重新启动一个。
docker 管理简单 管理简单以为操作的简单,没有办法想怎么管怎么管,在复杂的环境管理简单就不是优势了。
单进程 可以写一个脚本里面写多个进程解决,但是这有不符合docker理念,只要启动一个就好了。套件可以跑,php+nginx 可以 但是直接跑lnmp就不符合docker的理念了。

2.3、docker改变了什么

2.3.1、官方说明

1.简化配置
主要应用场景,把代码和运行环境放到一起,这样就不需要什么代码部署,直接启动容器就是一个服务。不许要环境部署和代码上线
2、代码流水线管理
开发谢代码--测试--运维上线 docker 可以避免
docker管理这个流水线,开发保存镜像,测试run起来测试,测试结束,运维run起来跑,(虚拟机太大也可以实现),一次构建到处运行
3、提高开发效率
快速配置开发环境
4、隔离应用(没有虚拟机的效率高)
5、调试能力
6、多租互环境
7、快速部署(比虚拟机快的多)

2.3.2、赵班长总结:

面向产品 :产品交付
面向开发: 简化配置环境
面向测试: 多版本测试
面向运维: 环境一致性
面向架构: 自动化扩容(微服务)

本文主要借鉴赵班长课件

  https://www.unixhot.com/

进击的docker 一 : Docker 简介的更多相关文章

  1. Docker学习—Docker简介

    什么是Docker Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目.它基于 Google 公司推出的 Go 语言实现. 项目后来加入了 Linu ...

  2. 【Docker Compose】简介与安装

    1.简介 Compose 是一个用户定义和运行多个容器的 Docker 应用程序.在 Compose 中你可以使用 YAML 文件来配置你的应用服务.然后,只需要一个简单的命令,就可以创建并启动你配置 ...

  3. (转) Docker EE/Docker CE简介与版本规划

    随着Docker的不断流行与发展,docker公司(或称为组织)也开启了商业化之路,Docker 从 17.03版本之后分为 CE(Community Edition) 和 EE(Enterprise ...

  4. docker入门——镜像简介

    什么是docker镜像 Docker镜像是由文件系统叠加而成. 最底端是一个引导文件系统,即bootfs: 这很像典型的Linux/Unix的引导文件系统.Docker用户几乎永远不会和引导文件系统有 ...

  5. Docker EE/Docker CE简介与版本规划

    随着Docker的不断流行与发展,docker公司(或称为组织)也开启了商业化之路,Docker 从 17.03版本之后分为 CE(Community Edition) 和 EE(Enterprise ...

  6. docker学习笔记-简介

    零.什么是Docker 是一个基于GO语言开发的开源 应用容器: 开发者可以打包应用和相关包,到一个 轻量级 . 可移植 的 容器 中,并且可以发布到 任何机器 ,实现 虚拟化: 完全使用 沙箱机制, ...

  7. Docker Swarm Mode简介与核心概念

    什么是Docker Swarm Docker Swarm是Docker官方的一种容器编排方案,用于管理跨主机的Docker容器,可以快速对指定服务进行水平扩展.部署.删除 一个Docker Swarm ...

  8. 「快学Docker」Docker简介、安装和Hello World实现

    前言 Docker已经成为了一门炙手可热的技术,每个程序员(特别是后端程序员)都应该学习下Docker这门技术. Docker是什么 来自官网的定义:Docker是以Docker容器为资源分割和调度的 ...

  9. 【docker】docker安装和使用

    一.docker简介: docker是容器技术的一个代表,而容器技术是将程序打包和隔离的一种技术,其实它并不是一个新技术,之前在linux内核中早已存在,真正被大众所用所了解是因为docker的出现. ...

  10. Docker 以 docker 方式运行 jenkins

    https://testerhome.com/topics/5798 Docker 以 docker 方式运行 jenkins jmcn · 2016年08月26日 · 最后由 blueshark 回 ...

随机推荐

  1. JAVA文件下载功能问题解决日志

    今天给报告系统做了个下载功能,遇到了挺多问题,通过查资料一一解决了. 1.首先遇到的问题是:java后台的输出流输出之后,没有任何报错,浏览器端不弹出保存文件的对话框,原本是ajax请求到后台的con ...

  2. Spring+SpringMVC+Mybatis大整合(SpringMVC采用REST风格、mybatis采用Mapper代理)

    整体目录结构: 其中包下全部是采用mybatis自动生成工具生成. mybatis自动生成文件 <?xml version="1.0" encoding="UTF- ...

  3. Pads怎么设置某一网络的线宽

    在利用pads工具进行layout时,由于某一条网络可能会有很多条走线,而走线的宽度也相同,如果一条条设置,会很麻烦,所以pads中可以直接设置某一网络的线宽,避免繁琐的工作. 如下所示同一网络的走线 ...

  4. Tcp方式采集CNC兄弟设备数据

    先说下为了采集CNC兄弟设备的数据可谓是一波三折. 因为首次接触brother设备(CNC)是直接在设备上设置IP.用户名.密码,然后直连PC,用Ftp可以查看和下载CNC brother设备里的数据 ...

  5. [开源项目]Hibernate基本使用

    开源项目(1)Hibernate基本使用 Hibernate介绍 Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象 ...

  6. javaweb页面上展示动态图片

    HTML <img alt="点击设定" name="CONSTRUCTIONPLANHIS_IMAGE_curr_img_0" src="vi ...

  7. c语言中static的用法,包括全局变量和局部变量用static修饰

    一.c程序存储空间布局 C程序一直由下列部分组成: 1)正文段--CPU执行的机器指令部分:一个程序只有一个副本:只读,防止程序由于意外事故而修改自身指令: 2)初始化数据段(数据段)--在程序中所有 ...

  8. MySQL连接查询的简单概括+思维导图

  9. SQLServer修改表所有者

    当用sp_adduser 对数据库进行添加用户之后.却出现了此对象 '表名' 无效的现象? 执行这个语句,就可以把当前库的所有表的所有者改为dboexec sp_msforeachtable 'sp_ ...

  10. Swift 简介

    1.swift支持所有C和Obeject-c的基本类型,支持面向过程和面向对象的编程机制. 2.swift提供了2种功能强劲的集合类型:数组和字典 3.元祖 4.可选类型 5.swift 是一种类型安 ...