【Docker】Docker学习01 | 什么是docker?

news2024/11/15 9:04:09

本文首发于 ❄️慕雪的寒舍

因为本人没有学习过docker,虽然部署过很多镜像,但是对于docker底层的实现一概不知。趁学习一个新项目的契机,将docker的相关概念了解清楚。

安装docker的教程请查看 Linux主机安装docker。

如果你想和我一起学习docker,请关注本站的编程学习/Docker学习专栏。后续和docker概念相关的内容都会放到这个分类里面,而折腾docker镜像和开源软件的内容则保留在编程学习/Docker真好玩中。

1.docker和虚拟机的区别

1.1 简述

虚拟机和Docker都是在原有主机的基础上添加了抽象层,通过这些抽象层来实现特定的功能。

这就好比C语言中的文件操作实际上封装了Linux和Windows的文件系统调用接口。这一层封装就是一层抽象层,通过封装,C语言实现了跨平台的统一文件函数接口。

image.png

虚拟机:虚拟机是通过Hypervisor(虚拟机管理系统)来虚拟出网卡、CPU、内存等虚拟硬件,再在其上方建立一个虚拟机。每个虚拟机都有独立的操作系统,都有自己独立的系统内核。

docker容器:容器是利用linux下的namespace,将文件系统、进程、网络、设备等资源进行一定隔离,再使用cgroup对容器权限、资源进行限制(比如限制某个容器只能占用最多512MB的内存),最终让容器之间互不影响,容器无法影响宿主机。这些操作都是由宿主机的Docker Engine来实现和管理的。

image.png

上图源自 微软官方文档

1.2 什么是GuestOS

GuestOS(Guest Operating System)是指在虚拟化环境中运行的操作系统。

在虚拟化技术中,物理服务器上的虚拟化软件(如VMware、KVM、VirtualBox等)可以创建一个或多个虚拟的计算环境,每个环境都可以独立运行一个操作系统,这个操作系统就是 GuestOS。

1.3 什么是namespace

好比C++中的namespace,Linux内核中的namespace可以限制某个进程能“看到”的资源。

它是一种将全局系统资源划分为独立单元的资源隔离方法,对文件系统、进程、网络、设备等资源进行隔离,使得在不同命名空间中运行的进程看到的资源是不同的,彼此之间相互隔离,容器内的进程认为它们运行在独立的环境中,而不会看到主机上其他容器的影响。

1.4 什么是cgroup

cgroup是一种用于限制和隔离一个或一组进程对系统资源使用的机制,将一组进程组织在一个控制组中,为这个控制组分配特定的资源限制与优先级,包括 CPU资源、内存、网络等。确保容器在共享主机上合理利用系统资源,避免资源竞争和过度使用。

2.docker的优势

docker因自身的特性,相比虚拟机有很多优势:

  1. 运行在容器上的Docker的程序,直接使用的都是宿主机的硬件资源,而且Docker比虚拟机有更少的抽象层,因此在cpu、内存、利用率上,Docker将会在效率上具有更大的优势。(效率高)
  2. Docker直接利用宿主机的系统内核,避免了虚拟机启动时所需要的系统引导时间和操作系统运行的资源消耗,利用Docker能够在几秒钟之内启动大量的容器,是虚拟机无法办到的。快速启动低资源消耗的优点,使Docker在弹性云平台自动运维系统方面具有很好的应用场景。(速度快)
  3. 容器的启动时间是秒级的,大量节约开发、测试、部署的时间。而且因为Docker以统一的方式进行操作和部署,更方便自动化持续集成/持续部署。
  4. 还有一个非常关键的点,就是Docker能够高效地部署和扩容,Docker容器几乎可以在任意平台上运行,包括虚拟机、物理机、公有云、私有云、个人电脑、服务器等,这种兼容性,可以让用户把一个应用程序从一个平台直接迁移到另外一个平台。(部署简单)

但是,虚拟机的安全性比容器好一些,docker与宿主机共享内核、文件系统等资源,更有可能对其他容器、宿主机造成影响。

3.docker的基本组成

3.1 简述

docker包括客户端docker client、服务端docker host,以及远程镜像仓库docker registry。

平时我们使用的docker命令(包括docker-compose工具),其实操作的都是 docker cli 客户端,它的作用是把这些命令发送给本地的 docker.sock 服务端,让服务端来执行docker容器的创建、运行、维护等操作。

  • 镜像 Images:可以认为是一个docker构建环境的系统模板,镜像中包括相关的依赖项、项目文件、如何开始运行等信息。镜像是由一层一层的文件系统构建而成的,每一层文件系统是下一层的增量变化。每个镜像都是静态的,被创建后就无法改变;
  • 容器 Container:容器是某个正在运行的镜像,是镜像的实体。同一个镜像可以创建出多个不同的容器,且不同容器之间通过Linux内核的namespace和cgroup等技术实现相互隔离,拥有自己独立的文件系统、进程地址空间、网络空间等。

