进击的docker 一 : Docker 简介
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、官方说明
主要应用场景,把代码和运行环境放到一起,这样就不需要什么代码部署,直接启动容器就是一个服务。不许要环境部署和代码上线
开发谢代码--测试--运维上线 docker 可以避免
docker管理这个流水线,开发保存镜像,测试run起来测试,测试结束,运维run起来跑,(虚拟机太大也可以实现),一次构建到处运行
快速配置开发环境
2.3.2、赵班长总结:
面向产品 :产品交付
面向开发: 简化配置环境
面向测试: 多版本测试
面向运维: 环境一致性
面向架构: 自动化扩容(微服务)
本文主要借鉴赵班长课件
https://www.unixhot.com/
进击的docker 一 : Docker 简介的更多相关文章
- Docker学习—Docker简介
什么是Docker Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目.它基于 Google 公司推出的 Go 语言实现. 项目后来加入了 Linu ...
- 【Docker Compose】简介与安装
1.简介 Compose 是一个用户定义和运行多个容器的 Docker 应用程序.在 Compose 中你可以使用 YAML 文件来配置你的应用服务.然后,只需要一个简单的命令,就可以创建并启动你配置 ...
- (转) Docker EE/Docker CE简介与版本规划
随着Docker的不断流行与发展,docker公司(或称为组织)也开启了商业化之路,Docker 从 17.03版本之后分为 CE(Community Edition) 和 EE(Enterprise ...
- docker入门——镜像简介
什么是docker镜像 Docker镜像是由文件系统叠加而成. 最底端是一个引导文件系统,即bootfs: 这很像典型的Linux/Unix的引导文件系统.Docker用户几乎永远不会和引导文件系统有 ...
- Docker EE/Docker CE简介与版本规划
随着Docker的不断流行与发展,docker公司(或称为组织)也开启了商业化之路,Docker 从 17.03版本之后分为 CE(Community Edition) 和 EE(Enterprise ...
- docker学习笔记-简介
零.什么是Docker 是一个基于GO语言开发的开源 应用容器: 开发者可以打包应用和相关包,到一个 轻量级 . 可移植 的 容器 中,并且可以发布到 任何机器 ,实现 虚拟化: 完全使用 沙箱机制, ...
- Docker Swarm Mode简介与核心概念
什么是Docker Swarm Docker Swarm是Docker官方的一种容器编排方案,用于管理跨主机的Docker容器,可以快速对指定服务进行水平扩展.部署.删除 一个Docker Swarm ...
- 「快学Docker」Docker简介、安装和Hello World实现
前言 Docker已经成为了一门炙手可热的技术,每个程序员(特别是后端程序员)都应该学习下Docker这门技术. Docker是什么 来自官网的定义:Docker是以Docker容器为资源分割和调度的 ...
- 【docker】docker安装和使用
一.docker简介: docker是容器技术的一个代表,而容器技术是将程序打包和隔离的一种技术,其实它并不是一个新技术,之前在linux内核中早已存在,真正被大众所用所了解是因为docker的出现. ...
- Docker 以 docker 方式运行 jenkins
https://testerhome.com/topics/5798 Docker 以 docker 方式运行 jenkins jmcn · 2016年08月26日 · 最后由 blueshark 回 ...
随机推荐
- js代码实现下拉菜单
效果 js代码: <script type="text/javascript"> function ShowSub(li) {//函数定义 var subMenu = ...
- 匈牙利算法 DFS模板(了解度+1)
//算法核心是求最大匹配数 #include<bits/stdc++.h> #include<iostream> #include<cstdio> #include ...
- Apache+PHP+MySQL
Apache:是一种web服务器(与IIS类同)PHP:全称为Hypertext Preprocessor.PHP是一种HTML 内嵌式的语言,是一种网站(网页)开发语言(与ASP.JSP..NET等 ...
- [转]iOS代码块Block
代码块Block是苹果在iOS4开始引入的对C语言的扩展,用来实现匿名函数的特性,Block是一种特殊的数据类型,其可以正常定义变量.作为参数.作为返回值,特殊地,Block还可以保存一段代码,在需要 ...
- JavaScript 消息框+特殊字符
JavaScript 中创建三种消息框:警告框.确认框.提示框: 1.警告框: 警告框经常用于确保用户可以得到某些信息. 当警告框出现后,用户需要点击确定按钮才能继续进行操作 语法:alert(&qu ...
- JSBInding+Bridge.NET:把C#编译为Js
编译步骤: 1. 用 VS 2015 打开 BridgeProj/BridgeProj.sln ,编译 2. 将生成 BridgeProj/Bridge/output/bridge.js,对应于 Br ...
- Mac系统终端命令行不执行命令 总出现command not found解决方法
配置过安卓开发环境,改过bash_profile这个文件,最后不知怎么的只有cd命令能执行,我猜测可能修改bash_profile文件后没有保存 导致的 保存命令是: source .bas ...
- hibernate:Named query not known: findXXXX or XXXX is not mapped
.hbm.xml文件所放的位置怎么看怎么都在spring配置的扫描路径中,就是会出现标题所示错误,查看log日志,的确也没发现XXXX被mapped的记录~ 参考解决方案: 在eclipse导出jar ...
- TCP打洞和UDP打洞的区别 (转)
为什么网上讲到的P2P打洞基本上都是基于UDP协议的打洞?难道TCP不可能打洞?还是TCP打洞难于实现? 假设现在有内网客户端A和内网客户端B,有公网服务端S. 如果A和B想要进行UD ...
- go 语言中常用的包
来自学习go语言.pdf 译者刑星 ==== fmt 包fmt实现了格式化IO函数,这与c的printf和scanf类似,格式化短语派生于c %v 默认格式的值.当打印结构时,加号(%+v)会增加字段 ...
