Docker八股总结

1. 容器和虚拟机的区别

  • 传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。
  • 容器是一个应用层抽象,用于将代码和依赖资源打包在一起。多个容器可以在同一台机器上运行,共享操作系统内核,但各自作为独立的进程在用户空间中运行 。与虚拟机相比, 容器占用的空间较少(容器镜像大小通常只有几十兆),瞬间就能完成启动 。
  • 虚拟机 (VM) 是一个物理硬件层抽象,用于将一台服务器变成多台服务器。管理程序允许多个 VM 在一台机器上运行。每个 VM 都包含一整套操作系统、一个或多个应用、必要的二进制文件和库资源,因此占用大量空间 ,而且 VM 启动也十分缓慢 。

2. docker的优势

  • 快速构建、部署和扩展应用程序。
  • 提供了隔离的运行环境,确保应用程序在不同环境中的一致性。
  • 节省资源,多个容器可以在同一物理机上共享操作系统内核。
  • 支持持续集成和部署,使应用程序的交付更加可靠和可重复。

3. docker的组成部分

3.1 镜像

  • Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。 镜像不包含任何动态数据,其内容在构建之后也不会被改变。
  • 其设计为分层存储的架构 ,镜像构建时,会一层层构建,前一层是后一层的基础。每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层。
  • 分层存储的特征还使得镜像的复用、定制变的更为容易。甚至可以用之前构建好的镜像作为基础层,然后进一步添加新的层,以定制自己所需的内容,构建新的镜像。

3.2 容器:镜像运行时的实体

  • 容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间。镜像使用的是分层存储,容器也是如此。容器存储层的生存周期和容器一样,容器消亡时,容器存储层也随之消亡。因此,任何保存于容器存储层的信息都会随容器删除而丢失。
  • 容器容器存储层要保持无状态化,不能向其存储层内写入任何数据。所有的文件写入操作,都应该使用数据卷(Volume)、或者绑定宿主目录,在这些位置的读写会跳过容器存储层,直接对宿主(或网络存储)发生读写,其性能和稳定性更高。数据卷的生存周期独立于容器,容器消亡,数据卷不会消亡。因此, 使用数据卷后,容器可以随意删除、重新 run ,数据却不会丢失。

3.3 仓库:集中存放镜像文件的地方

  • 一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本

3.4 数据卷 与 数据卷容器

  • 二者区别:Docker数据卷是直接映射到宿主机文件系统的目录,而数据卷容器是一个专门用于管理数据卷的容器。
  • 数据卷类似于数据库的持久化,完全独立于容器的生命周期,可以将docker容器内的数据保存进宿主的磁盘中
  • 特点:
    • 可在容器间共享和重用数据
    • 卷中的更改可以实时生效
    • 卷中的更改不会影响镜像
    • 卷的生命周期一直持续到没有容器使用他为止
  • 数据覆盖问题:
    • 如果挂载一个空的数据卷到容器中的一个非空目录中,那么这个目录下的文件会被复制到数据卷中。
    • 如果挂载一个非空的数据卷到容器中的一个目录中,那么容器中的目录中会显示数据卷中的数据。如果原来容器中的目录中有数据,那么这些原始数据会被隐藏掉。
  • 数据卷的使用场景
    • 在多个容器之间共享数据,多个容器可以同时以只读或者读写的方式挂载同一个数据卷,从而共享数据卷中的数据。
    • 当宿主机不能保证一定存在某个目录或一些固定路径的文件时,使用数据卷可以规避这种限制带来的问题。
    • 当你想把容器中的数据存储在宿主机之外的地方时,比如远程主机上或云存储上。
    • 当你需要把容器数据在不同的宿主机之间备份、恢复或迁移时,数据卷是很好的选择。

4. dockerfiles

  • Dockerfile 是一个文本文件,其内包含了一条条的指令(Instruction),用于构建镜像。每一条指令构建一层镜像,因此每一条指令的内容,就是描述该层镜像应当如何构建。
  • dockerfile 用于指示 docker image build 命令自动构建Image的源代码,是纯文本文件
  • 执行流程:
    • dockers从基础镜像运行一个容器
    • 执行一条指令并对容器做出修改
    • 执行类似docker commit的操作提交一个新的镜像层
    • docker在基于刚提交的镜像运行一个新容器
    • 执行dockerfile中的下一条指令知道所有指令都执行完毕

5. docker的隔离机制

5.1 namespace

  • 借助Linux内核技术namespace来做隔离。包括多个命名空间:
    • PID namespace,每个容器都有自己的进程ID空间,使得容器内的进程无法看到主机上的其他进程;
    • mount namespace,每个容器都有自己的文件系统,使得容器内的文件系统呀主机上的文件系统分离;
    • network namespace,每个容器都有自己的网络接口和IP地址;
    • UTS namespace,每个容器都有自己的主机名和域名

