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

相关推荐
一棵开花的树,枝芽无限靠近你7 分钟前
【PPTist】添加PPT模版
前端·学习·编辑器·html
VertexGeek26 分钟前
Rust学习(八):异常处理和宏编程:
学习·算法·rust
二进制_博客1 小时前
Flink学习连载文章4-flink中的各种转换操作
大数据·学习·flink
codebolt1 小时前
ADS学习记录
学习
Komorebi.py2 小时前
【Linux】-学习笔记05
linux·笔记·学习
亦枫Leonlew3 小时前
微积分复习笔记 Calculus Volume 1 - 6.5 Physical Applications
笔记·数学·微积分
冰帝海岸8 小时前
01-spring security认证笔记
java·笔记·spring
小二·9 小时前
java基础面试题笔记(基础篇)
java·笔记·python
朝九晚五ฺ10 小时前
【Linux探索学习】第十四弹——进程优先级:深入理解操作系统中的进程优先级
linux·运维·学习
wusong99911 小时前
mongoDB回顾笔记(一)
数据库·笔记·mongodb