Docker学习笔记(一)概念理解

一、什么是docker容器

        Docker容器是一种轻量级、可移植的软件封装技术,它允许开发者将应用程序及其依赖、配置文件、运行环境等打包到一个独立的、自包含的执行单元中。容器与虚拟机相似,都提供了隔离的运行环境,但容器更加轻量级,因为它不需要像虚拟机那样为每个应用配备完整的操作系统;而是共享主机的操作系统内核,同时利用资源隔离机制(如cgroups和命名空间)来保证容器间互不影响。

Docker容器的核心优势包括:

  1. 轻量级:启动和停止速度极快,资源利用率高,相比传统虚拟机,容器在内存和CPU使用上更为高效。
  2. 标准化:Docker镜像提供了一种标准化的软件打包和交付方式,使得应用程序可以在任何支持Docker的环境中一致地运行,实现了“一次构建,到处运行”。
  3. 隔离性:每个容器都在自己的视图中运行,拥有独立的文件系统、网络配置、进程空间等,与宿主机和其他容器隔离。
  4. 可移植性:Docker容器可以在不同的硬件平台、操作系统和云环境中无缝迁移。
  5. 可扩展性:易于创建、复制和销毁容器,便于实现水平扩展和负载均衡。

容器与虚拟机的区别

        为什么要和虚拟机做比较,用过虚拟机的同学应该知道,虚拟机也是将主机资源分配出一部分,进行隔离,提供另一个系统环境。但是虚拟机是模拟出了一台完整的电脑,包括它的硬件资源,虚拟机是可以像电脑一样进入bios中,使用u盘安装系统的。

容器

        容器是应用层的抽象,它将代码和依赖关系打包在一起。多个容器可以在同一台机器上运行,并与其他容器共享操作系统内核,每个容器在用户空间中作为独立进程运行。容器占用的空间比VM少(容器映像的大小通常为几十MB),可以处理更多的应用程序,并且需要更少的VM和操作系统。

虚拟机

        虚拟机(VM)是物理硬件的抽象,将一台服务器转变为多台服务器。管理程序允许多台VM在单台机器上运行。每个VM都包含操作系统的完整副本,应用程序,必要的二进制文件和库 - 占用数十GB。虚拟机也可能很慢启动。

为什么要使用容器?

        首先建立在我们需要环境隔离的基础上。
        根据上面的介绍,可以看出虚拟机,是主机级虚拟化,完整的虚拟出一台计算机,然后在虚拟出来的机器上安装操作系统,做到环境隔离。想想我们的服务部署在虚拟机上是什么情况。

        如上图所示,在宿主机中安装了系统,系统中安装了虚拟机,虚拟机虚拟出一台计算机,在虚拟计算机中安装完整的系统,再将服务部署在虚拟系统中。
       部署的服务受虚拟机的内核调度,虚拟机受主机的调度,多层及下主机资源产生了严重的浪费。如果要在一台机器上部署多个服务,还要环境隔离,那就需要有多个虚拟机,所需要的资源也就不言而喻。

如果使用容器是什么样的呢?

        容器是在主机的操作系统中,隔离出单独的用户空间,每个都是单独的沙箱,环境互不影响。需要的系统资源也只是服务所需要的资源,减少了虚拟主机的资源开销。

 二、什么是镜像

Docker镜像(Docker Image)是Docker技术中的核心组件之一,它是一个轻量级、可执行的独立软件包,充当了创建Docker容器的蓝图或模板。镜像定义了运行应用程序所需的所有内容,包括代码、运行时环境(如Python、Node.js等)、库依赖、环境变量、配置文件以及操作系统的层。每个Docker容器都是从某个镜像实例化而来的。

Docker镜像的几个关键特性包括:

  1. 分层结构:Docker镜像是由多个层(layers)组成的,每一层代表了文件系统的差异变更。这种分层设计使得镜像的构建、传输和存储更加高效。当一个层被更改或添加,只会保存该层的差异部分,而非整个镜像,这有助于减小存储占用和加速镜像的传输过程。

  2. 不可变性:一旦构建完成,镜像的内容就是静态的、只读的。这意味着运行时对容器的修改不会影响到原始镜像,保证了环境的一致性和可复现性。

  3. 内容寻址:每个镜像层都有一个唯一的ID,通常是通过SHA256算法计算得出的校验和,确保了镜像的唯一性和完整性。当从Docker Hub或其他注册表下载镜像时,Docker会检查本地是否已存在相同的层,从而避免重复下载,提高了效率。

  4. 可移植性:Docker镜像可以在任何支持Docker的平台上运行,确保了应用程序在不同环境之间的一致运行,实现了“一次构建,到处运行”的理念。

  5. 创建与管理:用户可以通过Dockerfile来定义和自动化构建镜像的过程,也可以基于现有镜像使用docker commit命令创建新镜像,或者通过docker pull命令从Docker Hub等镜像仓库下载镜像,使用docker images命令查看本地镜像列表。