5.2 Cgroups

  • Cgroups(Control Groups) 是 linux 内核提供的一种机制, 这种机制可以根据需求把一系列系统任务及其子任务整合(或分隔)到按资源划分等级的不同组内,从而为系统资源管理提供一个统一的框架。
    • 简单说, cgroups 可以限制、记录任务组所使用的物理资源。
    • 本质上来说, cgroups 是内核附加在程序上的一系列钩子(hook),通过程序运行时对资源的调度触发相应的钩子以达到资源追踪和限制的目的。
  • 用途:
    • Resource limitation: 限制资源使用,例:内存使用上限/cpu 的使用限制
    • Prioritization: 优先级控制,例: CPU 利用/磁盘 IO 吞吐
    • Accounting: 一些审计或一些统计
    • Control: 挂起进程/恢复执行进程

在这里插入图片描述

5.3 File System(共享)

  • 文件系统,docker使用联合文件系统(UnionFS)来创建容器的文件系统,联合文件系统允许docker将多个文件系统挂载到同一个目录下,形成一个统一的文件系统,这样docker容器可以共享操作系统的文件系统,并且可以在容器内创建和修改文件,而不会影响到其他容器和主机

6 docker网络

6.1 bridge模式

  • 容器IP独立。当docker进程启动时,会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的docker容器会连接到这个虚拟网桥上。从docker0子网中分配一个ip给容器使用,并设置docker0的ip地址为容器的默认网关。每个容器的ip地址不固定,根据容器启动的顺序一次递增。
  • 此模式下会为每个容器分配network namespace、设置ip等,并将一个主机上的docker容器连接到一个虚拟网桥上

6.2 host模式

  • 容器将不会虚拟出自己的网卡,配置自己的IP,而是使用宿主机的IP和端口,此时在run容器时,无法指定映射端口(即容器暴露出哪个端口,就需要访问宿主机哪个端口进行访问,如果多个容器端口出现冲突,则端口号递增)
  • 容器不会获得一个独立的network namespace,而是和宿主机共用一个network namespace

6.3 container模式

  • 新创建的容器和指定的一个容器共享IP和端口范围(如果两个容器暴露的端口一致,则会冲突报错,主容器关闭后,从容器网络配置失效)
  • 两个容器共享一个network namespace,而不是和宿主机共享,两个容器的进程可以通过lo网卡设备通信。但两个容器其他的如文件系统、进程列表等还是隔离的。

6.4 none模式

  • 此模式下docker容器有自己的network namespace,但是并不为docker容器进行任何网络配置,只有lo回环网络,没有其他网卡,此模式拥有所有的端口。封闭的网络能很好的保证容器的安全性。

6.5 自定义网络

  • docker network create 网络名称
  • docker run -d -p 8081:9090 --network 网络名称 --name abc
  • docker容器只能通过ip ping通 ,ping服务名ping不通

7. docker容器编排

  • Docker容器编排是指通过自动化管理和协调多个Docker容器的过程。常见的Docker容器编排工具包括Docker Compose、Docker Swarm和Kubernetes。
    • Docker Compose是一个用于定义和运行多个容器的工具。它使用一个YAML文件来配置应用程序的服务、网络和卷,并可以通过简单的命令来启动、停止和管理多个容器。
      • Compose 通过一个配置文件来管理多个Docker容器,在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器,非常适合组合使用多个容器进行开发的场景。
    • 核心组成: 1. 文件:docker-compose.yaml 2. 要素:service project
    • 步骤:
      • 编写dockerfile文件定义各个微服务应用并构建出对应的镜像
      • 使用docker-compose.yaml定义出一个完成的业务单元
      • 执行dockers-compose up命令上线服务
    • Docker Swarm是Docker原生的容器编排和集群管理工具。它可以将多个Docker主机组合成一个虚拟的Docker集群,并自动分配和管理容器。
    • Kubernetes是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。它提供了集群管理、服务发现、负载均衡和自我修复等功能。
  • 注意:微服务在配置redis和mysql时应使用容器名称进行访问,防止docker容器宕机、重启ip地址改变导致微服务连接数据库失败

8. Docker注册表

  • Docker注册表是用于存储和分享Docker镜像的中央存储库。Docker Hub是官方的公共注册表,还有其他私有注册表可供使用。
  • 如何创建一个私有的Docker注册表?
    • 可以使用Docker Registry或第三方工具,如Harbor、Nexus Repository Manager等,来搭建私有的Docker注册表。

