docker原理详解

2023-11-18

一、docker简介

  docker是一个虚拟环境容器,可以将你的开发环境、代码、配置文件等一并打包到这个容器中,并发布和应用到任意平台中。docker容器和虚拟机都有虚拟隔离的特性,所以一般都会拿虚拟机和docker容器作比较。

二、docker解决了什么

  软件的安装和部署是比较麻烦的,不同的环境可能导致软件无法正常运行,例如linux系统传统常用安装软件的方式有三种:源码、rpm包、yum包。这三种方式中yum安装方式最简单了,但yum安装的版本一般比较低,可能需要升级从而导致操作繁琐甚至环境不一致等问题。docker解决了部署简单、环境不一致、资源利用率高等问题。

  1. 容器化:把代码、配置文件和它所依赖的环境整合打包成,使用容器运行,解决了部署繁琐和环境不一致问题。
  2. 资源利用率:容器相对于虚拟机来说效率高,容器是共享宿主机内核、cpu、内存、磁盘的,而虚拟机是独占这些资源的。效率利用率从高到底依次为:传统软件安装>容器>虚拟机
  3. 安全性:相对于传统软件的安装方式安全性高,容器运行的方式是进程级别的隔离,所以运行的环境和传统软件方式相比是不受影响的,但没有虚拟机安全级别高,虚拟机是系统级别的隔离。安全级别从高到低依次为:虚拟机>容器>传统软件安装

扩展:

  • 源码安装:编译麻烦,而且还需要先安装各种依赖软件
  • rpm包安装:rpm包是别人编译安装好的二进制包,和windows下的exe安装文件一样。也需要先安装各种依赖软件
  • yum安装:解决了依赖关系,但yum安装方式依赖yum源文件且人为无法干预,不能按需安装,安装的版本也比较低。

三、docker架构

docker使用c/s架构,即客户端/服务器架构。

  • docker客户端:docker客户端只是命令行工具,使用诸如docker run之类的命令时,客户端会将这些命令通过Docker API发送到dockerd(dockerd就是docker daemon)来执行这些命令。docker客户端可以与多个docker daemon通信。
  • docker守护程序(docker daemon):dockerd 就是docker daemon,类似server。侦听Docker API请求,管理Docker对象,实际的docker run之类的命名是在docker daemon里执行的。守护程序还可以与其它守护程序通信以管理docker服务。
    在这里插入图片描述

四、docker基本概念

  • 镜像仓库(repository):存放镜像的地方,仓库分为公(Docker Hub)有仓和私有仓(阿里云的私有仓或自己通过registry和harbor来搭建的)
  • 镜像(image):镜像好比一个模板,通过这个模板创建容器
  • 容器(container):镜像通过run命令运行起来后就会产生容器,每个容器都是Linux的一个进程,也可以把容器看成是一个独立的Linux系统

五、docker镜像分层机制

  几乎所有镜像都是通过一个底层镜像(base image)构建而来,这个底层镜像就是引导文件系统(bootfs),bootfs主要包涵引导加载器(bootloader)和内核(kernel),可以简单理解这个底层镜像就是一个简易版的linux系统。容器和镜像的最主要区别就是容器加上了一个顶层,最顶层为读写层,除顶层外其他的都是读层。每一层都包括了一个指向父层的指针。如果一个层没有这个指针,说明它处于最底层。dockerfile由多条指令构成,Dockerfile中的每一条指令都会对应于Docker镜像中的每一层/var/lib/docker/containers/<id>目录下可以找到容器顶层,<id>就是一个可读层的id。这个目录下的文件大多是运行时的数据,比如说网络,日志等等。
在这里插入图片描述

六、为什么docker的centos镜像很小,只有200M多一点

  因为docker镜像只有rootfs和其他镜像层,共用宿主机的bootfs,各个版本的Linux系统bootfs是一样的,不同系统rootfs不一样。容器当引导加载器(bootloader)将内核加载到内存中后,会把临时创建的bootfs这个文件系统删掉,此时系统自检后会将rootfs只读改为读写,可以理解rootfs是一个包含了一般系统上的常见目录结构,类似于/dev, /proc, /bin等等以及一些基本的文件和命令。镜像中的rootfs比较简单,所以进入容器时一些linux命令也就没有。
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

docker原理详解 的相关文章