有了镜像,我们可以在不同的Linux主机上,创建容器来统一项目运行的环境,避免在不同系统上安装项目依赖项的繁琐。这可以降低项目部署的难度,提高效率。同时,让项目在容器中运行,也能减少对宿主机的影响,可以避免出现两个不同的项目依赖项冲突而无法运行的情况。

本项目使用docker,就是为了实现不同机器上运行环境的统一,毕竟整个项目涉及到了很多依赖项,如果一个一个安装的话,较为麻烦且容易出错。

image.png

3.2 docker镜像是什么?

Docker 镜像 是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像 不包含 任何动态数据,其内容在构建之后也不会被改变。

我们都知道,操作系统分为 内核用户空间。对于 Linux 而言,内核启动后,会挂载 root 文件系统为其提供用户空间支持。而 Docker 镜像Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:18.04 就包含了完整的一套 Ubuntu 18.04 最小系统的 root 文件系统。

Docker镜像是由多层的文件系统构建而成的,每一层文件系统是下一层的增量变化。对于Ubuntu/CentOS这种基础镜像而言,它们一般都只有一层。但对于基于这两个镜像构建的其他Docker镜像,则会出现多层,具体取决于镜像构建使用的DockerFile。

3.3 docker容器是什么?

容器是镜像的实体。

容器在运行的时候,会在镜像文件的只读层上方创建一个读写层,并在这个读写层中进行文件的读写和运行。同时容器也可以暴露出端口,或与宿主机的某个文件/文件路径绑定,来对外提供网络服务,和数据的持久化。

4.docker run的运行过程

当我们执行 docker run 命令创建一个容器的时候,会执行如下操作。

image.png

当本机找不到指定的镜像时,会自动去docker hub或者预先配置好的docker镜像源仓库中,查询这个镜像并进行下载(查询不到则提示“镜像不存在”)。找到指定的镜像后,会自动执行docker pull操作将镜像下载至本地,随后以该镜像,按docker run命令给定参数创建容器并运行。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

内存管理篇-02内存硬件电路和接口

1. 内存硬件实现机制 通过D触发器构建寄存器和内存的结构对比,这里主要先表达sram复杂,dram简单。 2. sram和ddr sdram结构图对比 主要是想对比sram和dram在和CPU连接过程的差异。sram需要的地址线较多,dram需要的较少,但是需要多次发送&…

如何用Python进行民宿数据分析?可视化工具应用教程

🎓 作者:计算机毕设小月哥 | 软件开发专家 🖥️ 简介:8年计算机软件程序开发经验。精通Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等技术栈。 🛠️ 专业服务 🛠️ 需求定制化开发源码提…

微信小游戏授权问题

微信小程序获取用户相关信息的接口,如wx.getUserCloudStorage,报错:please go to mp to announce your privacy usage。 需要在微信公众平台设置用户隐私保护。

CentoOS 7下配置并部署 DataX 3.0与DataX-web

数据同步框架 DataX DataX本身作为离线数据同步框架,采用 Framework plugin架构构建。将数据源读取和写入抽象成为Reader/ Writer插件,纳入到整个同步框架中。 Reader: Reader为数据采集模块,负责采集数据源的数据,将数据发送给 Framework。 Writer: Writer为数据写入模块,负责…

一种间距可调式在线测宽仪!

关键词:在线测宽仪,测宽仪,板材测宽仪,板材 我们都知道,在板材生产线中,为了应对多方市场需求,生产的板材规格众多,甚至宽度范围相差甚大。而现在应用于产线的在线测宽仪多为光学测量方式,这也就意味着&…

Nginx: 配置项之access模块、auth_basic模块、auth_request模块

access模块 用于限定特定IP或者是网段进行访问的,从而实现Nginx的一个访问权限控制这个模块,它仅能够针对IP或者网段的一个访问 1 )指令集 1.1 allow 语法结构: allow address | CIDR | UNIX | all all 是放行所有address 可以是 ip 地址…

TCP的连接建立及报文段首部格式

粘包问题: 原因:TCP流式套接字;数据与数据之间没有边界;导致可能多次的数据粘到一起。 解决办法: 规定一些数据与数据之间的间隔符,如:"\aa\", "\r\n"。指定要发送的数据…

