我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Docker是啥?

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Docker是啥?

Docker的图标代表,它托着许多集装箱。我们可以把宿主机可当做这只鲸鱼,把相互隔离的容器可看成集装箱,每个集装箱中都包含自己的应用程序。


Docker其操作的也是集装箱,这个集装箱就静态而言就是一个应用镜像文件,就动态而言,就是一个容器。

1.png

Docker从狭义上来讲就是一个进程,从广义上来讲是一个虚拟容器,其实更专业的叫法是应用容器( Application Container ),Docker进程和普通的进程没有任何区别,它就是一个普通的应用进程。不过是用来操作镜像文件的。所以Docker进程+构建的应用镜像文件就等于Docker容器。本文所有讲的Docker都是指Docker容器。


很多人会把虚拟机和docker弄混淆

VMware Workstation这款软件,大多数IT都用过。可以安装各种系统,但是需要额外的 CPU 和内存来完成 OS 的功能

启动系统,需要耗费几分钟的时间。一台PC机,开不了几台虚拟机,就卡死了。

但是Docker资源利用率高,可以跑上百上千个容器,启动速度在1秒内可以完成。


docker重要的基本概念,镜像,容器,仓库

镜像Docker images,就类似于VM虚拟机里面的快照,但是可比快照轻量化多了。快照不懂?那可以把images直接理解成一个文件夹。我们可以通过ID或者易识别的名字+tag来确认唯一的目标镜像。ImagesID是一个64位的字符,但是一般我们都是使用前面12位就足够区别了。


如图中左边红框中redis: lates和右边的红框中5f515359c7f8都唯一表示为同一个镜像。所以我们一般的镜像可以命名为类似centos:latest、centos:centos7.1.1503等等。


镜像是分层的,有基础镜像,仅仅包含操作系统,比如centos镜像;有中间件镜像,比如redis等数据库镜像;最后是应用镜像,就是指具体的应用服务了,应用镜像可以非常丰富,随时可以发布,这三者之间依次叠加。


所以当我们在使用 Docker构建镜像的时候,每一个命令都会在前一个命令的基础上形成一个新镜像层。如下图,基础镜像就是centos镜像,中间件镜像就是两个红色圈,应用镜像就是紫色圈。其中redis+centos这样叠加组合的中间件镜像就可以供A服务或者B服务使用,这样叠加组合更加灵活。仍和一种镜像都可以从Docker hub公共仓库中拉取。

2.png

容器Docker containers,你可以从镜像中创建容器,这如同从快照中创建虚拟机,不过更轻量,启动更快,秒启。应用是在容器中运行的,打个比方,你首先下载了一个Ubuntu的镜像,然后又安装mysql和Django应用及其依赖,来完成对它Ubutun镜像的修改,一个个人觉得非常完美应用镜像生成了!就把这个镜像分享给大家使用,大家通过这个镜像就生成一个容器。容器启动之后就会运行Django服务了。

3.PNG

上面也说到了,容器就是一个个独立的封闭的集装箱,但是也需要对外提供服务的,所以Docker允许公开容器的特定端口,在启动Docker的时候,我们就可以将容器的特定端口映射到宿主机上面的任意一个端口,所以,如果几个服务都需要80端口,那么容器的对外端口是80,但是映射到宿主机上面就是任意端口,就不会产生冲突,所以就不需要通过代理来解决冲突。容器对外端口与宿主机的端口映射可以通过下面的命令来完成。

启动docker容器
docker run -d -p 2222:22 --name 容器名 镜像名
-d 守护容器,就是后台运行,退出命令窗口容器也不会停止
-it 交互式容器 退出命令窗口容器就停止运行了
-p宿主机端口和容器端口映射
8081:80 宿主机端口:容器公开的端口

3.PNG

仓库Docker registeries,docker仓库和存放集装箱的仓库是一样的,不过docker使用来存放镜像的。仓库存在公有和私有之分,公有仓库docker hub提供了非常多的镜像文件,这些镜像直接拉取下来就可以运行了,你也可以上传自己的镜像到docker hub上面。同时也可以自己搭建私有仓库用于团队项目管理。

结合前面介绍的基本概念,我们可以将docker的几个概念使用大致串起来,他们之间是如何运作的,也就是Docker的生命周期。

4.PNG

1、 开发构建镜像并将镜像push到Docker仓库

2、 测试或者运维从Docker仓库拷贝一份镜像到本地

3、 通过镜像文件开启Docker容器并提供服务


为啥要用Docker?能干些啥?

为啥要用Docker?这要从目前软件行业的痛点来讲起 1、软件更新发布及部署低效,过程繁琐且需要人工介入,2、环境一致性难以保证,3、不同环境之间迁移成本太高。有了Docker可以很大程度解决上面的问题。