随机推荐

  • word文档中如何将软回车替换为硬回车

    word文档中如何将软回车替换为硬回车 手动换行符 是Microsoft word中的一种换行符号 又叫软回车 是以一个直的向下的箭头 表示的 通常出现在从网页复制到word的文字中 它在word中的代码是 l 这个是乘方的符号加字母L 不
  • [MRCTF2020]千层套路

    MRCTF2020 千层套路 题目地址 https buuoj cn challenges MRCTF2020 E5 8D 83 E5 B1 82 E5 A5 97 E8 B7 AF 解压压缩包 发现是密码竟然是压缩包名称 再根据题目 tn
  • 解决CondaHTTPError: HTTP 000 CONNECTION FAILED for url <https://mirrors.tuna.tsinghua.edu.cn/anaconda/

    背景 Anaconda 创建新的环境conda create n name 或者安装package conda install xxx 时总出错 CondaHTTPError HTTP 000 CONNECTION FAILED for u
  • C++ :JSON 解析系统(依赖库:jsonCpp)

    JSON JavaScript Object Notation JavaScript 对象表示法 定义 存储和交换文本信息的语法 类似 XML 比 XML 更小 更快 更易解析 属于轻量级的文本数据交换格式 使用 Javascript语法来
  • 4.4 目标检测YOLO-V3算法--主线二:卷积神经网络提取特征(百度架构师手把手带你零基础实践深度学习原版笔记系列)

    4 4 目标检测YOLO V3算法 主线二 卷积神经网络提取特征 百度架构师手把手带你零基础实践深度学习原版笔记系列 目录 4 4 目标检测YOLO V3算法 主线二 卷积神经网络提取特征 百度架构师手把手带你零基础实践深度学习原版笔记系列
  • 内网搭建NTP时间同步服务器(centos7)

    一 配置centos7本地源 root node2 cat etc redhat release CentOS Linux release 7 8 2003 Core root node2 timedatectl set timezone
  • C语言项目打造:开心消消乐无限魔力鸟「最新源码分享」

    一个类似气泡消消乐的VC 游戏源码 这里是消灭彩球 玩法有点像消消乐 编译游戏源码时需要LibUIDK控件 控制主要是用来生成界面图形的 skins在bin目录下 请记得编译后的文件也要在这个文件下 游戏自带音效资源 用到的资源文件比较完整
  • Keras实现LeNet网络参考

    模型论文地址 Yann LeCun 1998 的论文 Gradient Based Learning Applied to Document Recognition 用于MNIST数据集 模型结构说明 输入为32X32的灰度图像 第一层为6
  • 构造函数必须是public吗_谈谈 constructor 的private和public

    class TestClass http Http constructor http Http this http http 公有 私有于受保护的修饰符 默认为 public 在上面的例子里 我们可以自由访问程序里定义的成员 在TypeSc
  • mysql无法远程连接 Can‘t connect to MySQL server on ‘xxx.xxx.xxx.xxx‘ (10060 “Unknown error“)

    很多小伙伴在自己的服务器上面安装了mysql 然后发现自己把服务器中的mysql服务打开 然后防火墙也关掉了 但是就是连接不上 然后使用用户登录 密码也输入正确但是就是连不上 并且提示这个错误 这时候发现是因为host只设定了本地连接 需要
  • selenium4降级为selenium3

    find element by commands are deprecated Please use find element instead 针对selenium4弃用find element by 改用find element 用的实在
  • python环境搭建

    作者介绍 作者 小刘在C站 每天分享课堂笔记 一起努力 共赴美好人生 夕阳下 是最美的绽放 目录 一 python环境搭建 二 安装步骤 路径 步骤1 步骤2 步骤3 步骤4 编辑 三 是否成功安装python 四 注意事项 五 如何查看电
  • navicate的安装使用

    1 navicat概述 Navicat for MySQL 是管理和开发 MySQL 或 MariaDB 的理想解决方案 这套全面的前端工具为数据库管理 开发和维护提供了一款直观而强大的图形界面 官网 http www navicat co
  • C++入门AcWing讲义:字符串

    字符串是计算机与人类沟通的重要手段 闫学灿 字符与整数的联系 ASCII码 每个常用字符都对应一个 128 127的数字 二者之间可以相互转化 include
  • logback日志级别简介说明

    转自 logback日志级别简介说明 下文笔者将讲述logback的日志级别 如下所示 logback日志级别简介说明 logback有5种级别 其优先级依次如下所示 TRACE lt DEBUG lt INFO lt WARN lt ER
  • python使用字典暴力解析wifi密码

    前言 最近无wifi可用 搜到了很多高质量但是没有密码的WiFi 我在想应该可以用python调用常见的wifi字典包来暴力破解一下这些WiFi 也许可以成功 原理 使用pip install pywifi命令安装pywifi 在代码中设置
  • 基于Python3的接口自动化总结(一)——文件上传接口

    文件上传接口 api POST http host api import 接口入参 file 文件内容 import os import urllib3 import ast def import by rest self file pat
  • 原码,补码,反码的应用

    原码 补码 反码的应用 计算机专业的同学应该知道 课本中对原码反码补码的介绍大致是这样的几句话 正数 正数的原码是他的本身 正数的反码还是等于原码 正数的补码等于他的原码 负数 负数的原码等于该数值的二进制 最高位表示符号位 正数取0 负数
  • 微众银行马智涛:解放数据生产力,以金融科技助力数字经济发展|数字思考者50人...

    钛媒体2022特别专题策划 数字思考者50人 探访中国50位独具代表的数字化思考者 我们理解的 TechThinker 涵盖了中国数字化浪潮中的技术践行者 政策制定者与投资决策者 在这场长达10年的乘风破浪中 我们每个人都在分享技术进步的果
  • docker原理详解

    一 docker简介 docker是一个虚拟环境容器 可以将你的开发环境 代码 配置文件等一并打包到这个容器中 并发布和应用到任意平台中 docker容器和虚拟机都有虚拟隔离的特性 所以一般都会拿虚拟机和docker容器作比较 二 dock