如何使用ssm实现游戏攻略网站的设计与实现+vue

TOC ssm052游戏攻略网站的设计与实现vue 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大,随着当前时代的信息化,科学化发展,让社会各行业领域都争相使用新的信息技术,对行业内的各种相关数据进行科学化,规范…

探究短信里的短链接是如何实现的

简介 我们日常在收短信的时候,会经常发现,他们的短信里的跳转链接,都是非常短非常短的,这是为什么呢? 因为现在短信新规出来,是按字数收费的,而不是按条。比如腾讯云短信新规,70字…

原生js中的防抖节流笔记

防抖,单位时间内,频繁触发,只执行最后一次 效果演示 优化前,不断触发,浪费性能 优化后,只在指定时间内触发 演示代码 import debounce from "/node_modules/lodash-es/debounce.js"; const oBox docu…

专业养生调理保健传承者——五指生望京店开业送健康

2024年8月22日,即处暑时节,五指生望京店盛情开业!在这个暑意渐消的美好时节,望京店希冀为更多尊贵生命带来健康。 五指生成立于2001年,作为“全国五星级保健服务机构”,曾先后获得“首都文明单位”“北京市…

Java学习Day34:图书管理小项目

搭建过程 1.根据需求设计数据库 概念设计:使用ER图等工具设计数据库概念模型,明确实体、属性、关系。逻辑设计:将概念模型转换为数据库表结构,确定主键、外键、索引等。物理设计:根据数据库管理系统的特性进行物理存…

【运维】docker搭建portainer

1.拉取镜像 并 启动容器 1.1 拉取镜像 docker pull 6053537/portainer-ce1.2 启动容器 docker run -d --restartalways --name"portainer" -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock 6053537/portainer-ce2.访问地址 ip地址9000端口 密码&…

True XML cookbook

打开题目 看到登录口 随便输入admin&#xff0c;123456&#xff0c;然后抓包试一下 先按原来那道题的payload进行测试&#xff0c;payload和结果如下&#xff1a; <?xml version"1.0" ?> <!DOCTYPE llw [ <!ENTITY file SYSTEM "file:///flag&…

Linux驱动入门实验班——DAC模块驱动(附百问网视频链接)

目录 前言 一、 SPI数据结构 1.SPI设备驱动 2.SPI设备数据结构 二 、函数接口 1.spi_sync_transfer 2.spi_register_driver 三、DAC 1.数据格式 2.数据结构 四、源码 驱动 应用 课程链接 前言 在这里主要记录学习韦东山老师Linux驱动人入门实验班的笔记&#xff0…

计算机网络——HTTP与HTTPS协议

HTTP与HTTPS是应用层的协议。 目录 一、HTTP 二、HTTPS 三、HTTP与HTTPs对比 四、HTTP/1.0 HTT/1.1 HTTP/2有什么区别 五、HTTP常用请求方法&#xff1f;get/post区别&#xff1f; 六、HTTP的工作过程 七、HTTPS的工作过程 八、Cookie、Session、Token 一、HTTP 超…

【CAN总线测试】——CAN物理层测试

从0开始学习CANoe使用 从0开始学习车载测试 相信时间的力量 星光不负赶路者&#xff0c;时光不负有心人。 目录 1.最小通讯电压测试 2.最大通讯电压测试 3.显性位/隐性位输出电压测试 4.信号跳变沿测试 5.地偏移 6.终端电阻 1.7. CANH/CANL短路 1.8. CANH /GND短路 …

Verilog刷题笔记58

题目&#xff1a; Exams/2014 q3c 解题&#xff1a; module top_module (input clk,input [2:0] y,input x,output Y0,output z );parameter s03d000,s13d001,s23d010,s33d011,s43d100;always(*)begincase(y)s0:Y0x;s1:Y0~x;s2:Y0x;s3:Y0~x;s4:Y0~x;endcaseendassign z(y3b01…

Kafka运行机制(二):消息确认,消息日志的存储和回收,生产者消息分区

前置知识 Kafka基本概念https://blog.csdn.net/dxh9231028/article/details/141270920?spm1001.2014.3001.5501Kafka运行机制&#xff08;一&#xff09;&#xff1a;Kafka集群启动&#xff0c;controller选举&#xff0c;生产消费流程https://blog.csdn.net/dxh9231028/arti…

Verilog刷题笔记57

题目: Exams/2014 q3bfsm Given the state-assigned table shown below, implement the finite-state machine. Reset should reset the FSM to state 000. 解题&#xff1a; module top_module (input clk,input reset, // Synchronous resetinput x,output z );parameter…