三、什么是仓库

Docker仓库(Docker Repository)是集中存储和分发Docker镜像的场所,类似于代码仓库用于存储代码一样,Docker仓库用于存放用户创建或下载的Docker镜像(可以理解为软件商店)。仓库是Docker生态系统中非常关键的一部分,它支持Docker镜像的分享、重用和版本控制。

Docker仓库可以分为两大类:

  1. 公共仓库:最知名的公共仓库是Docker Hub,这是Docker官方维护的服务,用户可以免费上传和下载镜像。Docker Hub上存有成千上万的镜像,包括各种流行的应用、服务以及基础镜像,如Ubuntu、Nginx、MySQL等。任何人都可以搜索、下载这些镜像来使用,也可以上传自己的镜像供他人使用。

  2. 私有仓库:除了公共仓库,用户或组织还可以搭建自己的私有仓库,用于存储和管理不想公开的镜像,或满足企业内部的安全和合规要求。私有仓库可以使用Docker官方提供的Docker Registry软件来部署,也可以使用第三方的私有仓库解决方案,如Harbor、GitLab Container Registry等。

Docker仓库的工作原理涉及仓库注册服务器(Registry),这是一个存储和分发镜像的服务端组件。每个仓库可以包含多个镜像,每个镜像又有不同的标签(tags),标签用来标记镜像的版本或变体。当用户执行docker pulldocker push命令时,实际上是在与仓库注册服务器进行通信,以下载或上传镜像。

参考文章:Docker容器技术----什么是容器? - 简书

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

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

相关文章

Echarts折线+柱状图的多y轴

实现效果&#xff1a; 代码&#xff1a; <template><div class"test-echart"><div id"barLineChart" ref"barLineChart" :style"barLineStyle"></div></div> </template> <script> // imp…

MySQL之MHA高可用集群及故障切换

一、MHA概述 MHA&#xff08;MasterHigh Availability&#xff09;是一套优秀的mysql高可用环境下故障切换和主从复制的软件。MHA的出现就是为了解决mysql单点故障。Mysql故障切换过程中&#xff0c;MHA能做到0-30秒内自动完成故障性切换操作。MHA能在故障切换的过程中最大程度…

【路由交换技术】Cisco Packet Tracer基础入门教程(五)

这一期我们来学习端口聚合&#xff0c;这是针对交换机的技术 前言 不知道大家有没有注意到&#xff0c;我们之前的实验在交换机与交换机之间只用一条线连接&#xff0c;像这样 通过今天的学习&#xff0c;我们要用两条线来连接交换机&#xff0c;就像这样&#xff08;为了能…

3D问界—法线空间与应用举例

问题提出&#xff1a;什么是法线空间&#xff0c;有哪些应用的场景&#xff1f; 法线空间&#xff08;Normal Space&#xff09;在计算机图形学中是一个重要的概念&#xff0c;特别是在处理表面法线&#xff08;Normal&#xff09;时常被提及。 1. 法线空间的分类 法线空间是相…

“工控机”是什么?和普通电脑有区别嘛!

在现代工业生产中,有一种特殊的计算机,它不像普通电脑那样被放置于明亮的办公室内,而是常常藏身于机器轰鸣、环境恶劣的工厂车间里,这就是工控机——工业控制计算机的简称。作为工业自动化领域不可或缺的核心设备,工控机不仅承载着监控与数据采集(SCADA)、过程控制、数据…

python 实现docx指定语言翻译(不丢失格式)

我这边有个需求需要把一份docx翻译成指定语言的文档并且保存&#xff0c;研究了下&#xff0c;记录。 首先先安装依赖 pip install python-docx1.1.2 googletrans4.0.0rc1 python-docx是用来读取docx的&#xff0c;googletrans使用来翻译的。 googletrans PyPI 这个是官方文…

【大语言模型系列之Transformer】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

什么是YUV和IPB,PTS和DTS,视频编码解码过程

YUV 是一种在视频处理和压缩中常用的颜色空间。 它将图像的亮度 (Y) 与色度 (U 和 V) 成分分开。 这种分离对视频压缩和广播非常有益&#xff0c; 因为人眼对亮度变化比对颜色变化更敏感。 YUV 组件简介 Y (亮度)&#xff1a;表示图像的亮度或灰度信息。U (色度)&#xff1a;…

每日一练:攻防世界:Hidden-Message

