初识Docker容器

news/2024/9/20 16:32:45

初识Docker容器


1. 什么是Docker


Docker 是一个开源的容器化平台,用于自动化部署和管理应用程序。它通过将应用程序及其所有依赖打包成一个轻量级、可移植的容器来解决传统虚拟化中的性能开销问题。Docker 容器可以在任何支持 Docker 的环境中运行,无论是本地开发环境、测试服务器,还是生产环境。可以很容易地从一个环境迁移到另一个环境,支持跨平台的部署和扩展。

1.1 常规部署的问题

大型项目组件较多,运行环境也较为复杂。

  • 开发、测试和生产环境的配置差异可能导致应用程序在某些环境下正常运行,而在其他环境中出错。
  • 应用程序依赖的库、框架、数据库等需要手动安装和配置,管理和维护不同版本的依赖变得复杂。
image-20210731141907366

有的项目中部署时需要依赖于node.js、Redis、RabbitMQ、MySQL等,这些服务部署时所需要的函数库、依赖项各不相同,甚至会有冲突,给部署带来了极大的困难。

1.2 Docker如何解决依赖兼容问题

  • 打包应用及其依赖:将应用的库(Libs)、依赖(Deps)和配置文件与应用一起打包到容器镜像中,确保应用运行所需的一切都包含在内。
  • 容器隔离运行:每个应用运行在独立的容器中,隔离它们的运行环境,避免不同应用之间的依赖冲突和互相干扰。
image-20210731142219735

这样打包好的应用包中,既包含应用本身,也保护应用所需要的Libs、Deps,无需再操作系统上安装这些,自然就不存在不同应用之间的兼容问题了。

虽然解决了不同应用的兼容问题,但是开发、测试等环境会存在差异,操作系统版本也会有差异,怎么解决这些问题呢?

1.3 Docker如何解决操作系统环境差异

1.3.1 操作系统结构

要解决不同操作系统环境差异问题,必须先了解操作系统结构。以一个Ubuntu操作系统为例,结构如下:

image-20210731143401460

结构包括:

  • 计算机硬件:例如CPU、内存、磁盘等
  • 系统内核:所有Linux发行版的内核都是Linux,例如CentOS、Ubuntu、Fedora等。内核可以与计算机硬件交互,对外提供内核指令,用于操作计算机硬件。
  • 系统应用:操作系统本身提供的应用、函数库。这些函数库是对内核指令的封装,使用更加方便。

计算机交互的流程:

  1. 应用调用操作系统应用(函数库),实现各种功能。
  2. 系统函数库是对内核指令集的封装,会调用内核指令。
  3. 内核指令操作计算机硬件。

Ubuntu和CentOS等都是基于Linux内核,只是系统应用不同,所提供的函数库有差异。

image-20210731144304990

此时,若将一个Ubuntu版本的MySQL应用安装到CentOS系统,MySQL在调用Ubuntu函数库时,会发现找不到或者不匹配。

image-20210731144458680

1.3.2 Docker解决不同系统环境的问题

Docker 将用户程序与其所需的系统库(如 Ubuntu 的函数库)一起打包进镜像,确保运行时环境一致。

当 Docker 在不同操作系统上运行时,它直接使用打包好的系统函数库,借助操作系统的 Linux 内核(Docker 依赖 Linux 内核特性)来运行容器中的应用程序。

这样,即使底层操作系统不同,Docker 仍能确保应用程序在一致的环境下运行,解决了环境差异带来的兼容性问题。

image-20210731144820638

2. 总结


2.1 Docker解决大型项目依赖兼容性问题

  • Docker允许在开发中将应用、依赖、函数库、配置等打包在一起,形成一个可移植的镜像,确保应用及其所需的环境一致。
  • Docker应用运行在容器中,利用沙箱机制,实现相互隔离,避免不同组件之间的依赖冲突。