首先,Docker的使用简单至极,从开发的角度来看就是三步走:构建,运输,运行。其中关键步骤就是构建环节,即打包镜像文件。但是从测试和运维的角度来看,那就只有两步:复制,运行。有了这个镜像,那么想复制到哪运行都可以,完全和平台无关了。同时Docker这种容器技术隔离出了独立的运行空间,不会和其他应用争用系统资源了以及还不需要考虑应用之间相互影响,想想就开心。


其次,因为在构建镜像的时候就处理完了服务程序对于系统的所有依赖,所以在你使用的时候,你可以忽略掉原本程序的依赖以及开发语言。对测试和运维而言,更多专注于自己的业务内容上。


最后,Docker于开发者而言提供了一种开发环境的管理办法,与测试人员而言保证了环境的同步,于运维人员提供了可移植的标准化部署流程。


所以, Docker 能干啥,总结如下:

构建容易分发简单

隔离应用解除依赖

快速部署测完就销


Docker是个进程级的轻量化虚拟机,和传统虚拟机有啥区别呢?


Docker这个虚拟机超级轻量级,仅仅是一个进程而已。与传统的虚拟机比如VM有着巨大的差别

5.PNG

我们来看一下二者的区别,因为 VM 的 Hypervisor 需要实现对硬件的虚拟化,并且还要搭载自己的操作系统,其中虚拟机操作系统占用内存是比较大的,一个操作系统有好几个G,自然在启动速度和资源利用率以及性能上有非常大的开销,如果在本地,或者个人电脑,那么影响还不是那么大,但是在云端就是一个非常大的资源浪费。


咱们很多时候做事情的时候不会考虑与事情本身无关的问题,比如造飞机的不会考虑飞机是否要潜水,对于我们目前很多移动互联网的应用来说,很少会涉及到对操作系统的部分,其实我们主要关心的是应用的本身,而VM虚拟机的上层是运行的运行时库和应用,整个虚拟机的空间是非常的庞大,但是容器化技术Docker技术的出现后,省去了操作系统这一层,多个容器之间相互隔离且共用了宿主操作系统和运行时库。


所以Docker 应用容器相对于 VM 有以下几个优点:

启动速度快,容器启动本质就是一个开启一个进程而已,因此都是秒启,而 VM 通常要更久。

资源利用率高,一台普通 PC 可以跑成百上千个容器,你跑十个 VM 试试。

性能开销小, VM 通常需要额外的 CPU 和内存来完成 OS 的功能,这一部分占据了额外的资源。


所以很多移动互联网的应用或者云计算的后端节点都可以用docker来替换物理机器或者虚拟机。比如腾讯地图的很多后台服务基本上都迁移docker部署了。


Docker是个啥架构?底层又是用的啥技术?

前面说了那么多,始终还是雾里看花。下面就详细介绍一下技术架构,底层又是用的啥技术来实现上述那么多优点的?

Docker技术架构图:

6.PNG


从Docker依赖的底层技术来看,Docker原生态是不能直接在Windows平台上运行的,只支持linux系统,原因是Docker依赖linux kernel三项最基本的技术,namespaces充当隔离的第一级,是对Docker容器进行隔离,让容器拥有独立的hostname,ip,pid,同时确保一个容器中运行一个进程而且不能看到或影响容器外的其它进程;Cgroups是容器对使用的宿主机资源进行核算并限制的关键功能。


比如CPU,内存,磁盘等,union FS主要是对镜像也就是image这一块作支持,采用copy-on-write技术,让大家可以共用某一层,对于某些差异层的话就可以在差异的内存存储,Libcontainer是一个库,是对上面这三项技术做一个封装。


Docker engine 用来控制容器container的运行,以及镜像文件的拉取。


本文参考

http://www.roncoo.com/article/detail/131215


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Docker是啥?

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Docker是啥?

Docker的图标代表,它托着许多集装箱。我们可以把宿主机可当做这只鲸鱼,把相互隔离的容器可看成集装箱,每个集装箱中都包含自己的应用程序。Docker其操作的也是集装箱,这个集装箱就静态而言就是一个应用镜像文件,就动态而言,就是一个容器。D
2023-01-30

cdn是啥

CDN是内容分发网络的缩写,一种分布式网络架构,通过将内容分发到全球各地的服务器节点上,以提高内容传输速度、降低网络延迟、减轻服务器负载、提高网站可靠性和抵御攻击的网络架构,通过CDN,用户可以更快速地访问到所需的内容,提升了用户体验,同时
2023-08-14

discuz是啥

