从docker介绍及其简介
一、引言
1.我本地代码运行没问题啊,但是别人机器运行不了,从而导致环境不一致的问题
2.那个兄弟又写死循环了,怎么这么卡,在多用户的操作系统下,会相互影响。
天猫双十一的情况下,用户量暴涨,从而导致运维成本过高的问题
二、docker的由来
Docker 是一个开源项目,诞生于 2013 年初,最初是dotCloud
公司内部的一个业余项目。它基于 Google
公 司推出的 Go 语言实现。2013年3月,dotCloud
公司的创始人之一,Docker之父,28岁的Solomon Hykes
正式决定,将Docker项目开源。
遵从了 Apache 2.0 协议,项目代码在 GitHub
上进行 维护。Docker 自开源后受到广泛的关注和讨论,以至于 dotCloud
公司后来都改名为 Docker Inc。Redhat
已经 在其 RHEL6.5
中集中支持 Docker;Google 也在其 PaaS
产品中广泛应用。Docker 项目的目标是实现轻量级的 操作系统虚拟化解决方案。 Docker 的基础是 Linux 容器(LXC
)等技术。在 LXC
的基础上 Docker 进行了进一 步的封装,让用户不需要去关心容器的管理,使得操作更为简便。用户操作 Docker 的容器就像操作一个快速轻量级的虚拟机一样简单。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然 后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口 (类似iPhone
的 app
),更重要的是容器性能开销极低。
三、为什么要有docker?(why?)
先说docker是干啥用的。因为现在物理服务器是很强大的,我们如果在一台物理机上只跑一个服务就浪费了。而同时跑很多服务他们之间又互相影响,比如一个服务出了内存泄漏把整个服务器的内存都占满了,其他服务跟着倒霉。所以要把每个服务都必须隔离起来,让它们只使用自己那部分有限的CPU、内存、硬盘以及自己所依赖的软件包。在容器技术之前,这个最早是用的是虚拟机--------业界的网红。虚拟机技术的代表,是VMWare
和OpenStack
。所以,早先每个服务之间是用虚拟机来实现隔离的,但是对资源有点浪费,于是就有了docker,一个机器上可以装十几个到几十个docker
,他们共享操作系统核心,占用资源少,启动速度快,但又能提供资源(CPU、内存、磁盘等)的一定程度的隔离。
简单来说就是,不同的应用程序所依赖的环境不一样,如果把他们依赖的软件都安装在一个服务器上,不仅需要调试很久,而且可能会有冲突。
如果想把两个应用程序隔离起来,可以在服务器上创建不同的虚拟机,不同的虚拟机放不同的应用,但是虚拟机的开销比较高。docker
作为轻量级的虚拟机,是一个很好的工具。
##
四、什么是docker?(what?)
引入:我们知道,软件的依赖环境大致包括配置文件、代码、tomcat(web轻量应用服务器)、JDK
(软件开发工具包)、操作系统
IT 软件中所说的
“Docker”
,是指容器虚拟化技术,docker本身并不是容器,而是用于支持创建和使用 Linux 容器的工具。在实际应用中是软件部署的一种解决方案:作为一个软件集装箱化平台,可以让开发者构建应用程序时,将它与其依赖环境一起打包到一个容器中,然后很容易地发布和应用到任意平台中也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。同时,也提升计算机硬件资源的利用率。
补充 说明:
# 沙箱机制(Sandboxie)
一、沙箱是什么?
沙箱是一个虚拟系统程序,沙箱提供的环境相对于每一个运行的程序都是独立的,而且不会对现有的系统产生影响,即沙箱提供一个限制该应用程序对系统资源的访问权限。
二、沙箱的应用
(1)搭建测试环境。沙箱的应用只能访问自己的应用访问目录,而不能应用之间的资源进行共享,这样就形成了一个相对安全的机制,由于沙箱具有非常良好的独立性、隔离性,所以能够搭建一些具有高风险的软件进行测试。
(2)应用容器的利用,如Docker就是应用沙箱机制,这样使得应用组件经过Docker的封装,使得在项目的迁移、测试环境到生产环境的部署,保证了应用程序的运行环境保持一致性,同时也减少大量在环境搭建上的工作量。
示例
首先,鲸鱼是操作系统。要交付的应用程序是各种货物,要将各种形状和尺寸不同的货物放到大鲸鱼上,得考虑每件货物怎么安放(应用程序配套的环境),还得考虑货物和货物之间能否重叠起来(应用程序依赖的环境是否会冲突)。
现在使用了集装箱(容器)把每件货物都放到集装箱里,这样大鲸鱼可以用同样地方式安放、堆叠集装了,省事省力。
即:打包放到鲸鱼上,鲸鱼放到服务器上。也就是搭建(创建)=》运输(发送)=》运行:
“build——ship——run”
,这样在自己的电脑上怎么运行,在服务器上也会怎么运行。
用docker运行一个程序的过程:
去仓库把镜像拉到本地,然后用一条命令把镜像运行起来,变成容器。
五、docker的思想
集装箱:
会将所有需要的内容放到不同的集装箱中,谁需要这些环境就直接拿到这个集装箱就可以
标准化
运输的标准化:docker有一个码头所有上传的集装箱都放在了这个码头上,当谁需要某一个环境,就直接指派大鲸鱼去搬运这个集装箱就可以了
命令的标准化:docker提供了一系列的命令,帮助我们去获取集装箱等等操作,当然,也可以上传等操作
提供了
REST
的API
:衍生出了很多的图形化界面,Rancher等PS:
REST API
是一组关于如何构建Web
应用程序API
的架构规则、标准或指导,REST API
遵循API
原则的架构风格。REST
是专门针对Web
应用程序而设计的,其目的在于降低开发的复杂度,提高系统的可伸缩性。
隔离
docker在运行集装箱内的内容时,会在
linux
的内核中单独的开辟一片空间,这片空间不会影响到其他程序
六、docker的核心
docker三大核心:镜像、容器、仓库
镜像:(Image)=>复制的程序
定义:Docker 镜像可以看作是一个特殊的文件系统(模板),除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)
作用:类似于虚拟机的快照,用来创建新的容器
特点:镜像不包含任何动态数据,其内容在构建之后也不会被改变。
容器:(Container)=>集装箱
镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态 的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
仓库: (Repository)=存放镜像的地方
用来保存镜像的仓库,控制版本,类似于git。当我们构建好自己的镜像之后,需要存放在仓库中,当我们需要启动一个镜像时,可以在仓库中下载下来。
七、docker的作用
解决运行环境不一致所导致的问题。这样就不会产生“本地运行没问题,可一到服务器上就不行了”的情况。
限定最大的
cpu
使用内存硬盘,这样就起到了隔离的作用,避免产生“一块代码产生死循环,把磁盘占满了,其它程序也挂了”的情况。双11时扩展机器用,降低运维人员的成本。
总结:
docker
的标准化让快速扩展,弹性伸缩变得简单
使用之前:
每次发布一个程序,都要走一遍以下的流程:
使用之后:
迁移的时候,只需要在新的服务器上启动需要的容器就可以了,
无论新旧服务器是否是同一类别的平台。这无疑帮助我们节约了大量的宝贵时间,并降低部署过程出现问题的风险。
八、docker与虚拟机的比较
作为一个作为一种轻量级的虚拟化方式,Docker 在运行应用上跟传统的虚拟机的方式相比具有如下显著优势:
Docker 容器启动很快,启动和停止可以实现秒级,相比传统的虚拟机方式(分钟级)要快速很多。
Docker 容器对系统资源需求很少,一台主机上可以同时运行数千个 Docker 容器。
Docker 通过类似 git 设计理念的操作来方便用户获取、分发和更新应用镜像,存储复用,增量更新。
Docker 通过
Dockerfile
支持灵活的自动化创建和部署机制,可以提高工作效率,并标准化流程。
特性 | 容器 | 虚拟机 |
---|---|---|
启动速度 | 秒级 | 分钟级 |
隔离级别 | 进程级 | 操作系统级别 |
隔离策略 | CGroups |
Hypervisor |
性能 | 接近原生 | 较好 |
内存 | MB级 | GB级 |
系统资源 | 0~5% | 5~15% |
镜像储存 | KB-MB | GB-TB |
硬盘适应 | MB级 | GB级 |
集群规模 | 上万 | 上百 |
运行密度 | 单台主机支持上千个 | 单台主机支持几个 |
隔离性 | 安全隔离 | 完全隔离 |
迁移 | 优秀 | 一般 |
高可用策略 | 弹性、负载、动态 | 备份、容灾、迁移 |
docker
比VM
快的原因:
docker有着比虚拟机更少的抽象层
由于docker不需要
Hypervisor
实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源 因此在CPU、内存利用率上docker将会在效率上有明显优势
docker
利用的是宿主机的内核,而不需要Centos
因此当新建一个容器时,docker不需要和虚拟机一样重新加载这个操作系统内核 进而避免寻找、加载操作系统内核比较费时费资源的过程
当新建个虚拟机时,虚拟机软件需要加载
Centos
这个新建过程是"分钟级别的"docker由于直接利用宿主机的操作系统,则省略了这个个过程因此新建一个docker容器只需要"几秒钟"
九、docker与虚拟化
Docker 以及其他容器技术,都属于操作系统虚拟化范畴,操作系统细腻化最大的特点就是不需要额外的 supervisor 支持。Docker 虚拟化方式之所以有众多优势,跟操作系统虚拟化技术自身的设计和实现分不开。
传统方式是在硬件层面实现虚拟化,需要有额外的虚拟机管理应用和虚拟机操作系统层。Docker 容器时在操作系统层面实现虚拟化,直接复用本地主机的操作系统,因此更加轻量级。
虚拟机技术:
在一个操作系统之上运行 / 安装另一种操作系统
应用程序, 操作系统和硬件三者之间的关系不变
缺点:
资源占用多
冗余步骤多
启动慢(分钟级)
容器虚拟化技术:
不是模拟一个完整的操作系统, 他是将软件运行所需要的所有资源打包到一个隔离的容器
只需要软件工作所需要的库资源和设置
因此系统变得高效轻量, 且能保证任何环境中软件都能始终如一的运行
十、docker的运行原理
docker的基本架构图:
低层原理
原理解析
docker pull
的时候,Docker damemon
先在本地仓库中找,如果没有,再去中央仓库中拉取,拉取到本地仓库就好了。docker run
的时候,也是先在本地仓库中找,如果有,直接放到容器里用。否则,去中央仓库中拉取。
docker的工作方式:
Docker是一个Client-Server结构的系统
Docker守护进程运行在主机上,然后通过Socket连接从客户端访问, 守护进程从客户端接受命令并管理运行在主机上的容器,而容器,就是一个运行时的环境
十一、docker理念(在开发和运维之间的优势):
docker的理念:一次构建处处运行
对于开发和运维人员来说,最梦寐以求的效果可能就是一次创建和配置,之后可以在任意地方、任意时间让应用正常运行,而 Docker 恰恰可以实现这一中级目标。具体来说,在开发和运维过程中,Docker 具有以下几个方面的优势:
更快的应用交付和部署
传统的应用开发完成后,需要提供一堆安装程序和配置说明文档,安装部署后需根据配置文档进行繁杂的配置才能正常运行
使用Docker之后只需要交付少量容器镜像文件,在正式生产环境加载镜像并运行即可,应用安装配置在镜像里已经内置好,大大节省部署配置和测试验证时间
更便捷的升级和扩缩容
随着微服务架构和Docker的发展,大量的应用会通过微服务方式架构,应用的开发构建将变成搭乐高积木一样,每个"Docker容"器将变成一块"积木","应用的升级将变得非常容易"
当现有的容器不足以支撑业务处理时,可通过镜像运行"新的容器进行快速扩容",使应用系统的扩容从原先的天级变成分钟级甚至秒级
更简单的运维系统
应用容器化运行后,生产环境运行的应用可与开发、测试环境的应用"高度一致",容器会将应用程序相关的环境和状态完全封装起来,不会因为底层基础架构和操作系统的不一致性给应用带来影响,产生新的BUG
当出现程序异常时,也可以通过测试环境的相同容器进行快速定位和修复
更高效的计算资源被利用
Docker是内核级虚拟化,其不像传统的虚拟化技术一样需要额外的
Hypervisor
支持,所以在一台物理机上"可以运行很多个容器实例",可大大"提升物理服务器的CPU和内存的利用率"
十二、docker总结:
Docker本身并不是容器,它是创建容器的工具,是应用容器引擎。
Docker 是一个容器运行载体或称之为管理引擎
image 文件生成的容器实例,本身也是一个文件,称为镜像文件
同一个 image 文件,可以生成多个同时运行的容器实例
一个容器运行一种服务,当我们需要的时候,就可以通过docker客户端创建一个对应的运行实例,也就是我们的容器
至于仓库,就是放了一堆镜像的地方,我们可以把镜像发布到仓库中,需要的时候从仓库中拉下来就可以了
附赠宝典秘籍
以下是一些关于docker的参考资料,有兴趣的可以看看:
https://www.zhihu.com/question/28300645
http://blog.51cto.com/ganbing/2085769?from=timeline&isappinstalled=0
http://c.biancheng.net/view/3118.html
https://www.cnblogs.com/mrhelloworld/p/docker1.html
从docker介绍及其简介的更多相关文章
- docker介绍和安装(一)
虚拟化简介 虚拟化(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源,如服务器.网络.内存及存储等,予以抽象.转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以 ...
- Docker介绍及安装(一)
一.Docker简介 1.1 docker介绍 Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的cgroup,namespace,以及 AUFS 类的 ...
- docker 介绍
docker 介绍 安装 sudo apt-get install docker.io sudo docker info 查看是否安装成功 hello world sodu docker run he ...
- Docker介绍基本概念(一)
Docker介绍基本概念 1.什么是Docker? 说实话关于Docker是什么并太好说,下面我通过四点向你说明Docker到底是个什么东西. Docker是世界领先的软件容器平台. Docker使用 ...
- Docker 介绍及安装
Docker介绍 Docker采用 C/S架构 Docker daemon 作为服务端接受来自客户的请求,并处理这些请求(创建.运行.分发容器). Docker基于go语言并遵从Apache2.0协议 ...
- Docker应用一:docker介绍
Docker介绍与安装 一.Docker与传统虚拟化区别 直接看下图: 传统虚拟化实现架构 doc ...
- Docker介绍及安装
Docker介绍 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制, ...
- docker介绍和简单使用
docker介绍 docker 为什么会有docker出现? 一款产品从开发到上线,从操作系统到运行环境,再到应用配置,作为开发+运维直接的协作我们需要关心很多东西,这也是互联网公司不得 不面对问题, ...
- 1.docker介绍、命令、容器、镜像、数据卷、Dockerfile、常用软件安装、推送阿里云
一.docker介绍 1.docker是什么 一款产品从开发到上线,从操作系统,到运行环境,再到应用配置.作为开发+运维之间的协作我们需要关心很多东西,这也是很多互联网公司都不得不面对的问题,特别是各 ...
随机推荐
- pyspark计算最大值、最小值、平均值
需求:使用pyspark计算相同key的最大值.最小值.平均值 说明: 最大值和最小值好计算,直接reduceByKey后使用python内置的max.min方法 平均值计算提供两种计算方法,直接先上 ...
- Docker(4)- Docker 命令大全
如果你还想从头学起 Docker,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1870863.html 容器生命周期管理 run sta ...
- 2.5远程仓的库使用-2.7Git别名
2.5 远程仓库的使用 查看远程仓库 git remote # -v 选项会显示需要读写远程仓库使用的 Git 保存的简写与其对应的 URL 添加远程仓库 git remote add <sho ...
- 3.5 MyLinkedList 实现
3.5 MyLinkedList 类的实现 MyLinkedList 将用双链表实现,并且还需要保留该表两端的引用.这将需要三个类 MyLinkedList 类,包含到两端的链.表的大小以及一些方法. ...
- Serilog 源码解析——Sink 的实现
在上一篇中,我们简单地查看了 Serilog 的整体需求和大体结构.从这一篇开始,本文开始涉及 Serilog 内的相关实现,着重解决第一个问题,即 Serilog 向哪里写入日志数据的.(系列目录) ...
- SPI的学习和ESP8266的SPI通讯测试
SPI简介: SPI是串行外设接口(Serial Peripheral Interface)的缩写.SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时 ...
- [MIT6.006] 11. Integer Arithmetic, Karatsuba Multiplication 整型算术,Karatsuba乘法
很多人不喜欢√2的表达,他们认为它不是一个数. 一.卡塔兰数 Catalan numbers 在数方面上,有个著名的数叫卡塔兰数 Catalan numbers,它是组合数学中一个常在各种计数问题中出 ...
- 《.NET 5.0 背锅案》第4集:一个.NET,两手准备,一个issue,加倍关注
第1集:验证 .NET 5.0 正式版 docker 镜像问题 第2集:码中的小窟窿,背后的大坑,发现重要嫌犯 EnyimMemcachedCore 第3集-剧情反转:EnyimMemcachedCo ...
- 安装 node-sass4.x 遇到的问题及解决方案
今天在维护一个基于 vue-cli 创建的旧项目,在安装依赖时会报错,具体信息如下: gyp ERR! stack Error: spawn C:\Program Files (x86)\Micros ...
- lseek系统调用
文件的随机读写.目前为止,文件都是顺序访问.读写都是从当前文件的偏移位置开始,然后文件偏移值自动的增加到刚好超出读或者写结束的位置是它为下一次作好准备.在linux中有文件偏移.使得随机访问变得简单, ...