2.2 Docker解决开发、测试、生产环境差异问题

  • Docker镜像包含完整的运行环境,包括操作系统的函数库和应用依赖,仅依赖宿主系统的Linux内核,因此可以在任意Linux操作系统上一致运行
  • 无论开发、测试还是生产环境,只要使用相同的镜像,就能保证运行环境的一致性,避免因环境差异导致的问题。

2.3 Docker的优势总结

  • 可移植性:将程序及其依赖、运行环境一起打包为镜像,可轻松迁移至任何支持Docker的Linux操作系统。
  • 隔离性:容器利用沙箱机制实现应用间的隔离,确保各个应用互不干扰
  • 快捷性:启动、停止、移除应用都可通过一行命令完成,提升了部署和管理的便捷性

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

内存对齐和缓冲区溢出攻击

.一、问候语 欢迎你来到我的博客! 二、什么是内存对齐计算机中内存空间都是按照字节(byte)进行划分的,所以从理论上讲对于任何类型的变量访问都可以从任意地址开始,但是在实际情况中,在访问特定类型变量的时候经常在特定的内存地址访问,所以这就需要把各种类型数据按照一定…

ARM SMMU原理与IOMMU技术(“VT-d” DMA、I/O虚拟化、内存虚拟化)

名词缩写ASID:Address Space ID 地址空间标识符 CD:Context Descriptor; 上下文描述符; CTP:Context-table pointer 上下文表指针 EPT:Extended Page Table 扩展页表 GPA:Guest Phyical Address 客人的实际地址 GVA:Guest Virtual Address 访客虚拟地址 HPA:Host…

博客园评论区头像换页更新解决方案

使用 MutationObserver 解决了评论区头像换页无法更新的问题。前言 博客园博客正文的评论区的每一条评论其实都是带用户头像链接的,因此有些博客主题利用这个链接,对评论新增了头像显示功能。 但是这部分功能只能在第一次加载页面时有效,一旦出现评论翻页、排序等操作,头像…

数学知识(初赛)

求最大公约数的技巧 利用辗转相除法,gcd(A,B)=gcd(B,A%B),就可以很快速求解。 应用:化简分数,数学题等等。原理:理解为一个长方形,然后要尽量去铺最大正方形,以满足铺满长方形。最后一个铺满长方形的那个正方形肯定是最大公约数。 如下图,这个长方形先铺一个绿色…

高等数学 2.4 隐函数及由参数方程确定的函数的导数

目录一、隐函数求导二、由参数方程所确定的函数的导数三、相关变化率 一、隐函数求导 函数 \(y = f(x)\) 表示两个变量 \(y\) 与 \(x\) 之间的对应关系,这种对应关系可以用各种不同方式表达,例如 \(y = \sin x\) ,\(y = \ln x + \sqrt{1 - x^2}\) 等。这种函数表达方式的特点…

小林coding学习笔记(内存页面置换算法)

缺页中断示意图1 在CPU里执行一条查找某个页面A的指令,首先是虚拟内存,会到虚拟内存和物理内存的映射关系的页表中查询。 2 页表中不存在需要查找的页面A的有效信息。 3 则触发缺页中断信号给操作系统,操作系统收到缺页中断信号后,就会去磁盘里面查找该页面。 4 操作系统在…

Unity中的三种渲染路径

Unity中的渲染路径 Unity的渲染路径 在Unity里,渲染路径(Rendering Path)决定了光照是如何应用到Unity Shader中的。因此,我们只有为Shader正确地选择和设置了需要的渲染路径,该shader的光照计算才可以被正确执行。 unity中的渲染路径:Forward Rendering Path (向前渲染…

白云龙期货投资-第一讲

# 期货散户投资者常见错误 抄底摸顶,进场无依据,无参照物 小赢大亏(小鸟吃食 大象拉屎资金曲线) 用错误的方法分析行情(金死叉) 过分依赖各种交易软件,公式 持亏损的单子隔夜 死扛(进场条件)期货散户投资者常见错误 抄底摸顶,进场无依据,无参照物 小赢大亏(小鸟吃食 大…