Docker系列第01部分:介绍+虚拟化+什么是Decker+组件

 0 应用部署难点

1.在软件开发中,最麻烦的事情之一就是环境配置。在正常情况下,如果要保证程序能运行,我们需要设置好操作系统,以及各种库和组件的安装。2.举例来说,要运行一个Python程序,计算机必须要有 Python 引擎,还需要安装好程序的各种依赖,甚至还要配置特定的环境变量。假设你有两个程序都需要部署在同一个服务器上,一个需要软件是基于Python2.0,一个是Python3.0,那么在部署上就很容易造成混乱。因为不同版本的Python模块可能互不兼容,况且不同开发环境上的库也需要额外的配置。如果要部署很多程序,而开发环境和部署环境各不相同的话,可想而知配置得多么麻烦。3.为了更好地将软件从一个环境移植到另一个环境上,必须从根源上解决问题,那么如何在移植软件的时候,将一模一样的原始环境迁移过来呢?

1 docker的介绍

1.不同的应用程序可能会有不同的应用环境,有些软件安装之后会有端口之间的冲突,这时候,可以使用虚拟机来实现隔离,但是使用虚拟机的成本太高,而且消耗硬件。

2.不同的软件的环境都不一样,比如:你用的是乌班图,里面有个数据库,现在要迁移到centos中,但是此时需要从新在centos安装数据库,如果版本不一致,或者不支持,就会出现问题。比较麻烦。有了docker之后就不用这么麻烦了,直接将开发环境 搬运到不同的环境即可。

3.在服务器负载方面,开一个虚拟机,那么虚拟机会占用空闲内存的,docker部署的话,这些内存就会利用起来。docker 就是用于部署项目,解决环境问题的软件技术(实现虚拟化,比传统的虚拟机技术要好),特别适合微服务。

0.1 Docker的用途

1、提供一次性的环境:本地测试别人的软件、持续集成的时候提供单元测试和构建的环境。
2、提供弹性的云服务:因为Docker容器可以随时启动或关闭,所以非常适合动态规划和缩容。
3、组建微服务构架:通过多个容器,服务的部署能更加灵活,帮助实现微服务构架。
4、不需要虚拟硬件和操作系统,轻量级,占用体积小,启动快

1.1虚拟化

1.1.1什么是虚拟化

