首页 > 其他分享 >初识Docker容器

初识Docker容器

时间:2024-09-16 15:46:52浏览次数:1  
标签:容器 函数库 环境 初识 内核 应用 Docker 操作系统

初识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操作系统。
  • 隔离性:容器利用沙箱机制实现应用间的隔离,确保各个应用互不干扰
  • 快捷性:启动、停止、移除应用都可通过一行命令完成,提升了部署和管理的便捷性

标签:容器,函数库,环境,初识,内核,应用,Docker,操作系统
From: https://www.cnblogs.com/xzvf/p/18416324

相关文章

  • kube-ovn打通节点和容器通信
    kube-ovnv1.12.22在kube-ovn中,ls是subnet,lr是vpc,ovn0是ovn-default才有的容器网关,即自定义vpc没有ovn0。步骤中参数值只是类比,不和截图完全相同。步骤1:veth和ovn0作为ovsport,与ls和lr建立关联。#join与lr关联ovn-nbctlls-addjoinovn-nbctllrp-addovn-clusterovn-cl......
  • HTTP Status 404 – Not Found Docker Tomcat Image
    这没有错误,由于Docker社区提出的安全问题,它被设计为具有这样的行为。您可以在DockerHub中的Tomcat镜像官方文档中找到有关安全性的信息。根据社区请求,Webapps文档夹将移动到webapps.dist文档夹,这意味着webapps文档夹为空,并且浏览器上没有要提供的文档。这时,您会看......
  • 并发容器(Map、List、Set)实战及其原理分析
    1.JUC包下的并发容器Java的集合容器框架中,主要有四大类别:List、Set、Queue、Map,大家熟知的这些集合类ArrayList、LinkedList、HashMap这些容器都是非线程安全的。所以,Java先提供了同步容器供用户使用。同步容器可以简单地理解为通过synchronized来实现同步的容器,比如Vector......
  • STL-vector容器总结
    vector(向量)是C++标准模板库(STL)中最常用的容器之一,它提供了动态数组的功能,可以存储任意类型的元素。vector具有自动管理内存、支持随机访问、动态调整大小等优点,非常适合用于需要频繁增删元素或未知大小的数组场景。下面是对vector的总结和常见用法。先复习一下c++中常用的......
  • 【webpack4系列】webpack初识与构建工具发展(一)
    为什么需要构建工具?转换ES6语法转换JSXCSS前缀补全/预处理器压缩混淆图片压缩前端构建演变之路ant+YUIToolgruntgulp、fis3webpack、rollup、parcel为什么选择webpack?社区⽣态丰富配置灵活和插件化扩展官⽅方更新迭代速度快初识webpack,简单的例子入手......
  • 初识Lambda表达式(匿名函数)
    0.问题导向使用C++STL实现订单按照创建时间从小到大排查。usingOrder=structtagOrder{unsignedintcreateTimspec;//创建时间戳intid;//订单号inttotalPrice;//总价intstatus;//订单状态intp......
  • 【Node.js】初识 RabbitMQ
    概述MQ顾名思义,是消息队列。RabbitMQ是一个消息队列系统,用于实现异步通信。基于AMQP。AMQP(高级消息队列协议)实现了对于消息的排序,点对点通讯,和发布订阅,保持可靠性、保证安全性。在Node.js的微服务架构中,RabbitMQ可以作为服务之间的消息传递中介,帮助解耦系统组件......
  • 一步到位:通过 Docker Compose 部署 EFK 进行 Docker 日志采集
    一、EFK简介Elasticsearch:一个开源的分布式搜索和分析引擎,用于存储和查询日志数据。它是EFK的核心组件,负责高效地存储和检索日志信息。Filebeat:一个轻量级的日志采集器,主要用于将日志文件数据发送到Logstash或Elasticsearch。Filebeat设计用于高效地转发和处理日志......
  • 关于 Docker
    这是个不怎么大众的技术,因为很多时候,你事实上是没有把东西打包带走的需求的。但是,据说很多人来杭州第一个项目,研究这个事情怎么搞。well,我适应适应。 第一,概念。image镜像docker中的静态元素;container是image实例。所以原则上,一个image声称多个container,暂时理解为......
  • Docker 网络基本概念
    在之前讲Redis集群搭建的时候,我们用过一个选项--nethost​,现在就来讲讲该选项,以及Docker的网络。dockerrun-d--nameredis-node-1--nethost--privileged=true-v/data/redis/share/redis-node-1:/dataredis:6.0.8--cluster-enabledyes--appendonlyyes--port6......