9. 如何在docker容器中暴露端口

  • 可以使用Dockerfile中的EXPOSE指令来定义要暴露的端口,然后在运行容器时使用-p参数将容器端口映射到主机端口。

10. 如何扩展Docker容器?

  • 可以使用Docker Compose、Docker Swarm或Kubernetes进行容器的自动扩展和负载均衡。根据需要,可以根据应用程序的负载和资源使用情况增减容器实例。

11. 如何将已经存在的应用程序容器化?

  • 可以创建一个Dockerfile,并在其中定义容器所需的操作系统、依赖项和配置。然后,使用Docker构建工具构建镜像,并将应用程序运行在容器中。

12. 什么是Docker的跨主机网络?

  • Docker的跨主机网络是指通过配置和管理Docker容器在多个主机上的网络连接,以实现容器间的通信和负载均衡。常用的跨主机网络方案包括Docker Swarm Overlay网络和Kubernetes的Service和Ingress。

13. docker基础命令

  • 清理后台停止的docker:docker rm
  • 清理镜像文件:docker rmi
  • 查看本地镜像:docker images
  • 查看本地容器:docker ps -a
  • 查看镜像支持的环境变量:docker run image env
  • 本地镜像都存放在哪里:/var/lib/docker/目录下
  • docker的配置文件放在哪里:/etc/default/docker
  • 退出容器时候自动删除:docker run --rm -it ubuntu
  • 停止所有正在运行的容器:docker kill
  • 临时退出一个正在交互的容器的终端,而不终止它:ctrl+p,ctrl+c
  • 控制容器占用系统资源的份额:-c或–cpu-shares[=0],-m或-memory

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

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

相关文章

【MATLAB源码-第191期】基于matlab的4QAM系统相位偏移估计EOS算法仿真,对比补偿前后的星座图误码率。

操作环境: MATLAB 2022a 1、算法描述 1. 引言 M-QAM调制技术的重要性 现代通信系统追求的是更高的数据传输速率和更有效的频谱利用率。M-QAM调制技术,作为一种高效的调制方案,能够通过在相同的带宽条件下传输更多的数据位来满足这一需求。…

EasyImage2.0 简单图床开源 多功能 简单易用图床系统源码

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 支持API 支持仅登录后上传 支持设置图片质量 支持压缩图片大小 支持文字/图片水印 支持设置图片指定宽/高 支持上传图片转换为指定格式 支持限制最低宽度/高度上传 支持上传其他文件格…

突破“三个九”!离子阱量子计算再创新高

如果把量子计算比作一场球赛,Quantinuum无疑又打了一记漂亮的好球。实际上,结合今年春季在量子体积、逻辑量子比特和布线问题等方面的进展,这个团队已经接近于完成一场完美的比赛。 3月,Quantinuum的研究人员证明了QCCD架构的可扩…

Linux学习之路 -- PCB介绍 -- 进程优先级

1、什么是优先级? 进程需要某一种资源,而系统要通过特定的方式来决定谁先获得这些资源,而系统的做法就是给不同的进程安排不同的优先级。让优先级高的进程先享有一些资源。 2、为什么要有优先级 因为资源的缺乏,所以系统的才会…

C# 开源 工业相机库 调用海康相机 大恒相机

C# MG.CamCtrl 工业相机库 介绍一、使用案例二、使用介绍1、工厂模式创建实例2、枚举设备,初始化3、启动相机4、取图5、注销相机 三、接口1、相机操作2、启动方式3、取图4、设置/获取参数 介绍 c# 相机库,含海康、大恒品牌2D相机的常用功能。 底层采用回…

Django模型的字段选项

每一种字段类型都需要指定一些特定的参数。例如,CharField(及其子类)需要接收一个max_length参数,用以指定数据库存储VARCHAR数据时的字节数。 一些可选的参数是通用的,可以用于任何字段类型,下面具体介绍…

访问学者申请的成功经验

在申请成为访问学者时,经验是至关重要的。下面知识人网小编将介绍一些可以帮助您成功申请的经验和技巧。 首先,了解目标机构或大学的研究方向和需求是非常重要的。在申请之前,仔细研究该机构的学术项目、研究成果以及教授的专业领域&#xff…

C++笔试强训day2

目录 1.牛牛的快递 2. 最小花费爬楼梯 3.数组中两个字符串的最小距离 1.牛牛的快递 链接 单纯分类讨论&#xff0c;不加赘述。 详细代码&#xff1a; #include <iostream> using namespace std; #define ll long long int main() { float mg; char st; cin >>…

[C++][算法基础]最大公约数(欧几里得算法)

给定 n 对正整数 ,&#xff0c;请你求出每对数的最大公约数。 输入格式 第一行包含整数 n。 接下来 n 行&#xff0c;每行包含一个整数对 ,。 输出格式 输出共 n 行&#xff0c;每行输出一个整数对的最大公约数。 数据范围 1≤n≤, 1≤,≤2 输入样例&#xff1a; 2 3 …

