1docker images 列出本地主机上的镜像。
2docker pull 从Docker Hub中拉取或者更新指定镜像。
3docker run
-d 标识是让 docker 容器在后台运行。
-p 标识通知 Docker 将容器内部使用的网络端口映射到我们使用的主机上。
--name 定义一个容器的名字,如果在执行docker run时没有指定Name,那么deamon会自动生成一个随机数字符串当做UUID。
-e 设置环境变量,或者覆盖已存在的环境变量。
例如:docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSW
如果对MySQL比较熟悉,那么可以使用MySQL异机迁移的方法:
先确定MySQL的运行系统、发行版、版本号,以前的配置文件。
根据以上信息在Docker环境下新建一台全新的MySQL。
根据业务需要实施停机迁移/在线迁移,将数据迁入Docker内的MySQL。
停机迁移:直接拷贝数据文件(物理迁移)、全量Dump导出(逻辑备份迁移)、xtraback备份(物理备份迁移)
在线迁移:将新库作为从库加入集群,完成同步后fo切换,原主库下线。
如果对Docker比较熟悉,可以使用Docker整机迁移的方法:
整机虚拟化直接作为一个镜像在Docker内运行。
这种方法虽然简单,但过程漫长而且运行时性能损耗非常大,也容易出问题,不是很推荐。
那么Docker是什么呢
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。几乎没有性能开销,可以很容易地在机器和数据中心中运行。最重要的是,他们不依赖于任何语言、框架包括系统。
这是对Docker的一个官方解释,简单说,有两个部分:
1) 对于应用程序,曾经我们需要为了不同的系统专门的调整应用程序的代码或者是构造相应的依赖包驱动等等,大大增加了开发量以及开发的难度。现在,Docker向不同的应用程序,提供了一个统一的环境。
2) 对于服务器,为了支持不同版本的应用,曾经可能需要在物理机上安装多个版本或者不同的GuestOS或者说虚拟机。这就大大占用了物理机的性能,影响了最终程序的表现,提高了资源的成本。
使用Docker容器的方式,对于应用程序,不需要开发多种多样的版本或者是针对OS每个版本的升级再进行代码方面的调整,实现了广泛的兼容性和开发的最简性。同时对于物理机,部署的环境“瘦身”也节约了更多的资源,将更多的资源用于提高应用程序本身的性能。
CoreOS是Docker的不二之选
之前大概介绍了Docker,那么服务器上面还是需要最基本的应 *** 作系统才能支撑Docker容器,那么这么多中的Linux内核OS究竟哪一个好呢笔者和很多Docker技术专家的的观点就是Core OS。
CoreOS是一个基于Linux 内核的轻量级 *** 作系统,为了计算机集群的基础设施建设而生,专注于自动化,轻松部署,安全,可靠,规模化。作为一个 *** 作系统,CoreOS 提供了在应用容器内部署应用所需要的基础功能环境以及一系列用于服务发现和配置共享的内建工具。
简单说,CoreOS去掉了大量的非必要的功能,只保留了Server端需要的最基本功能,真正意义做到了“轻量化”。
此外,CoreOS还做到了:整体系统升级/回滚方案;容器化所有非系统应用、无包管理器;集群化调度器Fleet;分布式高可靠的KV存储系统ETCD
这些特性都让它成为Docker生态的首选 *** 作系统。不过最新的消息是,CoreOS不满足于做Docker生态下的一环,它正在推出自己的容器AppC计划,想对Docker来一招“釜底抽薪”。当然,现阶段并没有出现完全的两者 “分手”,所以对于普通使用者,并没有太大影响。
Docker+分布式数据库
数据库是每一个软件项目必须的一个部分,作为这样的一类底层基础软件,兼容性、通用性、易用度都是需要考虑的重点。非常遗憾的是,现在的 *** 作系统以及数据库都没有完全的实现完全的通用。特别对于NoSQL数据库这样的分布式系统,需要部署在多台物理机时,对于通用性要求就更高了。
目前,像SequoiaDB已经实现了自动化的安装,大大提升了部署的效率,但是考虑到部署之后的配置以及不同环境下的调试问题,仍然可能会耗费不小的人力物力。所以基于刚刚提到的Docker的优点,作为一个通用的基础软件,NoSQL数据库的Docker化就成了必须。
一个简单的例子,你可以用docker把数据库的数据与数据库程序本身分离开:用一个container A作为数据存储,然后另一个container B运行数据库。当你想升级数据库时,用新的container C替换掉container B即可。
Docker+分布式数据库的结合,带来诸多的好处:
1) 部署简单,使用镜像部署非常简单,特别是对集群环境,使用Docker镜像的部署还可以再数据库上提前集成Hadoop、Spark等架构,真正实现“一步到位”。
2) 方便应用的更新,应用的更新只需要考虑制作一个新的镜像就可以与容器适配,无需重新再调整与底层的配置。数据和程序的分离,这样升级替换等等都不会影响到数据。
3) *** 作简单方便,除了底层免除了复杂的与环境进行配置的工作, *** 作也更加方便,配置好的Docker镜像在部署时候只需要一条指令就可以了。
4) 开发、应用环境一致,Docker让数据库能做到 开发---测试---实施应用 三个阶段的环境是完全一致的。降低开发到应用过程中的工作量,开发出来就能保证实际应用环境上能同样的运行。
5) 系统稳定,因为Docker的隔离作用,将应用与OS独立开,这样能更好保证整个系统的稳定性。
6) 节省系统资源,系统只需要运行一个统一的环境就可以,不需要占用太多性能去支持运行环境本身,能将更多的系统资源投入到应用当中。
有了这些特性, Docker+数据库,将成为一个数据库发展的新方向,Docker这样的通用性和简单 *** 作解决方案,大大提高了数据库使用的效率,帮助使用者节约了大量成本。
Docker是如今技术圈的新潮流,开发人员是最乐见于Docker的这种应用部署模式,因为应用的生命周期起始于开发人员的开发系统,经过开发,测试,压力测试,等过程,最终应用发布到生产系统,并可能在不同的生产系统中迁移。应用开发人员对此都会有切身的体会,任何微小的运行环境的错误都会导致应用出现问题,尤其在讲究快速敏捷的今天,应用模块,新的代码,新的配置,被快速的加入应用的环境中,可能还没等写入到文档,新特性就已经被推送到生产上了。作为一个新的技术,笔者也希望更多的产品能加强与Docker的结合,帮助产品更好的使用。
博文出处:>
公司目前有2套独立运作的系统,
1提供给集团公司内部使用的服务器系统。主要系统有mes、erp、pdm、oa等。还有一些其他的应用服务器。对一些不是很重要的系统,平时就是数据库自动备份,然后定期人工拷贝数据保存。对重要的服务器mes、erp oa我们使用双机热备。主机及备机用心跳线连接,采用数据同步软件同步数据。当一台服务器出现问题时,备机马上检测到,可以接管运用。一般来说5分钟左右能恢复。
2提供给客户使用的服务器系统。公司数据中心采用的是云平台技术。所有网络设备都是2套,包括交换机、负载均衡、备份设备等。服务器采用云加密技术。下面划分了很多小的服务端供客户使用。当一个服务端硬件或者软件出现问题会自动无缝切换。不会影响客户端使用。
目前就这三种方式,对一般小公司来说,日常数据备份可用数据库自动备份加人工方式。大一点的公司可采用热备方式。最后一种一般业务量很大的公司可用。
公司文件备份我们使用的是iMonitor EAM 软件,只需要一台存储空间大的windows电脑作为服务器,安装上IMonitor EAM主控端,在员工电脑上安装被控端。在主控端开启自动备份,自行设置需要备份的文件类型,之后客户端电脑的文件会自动上传到服务器,不会影响员工的正常工作。查看文件可以通过关键字进行搜索。
数据库mysql通过canal将binlog通过kafka发送,多个消费者将数据写入不同的备库中。
系统级通过snapper定时进行系统快照
重要系统通过raid 1 保障
不过目前docker话之后,服务都是无状态,系统级备份越来越少了
我们单位在这方面做的非常好,非常重视数据备份工作。重要的技术部门使用专门的一块硬盘备份重要技术数据和图纸,为了防止硬盘损坏,特意准备了两块,互相备份。而这两块硬盘为了保密,一直放在技术部部长手里。至于IT的专业方案,滚球。老子是国企,非专业IT人员不懂的IT方案一律不上
我们公司内部也是使用云盒子企业云盘的,所以在部署的时候,采用的是云盒子自主研发的双子星架构具备负载均衡、高并发、高冗余特性,能有效地避免单点故障,而存储采用双副本提供冗余。能够减少不必要的性能损耗以及维护成本上的支出。测试数据表明,双子星架构比普通双节点三副本架构更安全、速度更快、更稳定、更容易维护。
在服务器中就有两份一模一样的数据,如果还想要继续备份,建议使用异机备份,按照月、日、时的频次来定时备份。
备份能够防止数据被攻击、误删造成的数据丢失。
前两天,360 云盘宣布将停止个人服务。一石激起千层浪,关于如何选择网盘,如何应对网盘关闭的讨论一下子又变得此起彼伏。没办法,目前的现状是,网盘很难有大的盈利空间,还面对严苛的内容审查和隐私保护,虽然于用户来说提供了便利,但于公司来说实在是一件出力不讨好的事情。
之前的网盘方案
国外的网盘我一直是三家一起用,分别是 Dropbox 存储代码和一些重要或私密文件;Google Drive 存储一些大文件和私密文件;OneDrive 存储一些电子书(同步太慢了)。国内的网盘我之前只用两家,一是坚果云,放一些个人常用的小文件,包括一些文档和软件配置文件;另一个是百毒云,放一些各处转存来的大文件、自己的照片和学习资料,一方面因其空间大,另一方面因其同步流畅。然而,百毒云前段时间把我的网盘 全面封掉 了,丢失了很多大学时的照片(其它文件要不不重要,要不有备份),申诉无果,实属无奈。
搭建一个只属于自己的网盘
所以我决定搭建一个只属于自己的网盘。考察了几种方案(包括买 RAID 或 NAS 等),发现已有人在这方面做了努力,提供了像 Seafile 和 ownCloud 这样的产品。接下来对比了两个软件,我决定选择用 ownCloud,主要出于以下几点考虑:
搭建方法
首先你得 先有一个自己的 VPS 。。没错,要不然你的数据往哪放,ownCloud 在哪运行。
有了 VPS 之后,就可以按照官网教程一步一步安装搭建了。然而,步骤相当繁琐,你得先安装 PHP、MySQL、 Apache 等等,所以我们要祭出神器 —— docker(这里就不介绍 docker 的用法了,以下内容默认大家对 docker 的基本使用有所了解)。这样一来,之前冗长的步骤,就化成了三步:
使用 docker
安装好 docker 之后,直接下载 owncloud image 运行
其实就可以看到 ownCloud 已经运行起来了,访问你的 VPS 地址,就可以看到 ownCloud 的界面。
但这时的 ownCloud 还没有数据库,所以我们还需要用 docker —link 来添加一个数据库存储 ownCloud 的数据,这里用到了 postgres 这个 image(数据库你可以自己定,不一定要用 postgreSQL)。
第一条命令会启动一个 postgreSQL 数据库,默认的用户是 postgres,密码设为了 mysecretpassword,host 是 owncloud-db。
但这时我们运行的 docker container 一旦删掉,我们的数据就没有了,所以我们需要用 docker 中的 volumes (或 docker data volumes)来把 ownCloud 的数据持久化。
配置 docker compose
这样一来,我们得启动两个 container 作为 data-only container,然后再启动 owncloud 和 postgres 关联这两个 data-only container,非常繁杂,幸亏我们有 docker-compose 帮忙。先安装它:
然后配置 docker-composeyml,下面配置中的 volumes 就是在配置数据持久化的目录结构。由于我把 docker-composeyml 存在了VPS 的~/owncloud文件夹下,所以底下 volumes 配置中,冒号前面的宿主目录是那样写的,而冒号后面的是 container 中的目录,具体:
把 docker-composeyml 配置好之后,只需运行
就可以把 ownCloud 运行起来了,上一步中的很多 *** 作,这里一步就搞定了。不过 切记!owncloud-data和postgres-data两个 container 和 volume 千万不要删。删之前请备份 。
ownCloud 配置
访问你 VPS 的 8080 端口(刚才配置文件里写了)打开 ownCloud 主页,需要做两件事
点击完成,一切 OK,进入文件页面尽情 探索 吧!
参考&延伸阅读
本作品采用知识共享 署名-非商业性使用-禁止演绎 40 国际 许可协议进行许可。
Dockerfile 是一个文本文件,其中包含了构建 Docker 镜像需要执行的命令序列。使用 docker build 命令从 Dockerfile 中读取指令来构建镜像。
构建镜像时,该过程的第一件事是将 Dockerfile 文件所在目录下的所有内容发送给 Docker 守护进程。所以大多数情况下,最好创建一个新的目录,在其中保存 Dockerfile ,以及构建镜像所需的其它文件。Dockerfile 文件所在目录也被称为构建上下文(context)。
使用 FROM 指令指定一个基础镜像,后续指令将在此镜像基础上运行:
在 Dockerfile 中可以指定一个用户,后续的 RUN , CMD 以及 ENTRYPOINT 指令都会使用该用户身份去执行,该用户必须已存在。
除了指定用户之外,还可以使用 WORKDIR 指定当前工作目录(CWD), RUN , CMD , COPY , ADD 指令将在指定的工作目录中执行。
RUN 指令用于执行命令,该指令有两种形式:
例如我们执行更新命令:
CMD 的使用方式跟 RUN 类似,不过在一个 Dockerfile 文件中只能有一个 CMD 指令,如果有多个,则只有最后一个会生效。该指令指定了启动容器时要执行的命令,例如:
可以在 docker run 时指定命令来覆盖默认的 CMD 命令,比如 docker run image echo"hello shiyanlou" 。
CMD 指令还有一种特殊用法。在 Dockerfile 中,如果使用 ENTRYPOINT 指令指定了入口命令,则 CMD 指令的内容会作为 ENTRYPOINT 指令的参数:
ENTRYPOINT 指令会覆盖 CMD 指令作为容器运行时的默认指令,并且该指令不会被 docker run 时指定的指令覆盖,如下示例:
上述文件构建出来的镜像,使用 docker run image 等同于 docker run image ls-a-l 。使用 docker run image-i-s 等同于 docker run image ls-a-i-s 。即 CMD 指令的值会被当作 ENTRYPOINT 指令的参数附加到 ENTRYPOINT 指令的后面,只有 CMD 指令可以被覆盖。
COPY 和 ADD 都用于将构建上下文中的文件,目录等复制到镜像中。使用方式如下:
`` 可以指定多个,但是其路径不能超出构建上下文范围,即必须在 Dockerfile 同级或子目录中。
不需要预先存在,不存在时会自动创建,如果使用相对路径,则 为相对于工作目录的路径。
COPY 和 ADD 的不同之处在于,ADD 可以添加远程文件,并且 `` 可以是 gzip 或 tar 等格式的压缩文件,添加时会自动进行解压。
ENV 指令用于设置环境变量:
VOLUME 指令指定要创建的挂载路径,在容器运行时,将为每个挂载路径创建一个匿名卷并挂载上去:
上述指令将会在容器运行时,创建两个匿名卷,并分别挂载到容器中的 /data1 和 /data2 路径。
学习了上面这些常见的 Dockerfile 指令之后,可以使用这些指令来构建一个镜像。如下所示,构建一个提供 ssh 服务的镜像:
构建镜像
查看镜像
启动容器
查看已经启动的容器
测试远程登录
Compose 是运行由多个容器组成的 Docker 应用的工具,使用 Compose 可以一次启动一组有关联的服务,每个服务由来自同一镜像的单个或多个容器组成。
在复杂应用中,应用一般由多个服务(service)组成,例如一个网站后台通常包含 Web 服务、数据库服务、缓存服务、消息队列服务等。
使用 Compose 的步骤如下:
目前有三种版本的 Compose 文件格式:
下载 docker-compose-Linux-x86_64
下载成功后,为了方便使用,可以将其添加到 PATH 路径下
执行完成后,就能够在终端下直接使用 docker-compose 命令了:
接下来我们将创建一个 Web 应用,该应用包含两个容器:
项目目录结构如下:
首先编辑 app/web/webpy 文件,写入下面的内容:
上述代码创建了一个简单的 Web 应用。该应用会连接 redis 服务,在访问 / 页面时,自动将变量 number 加 1。
编辑 app/web/requirementstxt 文件,输入如下内容:
requirementstxt 文件存放了 Web 应用依赖的第三方库包的名称和版本信息。
编辑 app/web/Dockerfile 文件,添加如下内容
上述 Dockerfile 定义了 Web 应用镜像,该镜像基于 python:27 基础镜像,在其基础上安装了应用依赖的库包,并通过 CMD 指令指定了应用的启动命令。
编辑 app/docker-composeyml 文件:
该 docker-composeyml 文件定义了两个服务,分别为 web 和 redis 服务,并且配置了 web 服务的端口映射和挂载目录。 depends_on 定义了依赖关系,被依赖的服会先启动。
进入 app 目录,执行 docker-compose up 命令来启动应用:
启动成功后,就可以打开网址 127001:8001 来访问 Web 应用了。
另外一些命令:
在本教程的其余部分,我们将基于 ThinkPHP 框架完成一个天气查询的应用。使用 天气查询-API文档-开发指南-Web服务 API | 高德地图API 的接口来实现我们的功能。把查询数据缓存到 MySql 中,这样就不用每次频繁的请求第三方的接口了(有请求次数限制)
选择高德开放平台-天气查询 API 主要是因为它是免费的。当然你也可以使用其他的第三方天气查询接口,看个人喜好。
该应用是一个非常简单的 REST API 应用,主要实现两个接口。
在我们进行应用编码之前,首先使用 Docker 安装并运行 ThinkPHP
ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简代码的同时,更注重易用性。遵循 Apache2 开源许可协议发布,意味着你可以免费使用ThinkPHP,甚至允许把你基于ThinkPHP开发的应用开源或商业产品发布/销售 。
这就是为什么我选择它作为本教程的教学框架。我不想让你因为一个框架而放弃,但我也不想从头开始建立所有的东西,因为该教程的重点是Docker,而不是我们的PHP应用。
用Docker 创建 ThinkPHP 应用 实际上比用本地配置PHP环境所需的 *** 作少。并且为我们还需要使用 Composer,多亏了Docker,我们甚至不需要在主机上安装它。
首先打开你的终端,创建一个项目目录。
并进入到该目录中
现在使用[官方Composer Docker镜像](>
我们单位最近在推docker,已经在开发测试环境使用(稍显落后),下面我就谈谈自己的Docker的理解,以及Docker和虚拟机的区别。
虚拟机
先说说什么是虚拟机:在一台物理机器上,利用虚拟化技术,虚拟出来多个 *** 作系统,每个 *** 作系统之间是隔离的。
说起来有些绕,那么我们看看虚拟机的架构图,就容易理解了。例如我们要在一台物理机器运行三个Java项目,彼此之间隔离。
从下往上看, 解释起来其实很简单:
最下面的一层就是物理机,可以是服务器,设置是一台个人电脑;
Docker
再说说什么是Docker,找了一句官方的解释:Docker是开源的应用容器引擎。是不是又一头雾水?我们还是先看看Docker的架构图。
依然从下往上看:
Docker和虚拟机的区别
我将持续分享Java开发、架构设计、程序员职业发展等方面的见解,希望能得到你的关注。
谢谢了!docker容器域虚拟机有什么区别呢?
docker容器: Docker 容器是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app)。几乎没有性能开销,可以很容易地在机器和数据中心中运行。最重要的是,他们不依赖于任何语言、框架包括系统。
虚拟机: 虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。虚拟系统通过生成现有 *** 作系统的全新虚拟镜像,它具有真实windows系统完全一样的功能,进入虚拟系统后,所有 *** 作都是在这个全新的独立的虚拟系统里面进行,可以独立安装运行软件,保存数据,拥有自己的独立桌面,不会对真正的系统产生任何影响 ,而且具有能够在现有系统与虚拟镜像之间灵活切换的一类 *** 作系统。虚拟系统和传统的虚拟机(Parallels Desktop ,Vmware,VirtualBox,Virtual pc)不同在于:虚拟系统不会降低电脑的性能,启动虚拟系统不需要像启动windows系统那样耗费时间,运行程序更加方便快捷;虚拟系统只能模拟和现有 *** 作系统相同的环境,而虚拟机则可以模拟出其他种类的 *** 作系统;而且虚拟机需要模拟底层的硬件指令,所以在应用程序运行速度上比虚拟系统慢得多。 对比虚拟机与DockerDocker守护进程可以直接与主 *** 作系统进行通信,为各个Docker容器分配资源;它还可以将容器与主 *** 作系统隔离,并将各个容器互相隔离。虚拟机启动需要数分钟,而Docker容器可以在数毫秒内启动。由于没有臃肿的从 *** 作系统,Docker可以节省大量的磁盘空间以及其他系统资源。说了这么多Docker的优势,大家也没有必要完全否定虚拟机技术,因为两者有不同的使用场景。虚拟机更擅长于彻底隔离整个运行环境。例如,云服务提供商通常采用虚拟机技术隔离不同的用户。而Docker通常用于隔离不同的应用,例如前端,后端以及数据库。
docker解决的主要问题
有过后台开发经验的同学,一定遇到过下面这些问题:
那么,有了docker,这些问题都将不复存在。
什么是dockerDocker是一个虚拟环境容器,可以将你的可执行文件、配置文件及一切其他你需要的文件一并打包到这个容器中,并发布和应用到任意平台。比如,你在本地用Python开发了一个网站后台,开发测试完成后,就可以将Python3及其依赖包、Flask及其各种插件、Mysql、Nginx等打包到一个容器中,然后部署到任意你想部署到的环境。
如果不好理解,我们再拿集装箱打个比方。
集装箱解决了什么问题呢?在一艘大船上,可以把货物规整的摆放起来。并且各种各样的货物被集装箱标准化了,集装箱和集装箱之间不会互相影响。那么我就不需要专门运送水果的船和专门运送化学品的船了。只要这些货物在集装箱里封装的好好的,那我就可以用一艘大船把他们都运走。
docker也是类似的理念。我们可以在一台机器上跑多个互相毫无关联的docker容器,每一个容器就相当于一个集装箱。
docker里的几个基本概念 与传统虚拟化的区别这里我们顺便讲一下传统虚拟化。
我们看到,传统虚拟化是站在硬件物理资源的基础上,虚拟出多个OS,然后在OS的基础上构建相对独立的程序运行环境,而Dokcer则是在OS的基础上进行虚拟,显然Dokcer轻量得多,因此其资源占用、性能消耗相比传统虚拟化都有很大优势。
在IT行业从业多年,也算从看着时代从物理服务器走向虚拟化云计算时代,又准备进入Docker时代,作为下一代虚拟化技术,Docker正改变着整个行业开发、测试、部署应用的方式,至于虚拟化技术和docker技术到底有什么不同,下面来分析一下。
01 什么是虚拟化?
顾名思义,虚拟化技术是将物理资源以某种技术虚拟成资源池的形式,主要有一虚多和多虚一两种形式,比如个人电脑安装Vmware软件,可以在这个软件上安装其他Win系统、MacOS、Linux系统等,实现一台电脑/笔记本承载多个系统的优点,目前苹果笔记本用户双系统解决方案也以虚拟机为主,普通Windows用户可能需求量不大,而技术人员基本是必备软件了。
从企业层面来看,多虚一为主要形式,也就是将大量物理服务器集群虚拟化,形成一个资源池,在这个资源上创建各种不同的虚拟机,实现灵活部署。
02 什么是Docker
其实docker和虚拟技术很像,但又有一些不同点,一方面是两个技术的层级上,虚拟机一般是底层硬件Hardware支撑,上层是虚拟管理系统Hypervisor层,在上层开启不同的VM业务,如果需要将这些业务进行隔离,需要每个VM启动客户机 *** 作系统,非常消耗资源。
Docker完全不同,底层有硬件和Host OS系统支撑,比如Windows/MacOS/Linux,中间抛去了臃肿的系统,而是以Docker守护进程代替,上层建立不同的容器,不同的应用镜像打包在不同的容器中,他们互相隔离。
03 虚拟化与docker的区别
docker设计小巧,部署迁移快速,运行高效,应用之间相互独立,管理人员可以看到所有容器的内容,虚拟化技术比较臃肿,不论什么应用都需要先创建新的系统,并且并非按照应用隔离,而是按照系统隔离,管理员无法看到系统内部信息。
举个例子,Docker就是手机中的各种APP,只需要一个系统就可以下载自己所需的应用,但是虚拟化技术相当于你的苹果手机安装一个庞大软件,这个软件上安装安卓系统、魅族系统等,每个系统上还要安装各类应用,比较麻烦。
但两者没有绝对的好坏,主要还是看应用场景,根据不同的需求选择不同的解决方案即可。
Docker与虚拟机介绍
虚拟机: 传统的虚拟机需要模拟整台机器包括硬件,每台虚拟机都需要有自己的 *** 作系统,虚拟机一旦被开启,预分配给他的资源将全部被占用,每一个虚拟机包括应用,必要的二进制和库以及一个完整的用户 *** 作系统。
容器(Docker): 容器与的宿主机共享硬件资源及 *** 作系统可以实现资源的动态分配。容器包含应用和其所有的依赖包,但是与其他容器共享内核。容器在宿主机 *** 作系统中,在用户空间以分离的进程运行。
虚拟机和容器都是在硬件和 *** 作系统以上的,虚拟机有Hypervisor层(“翻译”客户系统和宿主系统之间的指令),Hypervisor是整个虚拟机的核心所在。他为虚拟机提供了虚拟的运行平台,管理虚拟机的 *** 作系统运行。每个虚拟机都有自己的系统和系统库以及应用。
容器没有Hypervisor层,它是内核级的虚拟化,并且每个容器与宿主机共享硬件资源及 *** 作系统,因此Docker容器不存在Hypervisor层带来性能的损耗,因此可以实现更高的性能和效率。但是虚拟机技术也有其优势,能为应用提供一个更加隔离的环境,不会因为应用程序的漏洞给宿主机造成任何威胁。
虚拟机是对硬件资源的虚拟,容器技术则是对进程的虚拟,从而可提供更轻量级的虚拟化,实现进程和资源的隔离。从架构来看,Docker比虚拟化少了两层,取消了hypervisor层和GuestOS层,使用 Docker Engine 进行调度和隔离,所有应用共用主机 *** 作系统,因此在体量上,Docker较虚拟机更轻量级,在性能上优于虚拟化,接近物理机原生性能。
Docker的优势持续部署与测试
更高效的利用系统资源
交付物标准化
应用隔离
高性能
最近刚好看了一部分docker的东西
先上图,vm与docker框架,直观上来讲 vm多了一层guest OS,同时Hypervisor会对硬件资源进行虚拟化,docker直接使用硬件资源 ,所以资源利用率相对docker低也是比较容易理解的
其次,openstack能够以10台/min的速度创建虚拟机,在docker面前就弱爆了,因为docker是利用宿主机的系统内核,所以可以做到在几秒钟之内创建大量容器,它们的 启动速度是在数量级上的差距 。
最后找了一个IBM测试案例,关于计算能力的,对于kvm为什么会有这么大的性能损失,一方面是因为虚拟机增加了一层虚拟硬件层,运行在虚拟机上的应用程序在进行数值计算时是运行在Hypervisor虚拟的CPU上的;另外一方面是由于计算程序本身的特性导致的差异。虚拟机虚拟的cpu架构不同于实际cpu架构,数值计算程序一般针对特定的cpu架构有一定的优化措施,虚拟化使这些措施作废,甚至起到反效果。比如对于本次实验的平台,实际的CPU架构是2块物理CPU,每块CPU拥有16个核,共32个核,采用的是NUMA架构;而虚拟机则将CPU虚拟化成一块拥有32个核的CPU。这就导致了计算程序在进行计算时无法根据实际的CPU架构进行优化,大大减低了计算效率。
从计算机软件层级来看,docker和虚拟机的区别在于虚拟的软件层级不一样。虚拟机基于同一个硬件,模拟出不同的 *** 作系统;而docker基于同一个 *** 作系统,模拟出不同的运行时环境。我们依次来看:
1 先看看计算机的软件层次,从下到上依次为: *** 作系统内核、文件系统(运行时环境)、上层APP。
2 虚拟机运行在同一个硬件上,可以虚拟出不同的 *** 作系统。比如vmware可以在一台pc上既模拟出一个windows系统,同时也可以模拟出一台linux系统。 借助虚拟机,两个不同的 *** 作系统可以同时运行在同一个硬件之上。
3 而docker则运行在同一个 *** 作系统内核上,虚拟出不同的文件系统或者也可以叫做运行时环境。不同的运行时环境,其对应的文件系统也是不同的。比如java的运行时环境就要求文件系统里存在jdk,而golang的运行时环境则需要有go相关的底层库。在docker上既可以虚拟出一个java的运行时环境,也可以虚拟出go的运行时环境。甚至, 基于docker,你既可以虚拟出一个java-16的运行时候环境,也可以虚拟出一个java-18的运行时环境,而这两个运行时环境可以同时运行在同一个 *** 作系统之上 。
很高兴为您解答。
Docker悄无声息的来到我们身边,正在改变我们的开发、测试、部署应用的方式,那么,到底Docker和虚拟机VM有什么区别,我们通过一个图,再配上简明扼要的文字就很容易理解两者之间的区别。
首先要明确:Docker是一个开源的应用容器引擎,而VM是一个完整的 *** 作系统。
1、使用VM运行多个相互隔离的应用
解释:
可以看到,APP #1、APP #2、APP #3如果要独立运行,相互隔离,则需要安装三个 *** 作系统。如果一个虚拟 *** 作系统按1G算,总共需要占3G的存储空间,更槽糕的是,光运行这三个 *** 作系统就要耗费很大的内存和CPU。
2、使用Docker运行多个相互隔离的应用
DOCKER DAEMON:Docker守护进程,负责管理Docker容器。
Docker运行在主 *** 作系统之上,APP #1、APP #2、APP #3在Docker中是完全隔离的、相经独立的容器。跟VM相比,省去了庞大的 *** 作系统,耗费硬件资源较少。
除了以上架构上的差异之外,VM和Docker在启动时间上也有着很大的差距,VM启动大概需要2分钟的时间,而Docker启动则只需2秒。
随着互联网的发展,Docker的应用会越来越广,Build once,run anywhere,一次构建,到处运行。
docker是虚拟化软件运行环境。
虚拟机是虚拟化硬件。
层次不同。
虚拟机更消耗资源。但带来的是一个完整的可以不同于宿主机的 *** 作系统。因为和宿主机 *** 作系统不共享任何东西(包括硬件,内核,动态库,环境变量等),它的隔离性更好。
docker更轻量级,共享使用宿主机的硬件和内核,资源占用更少。它在宿主机内核基础上虚拟化了一个不同于宿主机的软件运行环境,比如动态库,环境变量等。可以说,docker和宿主机之间除了内核共享,其它都可以不同。
Docker容器启动、停止速度快rr Docker容器对资源需求较少rr Docker *** 作简单rr Dockerfile自动构建和部署方便
以上就是关于docker mysql 镜像怎么 *** 作数据库全部的内容,包括:docker mysql 镜像怎么 *** 作数据库、怎么linux本地mysql放到docker中、如何实现 Docker 与分布式数据库结合等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)