discuz是一个非常受欢迎的社区论坛软件,由中国开发的,被广泛用于各种网站和社区平台,是基于PHP语言开发的,使用MySQL数据库进行数据存储。本教程操作系统:Windows10系统、Discuz X3.5版本、Dell G3电脑。Dis
2023-08-08
2023-05-18

磁盘是啥

磁盘是计算机中的一种外部存储设备,用于存储和检索数据,由一个或多个磁性盘片组成,每个盘片都被分成一个或多个磁道和扇区,通过旋转盘片和移动磁头来读取和写入数据。其具有高容量、高持久性和可靠性的特点,被广泛应用于计算机系统中。本教程操作系统:W
2023-08-16

Go Callvis是啥

Go-callvis是一种golang代码可视化工具,用于帮助使用交互式视图可视化Go程序的调用图,安装命令“go get -u github.com/ofabry/go-callvis”。Go-callvis工具的目的是为开发人员提供一个可视化的Go程序概览,使用来自调用图的数据及其与包和类型的关系。
2023-05-14
2024-04-25

php curl 是啥

php curl是php中的数据传输神器;PHP支持的由Daniel Stenberg创建的libcurl库,允许你与各种的服务器使用各种类型的协议进行连接和通讯。
2020-04-13

vue页面是啥

Vue页面是使用Vue框架进行开发的单页应用程序。Vue是一种流行的JavaScript框架,它可以用于构建数据驱动的交互式Web界面,简化Web应用程序的开发和维护。Vue实际上是MVVM(Model-View-ViewModel)模式的实现,它将界面的抽象分为数据模型、视图和交互模型。Vue的核心是响应式数据绑定和组件化系统。Vue页面包含Vue实例、组件、指令、生命周期钩
2023-05-24

html是啥意思

HTML是一种标准标记语言,用于创建和呈现网页的结构和内容。HTML使用一系列标记标签来描述网页的结构和内容,网页中的文本、图像、链接、表格等元素都可以通过HTML标签进行定义和设置。它是互联网发展的基石,为网页开发提供了丰富的功能和灵活性
2023-08-14

pr是啥意思

pr是Public Relations的缩写,是一种重要的组织管理工具,旨在通过建立和维护良好的关系来提高组织的声誉和信任度。它需要透明度、真实性和一致性,同时需要与新媒体和社交媒体紧密结合。通过有效的pr实践,组织可以获得更广泛的认可和支
2023-08-03

pycharm是啥意思

pycharm 是一款功能强大的 python ide,专为 python 开发人员设计,提供了语法高亮、代码自动完成、代码检查、重构、调试、单元测试、版本控制集成、远程开发和智能代码编辑等功能,可扩展且可定制。PyCharm是什么?Py
pycharm是啥意思
2024-04-04

redis是啥意思

redis(远程字典服务器)是一种内存型键值存储数据库,具有以下特点:内存存储,速度快。键值对存储,数据类型丰富。单线程处理,性能高、延迟低。支持数据持久化,避免数据丢失。应用场景包括缓存、会话存储、队列、排行榜和限流等。redis的含义
redis是啥意思
2024-04-08

php是做啥的

php即“超文本预处理器”,是在服务器端执行的脚本语言,用于web开发;php的作用有:1、生成动态页面内容;2、创建、打开、读取、写入、删除以及关闭服务器上的文件;3、接收表单数据;4、添加、删除、修改数据库中的数据;5、限制用户访问网站中的某些页面;6、对数据进行加密等。
2023-05-14

java和php是啥

java是一种通用的面向对象编程语言,旨在生成可在任何地方使用相同代码的代码;它支持服务器端和客户端。PHP即“超文本预处理器”,是一种通用开源的、面向对象的、解释型的、独立于架构的、可移植的、动态的脚本语言,主要适用于Web开发领域。
2022-03-27

java是啥意思?

Java是一门面向对象编程语言,是一种广泛使用的计算机编程语言,拥有跨平台、面向对象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。【推荐学习:java课程】java不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,
java是啥意思?
2020-07-28

bak文件是啥

bak文件是一种常见的计算机文件类型,通常被用于备份数据,对于数据迁移、共享和存档也非常有用,为了确保数据的安全和完整性,应该采取适当的措施来保护和管理bak文件。本文的操作环境:Windows10系统、DELL G3电脑。Bak文件是一种
2023-08-07

git凭证是啥

什么是git凭证?Git是一种分布式版本控制系统,因为它的分布式特性,使得多人协作变得更加方便。尤其是在团队开发项目时,Git的使用随处可见。在对Git进行操作时,通常需要输入用户名和密码或凭证。而最近,Git增加了一个新特性:Git凭证(
2023-10-22

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录