当前位置: 首页 > news >正文

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容器技术----什么是容器? - 简书

相关文章:

  • antd Select前端加模糊搜索
  • 位运算(、|、^、~、>>、<<)
  • ArcGIS Pro SDK (七)编辑 12 编辑模版
  • 以智能化为舵手,引领现代计算机系统架构新航向
  • 前端播放RTSP视频流,使用FLV请求RTSP视频流播放(Vue项目,在Vue中使用插件flv.js请求RTSP视频流播放)
  • C# 快速排序算法的详细讲解
  • Python (Ansbile)脚本高效批量管理服务器和安全
  • uniapp开发H5、手机APP、微信小程序 可拖动菜单按钮
  • YOLO10 用分割数据集训练
  • Java 重载和重写
  • qt可点击的QLabel
  • nacos开启鉴权后,springboot注册失败
  • STC89C52RC单片机设计的FM收音机+自动搜台+存储电台(程序+原理图+PCB)
  • CC6利用链分析
  • BeanUtils拷贝List数据
  • [分享]iOS开发-关于在xcode中引用文件夹右边出现问号的解决办法
  • 《网管员必读——网络组建》(第2版)电子课件下载
  • 30天自制操作系统-2
  • ESLint简单操作
  • IndexedDB
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • JAVA_NIO系列——Channel和Buffer详解
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • Ruby 2.x 源代码分析:扩展 概述
  • 爱情 北京女病人
  • 创建一种深思熟虑的文化
  • 猴子数据域名防封接口降低小说被封的风险
  • 全栈开发——Linux
  • 如何选择开源的机器学习框架?
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • - 转 Ext2.0 form使用实例
  • hi-nginx-1.3.4编译安装
  • 我们雇佣了一只大猴子...
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • # SpringBoot 如何让指定的Bean先加载
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (八)Flask之app.route装饰器函数的参数
  • (仿QQ聊天消息列表加载)wp7 listbox 列表项逐一加载的一种实现方式,以及加入渐显动画...
  • (十八)三元表达式和列表解析
  • (循环依赖问题)学习spring的第九天
  • (一)Linux+Windows下安装ffmpeg
  • (一)基于IDEA的JAVA基础1
  • (转)负载均衡,回话保持,cookie
  • (转)利用ant在Mac 下自动化打包签名Android程序
  • *setTimeout实现text输入在用户停顿时才调用事件!*
  • .Net Web项目创建比较不错的参考文章
  • .NET大文件上传知识整理
  • /etc/apt/sources.list 和 /etc/apt/sources.list.d
  • @Autowired注解的实现原理
  • [ Algorithm ] N次方算法 N Square 动态规划解决
  • [100天算法】-目标和(day 79)
  • [2010-8-30]
  • [CareerCup] 2.1 Remove Duplicates from Unsorted List 移除无序链表中的重复项
  • [DP 训练] Longest Run on a Snowboard, UVa 10285