在计算机中,虚拟化(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以比原本的组态更好的方式来应用这些资源。这些资源的新虚拟部份是不受现有资源的架设方式,地域或物理组态所限制。一般所指的虚拟化资源包括计算能力和资料存储。

在实际的生产环境中,虚拟化技术主要用来解决高性能的物理硬件产能过剩和老的旧的硬件产能过低的重组重用,透明化底层物理硬件,从而最大化的利用物理硬件对资源充分利用虚拟化技术种类很多,例如:软件虚拟化、硬件虚拟化、内存虚拟化、网络虚拟化(vip)、桌面虚拟化、服务虚拟化、虚拟机等等。

1.1.2虚拟化种类

(1)全虚拟化架构

虚拟机的监视器(hypervisor)是类似于用户的应用程序运行在主机的OS之上,如VMware的workstation,这种虚拟化产品提供了虚拟的硬件。

 (2)OS层虚拟化架构

 (3)硬件层虚拟化

硬件层的虚拟化具有高性能和隔离性,因为hypervisor直接在硬件上运行,有利于控制VM的OS访问硬件资源是一种运行在物理服务器和操作系统之间的中间软件层,可允许多个操作系统和应用共享一套基础物理硬件,因此也可以看作是虚拟环境中的“元”操作系统,它可以协调访问服务器上的所有物理设备和虚拟机,也叫虚拟机监视器(Virtual Machine Monitor,VMM)。 ​

Hypervisor是所有虚拟化技术的核心。当服务器启动并执行Hypervisor时,它会给每一台虚拟机分配适量的内存、CPU、网络和磁盘,并加载所有虚拟机的客户操作系统。 宿主机Hypervisor是所有虚拟化技术的核心,软硬件架构和管理更高效、更灵活,硬件的效能能够更好地发挥出来。常见的产品有:VMware、KVM、Xen等等。Openstack。

1.2什么是Docker

1.2.1容器技术

docker用于部署系统解决环境问题的这么一个容器技术。

1.2.2 容器与管理程序虚拟化对比

A、管理程序虚拟化通过中间层将一台或者多台独立的机器虚拟运行与物理硬件之上,而容器则是直接运行在操作系统内核之上的用户空间。因此,容器虚拟化也被称为“操作系统级虚拟化”,容器技术可以让多个独立的用户空间运行在同一台宿主机上。 由于“客居”于操作系统,容器只能运行与底层宿主机相同或者相似的操作系统,这看起来并不是非常灵活。

B、容器不在仅仅是一个单纯的运行环境。在自己的权限类内,容器更像是一个完整的宿主机。对Docker来说,它得益于现代Linux特性,如控件组(controlgroup)、命名空间(namespace)技术,容器和宿主机之间的隔离更加彻底,容器有独立的网络和存储栈,还拥有自己的资源管理能力,使得同一台宿主机中的多个容器可以友好的共存。

C、容器被认为是精益技术,因为容器需要的开销有限。和传统虚拟化以及半虚拟化相比,容器不需要模拟层(emulationlayer)和管理层(hypervisorlayer),而是使用操作系统的系统调用接口。这降低了运行单个容器所需的开销,也使得宿主机中可以运行更多的容器。

1.2.3 容器与虚拟机比较

(1)本质上的区别

Server:相当于云服务器
Host OS:为操作系统
Docker Engine:可以认为我们在这个操作系统上安装了一个docker的软件
App A:在Docker组件中运行App A
App B:在Docker组件中运行App B
# 所以docker完全没有操作系统的概念,用的还是宿主机的操作系统,但是它做出了隔离。也实现了虚拟化。 

 (2)使用上的区别

1.2.3 Docker特点

(1)上手快:依赖于“写时复制”(copy-on-write)模型,使修改应用程序也非常迅速,可以说达到“随心所致,代码即改”的境界。随后,就可以创建容器来运行应用程序了。由于去除了管理程序的开销,Docker容器拥有很高的性能,同时同一台宿主机中也可以运行更多的容器,使用户尽可能的充分利用系统资源。

(2)职责的逻辑分类使用:Docker,开发人员只需要关心容器中运行的应用程序,而运维人员只需要关心如何管理容器。Docker设计的目的就是要加强开发人员写代码的开发环境与应用程序要部署的生产环境一致性。

(3)快速高效的开发生命周期:Docker缩短代码从开发、测试到部署、上线运行的周期,让应用程序具备可移植性,易于构建,并易于协作。(通俗一点说,Docker就像一个盒子,里面可以装很多物件,如果需要这些物件的可以直接将该大盒子拿走,而不需要从该盒子中一件件的取。)

(4)鼓励使用面向服务的架构:Docker推荐单个容器只运行一个应用程序或进程,这样就形成了一个分布式的应用程序模型,在这种模型下,应用程序或者服务都可以表示为一系列内部互联的容器,从而使分布式部署应用程序,扩展或调试应用程序都变得非常简单,同时也提高了程序的内省性。(当然,可以在一个容器中运行多个应用程序)

1.3 Docker组件

1.3.1 Docker的三大组成要素

① 镜像:Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的配置参数。 镜像不包含任何动态数据,其内容在构建之后也不会被改变。镜像可以用来创建Docker容器,用户可以使用设备上已有的镜像来安装多个相同的Docker容器。

② 容器:镜像创建的运行实例,Docker利用容器来运行应用。每个容器都是相互隔离的、保证安全的平台。我们可以把容器看做是一个轻量级的Linux运行环境。

③ 镜像仓库:集中存放镜像文件的地方。用户创建完镜像后,可以将其上传到公共仓库或者私有仓库,需要在另一台主机上使用该镜像时,只需要从仓库上下载即可。

1.3.1 Docker客户端和服务器

Docker是一个客户端-服务器(C/S)架构程序。Docker客户端只需要向Docker服务器或者守护进程发出请求,服务器或者守护进程将完成所有工作并返回结果。Docker提供了一个命令行工具Docker以及一整套RESTful API,可以在同一台宿主机上运行Docker守护daemon进程和客户端,也可以从本地的Docker客户端连接到运行在另一台宿主机上的远程Docker守护进程。Docker守护进程一般在Docker主机后台运行,用户使用Docker客户端直接跟Docker守护进程进行信息交互。

 1.3.2 Docker镜像

1.有了镜像---》镜像运行起来是容器(真正的执行单位)
镜像		: 面向对象的类    
容器		: 对象2. 镜像是从哪里来的?    
-镜像就是一堆文件
-从远程仓库获取(拉取)

用户基于镜像来运行自己的容器。镜像是基于联合文件系统的一种层式结构,由一系列指令一步一步构建出来。

例如:镜像可以是mysql tomcat redis,添加一个文件; 执行一个命令; 打开一个窗口。

也可以将镜像当作容器的“源代码”。镜像体积很小,非常“便携”,易于分享、存储和更新。

1.3.3 Registry(中央仓库)

Docker用Registry来保存用户构建的镜像。Docker公司运营公共的Registry叫做Docker Hub。用户可以在Docker Hub注册账号,分享并保存自己的镜像(说明:在Docker Hub下载镜像巨慢,可以自己构建私有的Registry)。

1.3.4 Docker容器

Docker可以帮助构建和部署容器,只需要把应用程序或者服务打包放进容器即可。容器是基于镜像启动起来的,容器中可以运行一个或多个进程。容器基于镜像启动,一旦容器启动完成后,就可以登录到容器中安装需要的软件或者服务。

镜像是Docker生命周期中的构建或者打包阶段,而容器则是启动或者执行阶段。

所以Docker容器就是: 一个镜像格式; 一些列标准操作; 一个执行环境。

Docker在执行上述操作时,并不关心容器中到底装了什么,所有的容器都按照相同的方式将内容“装载”进去。 ​

Docker也不关心你要把容器运到何方:可以在自己的笔记本中构建容器,上传到Registry,然后下载到一个物理的或者虚拟的服务器来测试,在把容器部署到具体的主机中。

Docker容器方便替换,可以叠加,易于分发,并且尽量通用,可以快速的构建一个应用程序服务器、一个消息总线、一套实用工具、一个持续集成(CI)测试环境或者任意一种应用程序、服务或工具。

1.3.5 理解图

registry:中央注册中心

images:就是下载镜像文件

client:就是操作docker的客户端(命令)

containter:就是docker容器 需要运行在doker服务中

1.3.6 官方图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/468999.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1.7.08:字符替换

08:字符替换 查看提交统计提问总时间限制: 1000ms内存限制: 65536kB描述把一个字符串中特定的字符全部用给定的字符替换,得到一个新的字符串。 输入只有一行,由一个字符串和两个字符组成,中间用单个空格隔开。字符串是待替换的字符串&#xf…

net.conn read 判断数据读取完毕_1.5 read, write, exit系统调用

接下来,我将讨论对于应用程序来说,系统调用长成什么样。因为系统调用是操作系统提供的服务的接口,所以系统调用长什么样,应用程序期望从系统调用得到什么返回,系统调用是怎么工作的,这些还是挺重要的。你会…

Docker系列第02部分:Docker安装与启动

1 安装环境说明 这里将Docker安装到CentOS上。注意:这里建议安装在CentOS7.x以上的版本,在CentOS6.x的版本中,安装前需要安装其他很多的环境而且Docker很多补丁不支持更新。 2 Docker安装与使用 2.0 windows安装 1 windows安装&#xff08…

Docker系列第03部分:列出镜像+搜索镜像+拉取镜像+删除镜像

1.什么是Docker镜像 Docker镜像是由文件系统叠加而成(是一种文件的存储形式)。最底端是一个文件引导系统,即bootfs,这很像典型的Linux/Unix的引导文件系统。Docker用户几乎永远不会和引导系统有什么交互。实际上,当一…

c语言sort函数_C语言的那些经典程序 第八期

戳“在看”一起来充电吧!C语言的那些经典程序 第八期上期带大家欣赏的指针经典程序,感觉如何?这期我们准备了几个新指针的内容,灵活运用指针可以大大减少程序的复杂度,接下来就让小C来说说这三个有关指针应用的经典程序吧&#xf…

Docker系列第04部分:查看容器+创建容器+启动容器+文件挂载+删除容器

1 容器的创建和启动 1.1 虚拟机的生命周期 1.2 容器的生命周期 2、容器操作 2.1 查看容器 查看正在运行容器: docker ps 查看所有的容器(启动过的历史容器) docker ps –a 查看最后一次运行的容器: docker ps -l 查看停止的容…

java程序设计及实践实践代码_杭+新闻:姚争为老师把程序设计讲“活”了,满是代码的枯燥课程被学生“秒杀”...

通讯员 陈鑫 杨鹏飞记者 方秀芬作为专业选修课,Java程序设计和Web程序设计,这两门满是代码的课程,看似很枯燥,但在杭师大信息科学与工程学院却爆红,每学期都遭“秒杀”,以前线下课,提前20分钟准…

Docker系列第05部分:实战部署应用全流程

1 MySQL部署 1.1拉取MySQL镜像 docker pull mysql 查看镜像: 1.2创建MySQL容器 docker run -di --namepinyougou_mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD123456 mysql:5.7 # -p 代表端口映射,格式为 宿主机映射端口:容器运行端口 # -e 代表添加…

Vim安装插件在命令行下看代码

这几天我又想抛弃source insight 了,主要是太慢了 安装如下 VIM万能插件 或者使用 sudo apt-get installexuberant-ctags 安装 我主要是使用函数跳转功能,需要记住几个指令 1、生成tags用来实现函数跳转 这样会生成一个tags文件,作为跳…

Docker系列第06部分:备份与迁移+dockerfile

1 备份与迁移 1.1 容器保存为镜像 docker commit pinyougou_nginx mynginx# pinyougou_nginx是容器名称 # mynginx是新的镜像名称 # 此镜像的内容就是你当前容器的内容,接下来你可以用此镜像再次运行新的容器1.2 镜像备份 docker save -o mynginx.tar mynginx #…

流浪地球开机动画包zip_影视日报|合家欢动画电影quot;许愿神龙quot;定档1.15;流浪地球加长版定档11.26...

1、合家欢动画电影"许愿神龙"定档1.15动画电影《许愿神龙》正式定档2021年1月15日,并发布定档海报。2、白客等万万兄弟助力易小星"沐浴之王"由易小星执导,彭昱畅、乔杉领衔主演,卜冠今、苇青主演,金世佳友情出…

Git 分布式版本控制工具01:Git介绍+下载+安装

1. 前言 1.1 什么是Git Git 是一个分布式版本控制工具,通过Git 仓库来存储和管理源代码文件文件。 在IDEA开发工具中可以集成Git: 集成后在IDEA中可以看到Git相关图标: 可以通过启动两个IDEA窗口模拟两个开发人员来展示Git的使用&#xf…

无法解析的外部符号,无法解析的外部命令

1.这个是因为有相关的lib包没有被引用进去 解决办法: 1. 2. 转载于:https://www.cnblogs.com/hcfan/p/6638980.html

Android Adb 源码分析

扭起屁股得意洋洋 最近,我负责的项目因为临近量产,把之前的userdebug版本关闭,转成了user版本,增加selinux的权限,大家都洋溢在项目准备量产的兴奋和喜悦之中不能自拔 谁知,好景不长,user版本…

kvm虚拟化_KVM 虚拟化环境搭建 - WebVirtMgr

前文《KVM 虚拟化环境搭建 - ProxmoxVE》已经给大家介绍了开箱即用的 PVE 系统,PVE 是方便,但还是有几点问题:第一:始终是商用软件,虽然可以免费用,但未来版本还免费么?商用的法律风险呢&#x…

Git 分布式版本控制工具02:Git代码托管服务列表与使用

1常用的Git代码托管服务 Git中存在两种类型的仓库,即本地仓库和远程仓库。 Git远程仓库中比较常用的有GitHub、码云、GitLab等。 名称网址说明gitHubGitHub: Where the world builds software GitHub一个面向开源及私有软件项目的托管平台,因为只支持…

基于Springboot外卖系统19:用户地址+默认收货地址

1. 用户地址簿功能 1.1 需求分析 地址簿,指的是移动端消费者用户的地址信息,用户登录成功后可以维护自己的地址信息。 同一个用户可以有多个地址信息,但是只能有一个默认地址。 对于地址簿管理,我们需要实现以下几个功能&#…

基于Springboot外卖系统20:前端菜品展示+菜品数量查询

1 菜品展示 1.1 需求分析 用户登录成功后跳转到系统首页,在首页需要根据分类来展示菜品和套餐。如果菜品设置了口味信息,需要展示 按钮,否则显示按钮。 1.2 前端页面分析 在开发代码之前,需要梳理一下前端页面和服务端的交互过…

flash动画设计期末作业_「2019年下学期」第二十五二十六节:期末作品三-吉祥物设计...

初心伟大的艺术品不必追随潮流,他本身就能引领潮流。课前准备软件安装【2019(上)】《三维建模与动画设计》【2019年下学期】第一节:选修介绍及选修人数确定【2019年下学期】第二节:2D&3D设计之百事可乐图标设计【2019年下学期】第三四节&…