C/C++基础----内存相关

malloc分配内存 用法 参数为要开辟内存的大小&#xff08;字节为单位&#xff09;返回值为void*,所以要强转一下语法&#xff1a;malloc()动态开辟20个字节的内存&#xff0c;代码&#xff1a;#include <iostream>using namespace std;int main() {int *a (int *) mal…

基于Hadoop的电商用户行为分析系统设计与实现的系统架构设计

采集层&#xff1a;利用Flume采集电商服务器端用户行为数据&#xff0c;把数据处理后发送至HDFS。 存储层&#xff1a;用户行为数据采集上传至HDFS存储&#xff0c; 导入到数据仓库Hive进行计算处理&#xff0c;分析结果保存至MySql数据库中。 计算层&#xff1a;根据分析需求建…

Vue2+ElementUI的el-table实现新增数据行与删除的功能

Vue2ElementUI的el-table实现新增数据行与删除的功能 文章目录 Vue2ElementUI的el-table实现新增数据行与删除的功能1. 代码2. 效果 1. 代码 TableIndex.vue如下 <template><div><div><el-button click"add" class"filter-item" pl…

通过ABAP程序自动创建信息对象-第二弹

前言 上一篇讲了通过ABAP程序去自动生成BW的ADSO模型&#xff0c;这一篇讲讲信息对象的自动生成&#xff0c; 一、实现效果 对于BW顾问来说&#xff0c;模型建完之后&#xff0c;就要开始选择用字段还是用信息对象进行建模&#xff0c;如果信息对象不存在呢&#xff0c;那么…

SpringBoot整合Activiti7——实战之放假流程(会签)

文章目录 代码实现部署流程启动流程填写放假通知任务投票审批xml文件 会签场景&#xff1a; 开始 - 填写放假通知单&#xff08;代理人&#xff09;- 投票审批&#xff08;指定多个参与人&#xff09;- 根据设置的完成条件后&#xff0c;全部参与人必须完成后&#xff0c;自动结…

小米su7全力提高产能,小米su7的这几个问题你都知道吗?车载随身wifi哪款最好用?公认最好的随身wifi格行随身wifi怎么样?

小米汽车官方近日回应网友关切&#xff0c;透露小米SU7非创始版交付进度。工厂正处于生产爬坡阶段&#xff0c;正全力提升产能和物料准备节奏&#xff0c;以加快交付效率。对于锁单后能否调整提车时间&#xff0c;小米汽车表示将与销售沟通协商。 当然关于网友们的问题也进行了…

条码的基础知识

条码的基础知识 条码&#xff1a;条码是由一组按一定编码规则排列的条、空符号组成&#xff0c;用以表示一定的字符、数字及符号组成的信息 一维码 Code 128 Code 128 是一种密度很高的字母数字代码系统&#xff0c;可对其进行双向扫描。此代码系统可编码整个 128 ASCII 字…

ERROR in [eslint] reorder to top import/first

情景再现&#xff1a;在react开发的时候&#xff0c;导入组件、函数时报错&#xff1a;Import in body of module; reorder to top import/first … 原因&#xff1a;在import语句前有变量声明 解决&#xff1a; 变量的声明&#xff0c;要放在import之后 // 错误示例 import {…

物联网网络传输,STM32和ESP32

2024.4.17 今天主要是记录一下我这个STM32F407和esp8266组成的互联网板子的一些例程运行心得&#xff0c; 下面这个例程是STM32发AT指令给esp8266&#xff0c;使得esp8266作为tcp client连接到我的手机热点&#xff0c;然后我用电脑连接wifi&#xff0c;打开tcp server&#x…

【CDN产品测评-笔记】探索云服务中的安全和性能增强功能

【CDN产品测评-笔记】探索云服务中的安全和性能增强功能 写在最前面1. DNS管理&#xff1a;核心的域名服务功能2. DDoS防护&#xff1a;构筑坚不可摧的防线3. Web防护&#xff1a;智能化的网络攻击防御4. BOT管理&#xff1a;精准识别与流量控制5. 加速服务&#xff1a;提升全球…

【动态规划 区间dp 位运算】3117. 划分数组得到最小的值之和

本文涉及知识点 动态规划 区间dp 位运算 LeetCode3117. 划分数组得到最小的值之和 给你两个数组 nums 和 andValues&#xff0c;长度分别为 n 和 m。 数组的 值 等于该数组的 最后一个 元素。 你需要将 nums 划分为 m 个 不相交的连续 子数组&#xff0c;对于第 ith 个子数组…