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. #ifndef 的用法

    背景: 头件的中的#ifndef,这是一个很关键的东西.比如你有两个C文件,这两个C文件都include了同一个头文件.而编译时,这两个C文件要一同编译成一个可运行文件,会引起大量的声明冲突,这时候需 ...

  2. LeetCode() Super Ugly Number

    用了优先队列,还是超时 class Solution { public: int nthSuperUglyNumber(int n, vector<int>& primes) { ...

  3. [NOIP2011] 观光公交(贪心)

    题目描述 风景迷人的小城Y 市,拥有n 个美丽的景点.由于慕名而来的游客越来越多,Y 市特意安排了一辆观光公交车,为游客提供更便捷的交通服务.观光公交车在第 0 分钟出现在 1号景点,随后依次前往 2 ...

  4. 3d数学总结帖

    3d数学总结帖,以下是对3d学习过程中数学知识的简单总结 角度值和弧度制的互转 Deg2Rad 角度A1转弧度A2 => A2=A1*PI/180 Rad2Deg 弧度A2转换角度A1 => ...

  5. dentry与inode有什么联系和区别

    我们在进程中要怎样去描述一个文件呢?我们用目录项(dentry)和索引节点(inode).它们的定义如下: struct dentry {struct inode                    ...

  6. PetaPoco 批量插入数据

    网上找的代码,还没经过验证 /// <summary> /// Bulk inserts multiple rows to SQL /// </summary> /// < ...

  7. python之购物车的编写(熬夜撸代码中。。。)

    购物车的编写对于我这种不是很精通函数的小白来说,简直太难了.各种坑,各种无奈啊!不过总算也是写出来了! 不多说,直接上代码! #!/usr/bin/env python#用户名 sanjiang#密码 ...

  8. Socket 通信(基础原理、实时聊天系统雏形)

    什么是 Socket? Socket 英文直译为"孔或插座",也称为套接字.用于描述 IP 地址和端口号,是一种进程间的通信机制.你可以理解为 IP 地址确定了网内的唯一计算机,而 ...

  9. 【SharePoint学习笔记】第1章 SharePoint Foundation开发基础

    SharePoint Foundation开发基础 第1章 SharePoint Foundation开发基础 SharePoint能做什么 企业信息门户 应用程序工具集(文档库.工作空间.工作流.维 ...

  10. 数据绑定时(<%#Eval)单引号双引号嵌套问题

    期望得到的HTML如下: onclick='edit("10000001")' 或者 onclick="edit('10000001')" 实际ASP.NET前 ...