追踪UDP数据流&#xff0c;没有任何隐藏信息&#xff1a; WP&#xff1a; 观察流量包 每个流的唯一的区别就是UDP的源地址srcport的最后一位在变化 都提取出来就是二进制序列 用tshark提取一下 //使用tshark过滤出源端口&#xff0c;使用cut裁取端口的最后一位 tshark -r 8…

[C/C++] -- gdb调试与coredump

1.gdb调试 GDB&#xff08;GNU 调试器&#xff09;是一个强大的工具&#xff0c;用于调试程序。 安装 1. wget http://ftp.gnu.org/gnu/gdb/gdb-8.1.tar.gz 2. tar -zxvf gdb-8.1.1.tar.gz 3. cd gdb-8.1.1 4. ./configure 5. make 6. make install 基础用法 …

git上传文件

git init git add . git commit -m " " git remote add origin 仓库的地址 git push -u origin master 如果出现以下问题 可以用这一句强制上传 git push -f origin master

BME688 环境传感器

型号简介 BME688是博世&#xff08;bosch-sensortec&#xff09;的一款首款具有人工智能 (AI) 和集成高线性度和高精度压力、湿度和温度传感器的气体传感器。它采用坚固而紧凑的 3.0 x 3.0 x 0.9 mm 封装&#xff0c;专为移动和联网应用而开发&#xff0c;在这些应用中&#xf…

C++之boost智能指针

1、boost智能指针 资源获取即初始化&#xff1a;在构造函数中对资源进行初始化&#xff0c;在析构函数中释放。 智能指针的本质思想是&#xff1a;将堆对象的生存期&#xff0c;用栈对象来管理。这个栈对象就是智能指针。 当new 一个堆对象的时候&#xff0c;立刻用智能指针…

共享拼购:创新商业模式引领小用户基数下的销售奇迹“

在瞬息万变的商业蓝海中&#xff0c;一个新颖且深具潜力的策略正悄然改变着游戏规则&#xff0c;它巧妙地避开了传统路径的束缚&#xff0c;以微妙却深远的调整&#xff0c;开辟出了一条通往成功的独特航道。我的一位合作伙伴&#xff0c;正是这一策略的实践者&#xff0c;他在…

Blender渲染慢?那是你还不知道这5个技巧

Blender是一款功能强大且用途广泛的软件&#xff0c;可帮助 3D 艺术家和动画师创作出色的视觉内容。如果您使用过 Blender&#xff0c;您就会知道渲染可能非常耗时。渲染时间过长可能会令人烦恼并限制创造力。 在这篇文章中&#xff0c;我们将提供一些专家提示和想法以加快 Bl…

交换机需要多大 buffer

有点违背直觉&#xff0c;但是真事儿&#xff0c;交换机过境的流越多&#xff0c;所需 buffer 越小&#xff0c;这是为什么&#xff1f; 范氏(范雅各布森&#xff0c;van jacobson)管道的 aimd 流建议 buffer_size 为 bdp&#xff0c;这很容易理解&#xff0c;因为 aimd 流最小…

OpenCV库Windows端编译方法

编译前提 &#xff08;1&#xff09;下载好所需版本的OpenCV源码&#xff0c;点击进入下载地址&#xff0c;此处以OpenCV-2.4.13.6为例&#xff0c;下载页面截图如下图所示&#xff1a; 解压后如下图所示&#xff1a; &#xff08;2&#xff09;安装好CMake软件&#xff0c;点…

规则·理解·成长:与自闭症儿童共绘记忆蓝图

在星贝育园&#xff0c;作为专注于自闭症儿童康复的专业教育者&#xff0c;我们常常遇到家长的疑惑&#xff1a;“为什么我的孩子总是记不清楚规则&#xff1f;”这个问题触及了自闭症谱系障碍&#xff08;ASD&#xff09;儿童在理解与遵守规则方面面临的独特挑战。下面&#x…

软考中级系统集成项目管理工程师备考笔记

目录 一&#xff0c;通用内容 &#xff08;一&#xff09;信息与信息化 1.1&#xff0c;信息 信息基本概念 信息的传输模型 信息的质量属性 1.2&#xff0c;信息系统 信息系统的基本概念 信息系统定义 信息系统集成 1.3&#xff0c;信息化 信息化层次 信息化的核心…

【Redis】SpringBoot连接Redis

1. 创建项目并配置文件 勾选NoSQL中的 Spring Data Redis。当然,把 Web 中的 SpringWeb 也勾选一下.方便写接口进行后续测试。 在 application.yml 中配置 2. 不同数据类型使用Demo 在SpringBoot中&#xff0c;为我们提供了StringRedisTemplate类&#xff0c;供我们处理一些文…