简单的docker学习 第2章docker引擎

news2024/9/21 19:08:59

第2章docker引擎

2.1Docker 引擎发展历程

2.1.1 首发版本架构

Docker 在首次发布时,其引擎由两个核心组件构成:LXC(Linux Container)与 Docker Daemon。不过,该架构依赖于 LXC,使得 Docker 存在严重的问题:

  • 依赖于外部工具,对 Docker 来说,存在着巨大的生存风险

  • LXC 使得 Docker 无法实现跨平台

Docker Daemon 的“大而全”也带来了严重的问题:

  • 版本更新与功能扩展较难
  • 运行较慢,带来性能问题
  • Docker Daemon 运行出现问题,会直接影响容器的运行
  • 不符合软件哲学
2.1.2 Docker0.9 版本架构

​ 从 Docker0.8 版本开始,Docker 使用自研的 Libcontainer 工具替换了 LXC

2.1.3 Docker1.1 版本架构

​ 2017 年 7 月 OCI 基金会发布了两个规范(镜像规范与容器运行时规范)的 OCI1.0 版本。2016 年底发布的 Docker1.1 版本基本遵循了 OCI1.0 版本。从 Docker1.1 版本开始,Docker Daemon 中不再包含任何容器运行时代码,而是将容器运行时单独剥离了出来,形成了 Runc 项目。

2.2 Docker 引擎架构

Docker 引擎是用来运行和管理容器的核心软件,其现代架构由四部分主要组件构成:Docker Client,Dockerd、Containerd 与 Runc。

image-20240704145124659

2.2.1 Docker Client

​ Docker 客户端,Docker 引擎提供的 CLI 工具,用于用户向 Docker 提交命令请求。

2.2.2 Dockerd

​ Dockerd,即 Docker Daemon。在现代 Dockerd 中的主要包含的功能有镜像构建、镜像管理、REST API、核心网络及编排等。其通过 gRPC 与 Containerd 进行通信

2.2.3 Containerd

​ Containerd,即 Container Daemon,该项目的主要功能是管理容器的生命周期。不过,其本身并不会去创建容器,而是调用 Runc 来完成容器的创建。Docker 公司后来将 Containerd 项目捐献给了 CNCF(云原生基金会)

2.2.4 Runc

​ Runc,Run Container,是 OCI(开放容器倡议基金会)容器运行时规范的实现,Runc 项目的目标之一就是与 OCI 规范保持一致。所以,Runc 所在层也称为 OCI 层。这使得 Docker Daemon 中不用再包含任何容器运行时的代码了,简化了 Docker Daemon。Runc 只有一个作用—创建容器,其本质是一个独立的容器运行时 CLI 工具。其在 fork出一个容器子进程后会启动该容器进程。在容器进程启动完毕后,Runc 会自动退出。

2.2.5 Shim

​ Shim(垫片)是实现“Daemonless Container(无 Docker Daemon 与 Container Daemon容器)”不可或缺的工具,使容器与 Docker Daemon 解耦,使得 Docker Daemon 的维护与升级不会影响到运行中的容器。每次创建容器时,Containerd 同时会 fork 出 Runc 进程与 Shim 进程。当 Runc 自动退出之前,会先将新容器进程的父进程指定为相应的 Shim 进程。

除了作为容器的父进程外,Shim 进程还具有两个重要功能:

  • 保持所有 STDIN 与 STDOUT 流的开启状态,从而使得当 Docker Daemon 重启时,容器不会因为 Pipe 的关闭而终止。
  • 将容器的退出状态反馈给 Docker Daemon。

2.3Docker 引擎分类

​ 在安装 Docker 之前需要先了解 Docker 官方对其版本的分类。Docker 的版本分为大版本与小版本。

2.3.1 大版本

​ Docker 从大版本来说,分为三类:Moby、社区版 Docker-CE(Community Edition)和企业版 Docker-EE(Enterprise Edition)。

2.3.2 小版本

​ 从 v1.13.1 之后,Docker 的发布计划发生了变更,每个大版本下都出现了两个小版本 Edge 月版与 Stable 季版。不过,现在的官网中一般只能看到 Stable 版本。

2.4Docker 引擎的安装

​ Docker 可以安装在 Windows、Linux、Mac 等系统中,但生产环境下,服务器使用 Linux中的 CentOS 居多,所以下面就以 Docker 在 CentOS7 中的安装为例来学习 Docker 的安装。官网 https://docs.docker.com/engine/install/centos/中可以看到具体安装方式与安装步骤。

2.4.1 系统要求

​ 我们这里要安装的是 Docker CE 版,且要安装到 CentOS 之中。不过,对于安装 Docker的系统环境还是有要求的。

image-20240704145604166

​ 对于 CentOS 系统的安装主机,无论是传统架构还是 ARM 架构,要求处理器都是 64 位系统。

docker安装手顺地址 https://docs.docker.com/engine/install/centos/

image-20240704145626024

​ 并且 CentOS 要求是 7 及其以上版本

2.4.2 克隆并配置主机
  • 修改主机名:/etc/hostname
  • 修改网络配置:/etc/sysconfig/network-scripts/ifcfg-ens33
  • 查看当前主机版本: cat /etc/redhat-release
  • 查看是否为64位系统: uname -r
2.4.3 安装需要的包
  1. 务必配置阿里的yum源,这样安装Docker的速度就不会太慢

    # 关闭防火墙部分
    systemctl stop firewalld
    systemctl disable firewalld
    
    # 检查防火墙状态
    systemctl status firewalld
    
    # 1、备份备份官方的原yum源的配置
    mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
    
    # 2、下载Centos-7.repo文件
    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    
    # 注意:部分小伙伴可能没有安装wget,需要先安装wget,或者用下面的命令下载repo文件
    curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    
    # 3、清除yum缓存
    yum clean all
    
    # 4、缓存阿里云源
    yum makecache
    
    # 5、测试阿里云源 
    yum list
    
  2. 卸载旧版本的Docker,旧版本的Docker程序被称作Docker或者Docker-engine,如果之前在系统中安装过,那么就卸载掉,当然连同依赖一起卸载了!

    yum remove docker \
    docker-client \
    docker-client-latest \
    docker-common \
    docker-latest \
    docker-latest-logrotate \
    docker-selinux \
    docker-logrotate \
    docker-engine-selinux\
    docker-engine
    
  3. 安装yum-utils,它提供了yum-config-manager,同时安装device-mapper-persistent-datalvm2,这些是Docker设备映射器(devicemapper)存储驱动程序所必需的。

    yum install -y yum-utils device-mapper-persistent-data lvm2
    

    image-20240705101501325

  4. 使用一下命令来搭建稳定的仓库

    yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    

    image-20240705101439365

  5. 安装 docker,以及 docker-cli,安装时间稍长,请耐心等待

    yum install docker-ce docker-ce-cli containerd.io
    

    image-20240705101804773

    如果想安装特定版本的Docker CE,可以先列出所有可用的版本,然后选择特定版本进行安装:

    yum list docker-ce --showduplicates | sort -r
    # 下载固定版本docker eg: yum install docker-ce-3:26.1.4-1.el7 docker-ce-cli-1:26.0.4-1.el7 containerd.io
    yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
    

    请将<VERSION_STRING>替换为你想安装的具体版本号。

    image-20240705102848885

    image-20240705103225778

  6. 查看安装版本信息

    docker version
    

    image-20240705104223134

2.5 Docker 引擎的启停

2.5.1 启动docker

Docker 是以服务的形式运行在系统中,所以使用 systemctl 来对其进行各种操作。启动docker

systemctl start docker
2.5.2 启动成功测试

为了验证 Docker 安装启动成功,一般有两种方式:

  • docker version

    image-20240705104450447

  • 运行hello-world镜像,可以通过运行 hello-world 镜像来验证 Docker 的安装启动成功。当然,当前宿主机中是不存在 hello-world 镜像的,其会首先下载,然后才会运行。如果看到如下输出,则说明 Docker 已经安装启动成功了。如果看不到如下结果,一般都是因为下载超时,需要先完成以下“配置国内加速器”步骤。

    image-20240705104716999

    网络连接失败,后续配置国内加速器再进行尝试

2.5.3 Docker 重启
systemctl restart docker
2.5.4 查看 Docker 状态
systemctl status docker	

image-20240705105012796

2.5.5 开机自启动 Docker

通过 systemctl start docker 命令仅可以开启 Docker 服务,但每次开机后,都需要开启。可以通过systemctl enalbe docker命令将Docker服务设置为开机自启动服务,即开机后Docker服务无需再开启,其本身就是开启状态。

systemctl enable docker

此时再查看 Docker 的状态,可以看到原来的 disabled 变为了 enabled,说明当前 Docker服务已经变为了开机自启动了

image-20240705105516616

2.5.6 Docker 停止
systemctl stop docker
2.5.7 关闭开机自启动
systemctl disable docker

2.6配置国内加速器

国内镜像中心常用的为阿里云与网易云。在本地 Docker 中指定要使用的国内加速器地址后,就可以直接从国内镜像中心下载镜像了。

2.6.1 配置阿里云加速器

若要配置阿里云加速器,必须首先要有阿里云的账号。登录阿里云后,打开阿里云的容器镜像服务页面 https://cr.console.aliyun.com ,然后找到如下页面,执行相应的命令。

image-20240705110046325

mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://xxxxxxxx.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker

执行之后再次执行 docker run hello-world

image-20240705110425429

网易云加速器,不用注册账号信息,直接修改registry-mirrrors地址即可

{
  "registry-mirrors": ["https://hub-mirror.c.163.com"]
}
2.6.2 配置境外镜像
# 使用难兄难弟俄罗斯镜像
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://docker.m.daocloud.io","https://huecker.io","https://dockerhub.timeweb.cloud","https://noohub.ru"]
}
EOF

systemctl daemon-reload
systemctl restart docker

2.7 Docker 引擎的卸载

对 Docker 的卸载分为三大步

  • yum 移除,通过 yum remove 移除 docker 安装的四个组件

    yum remove docker \
    docker-client \
    docker-client-latest \
    docker-common \
    docker-latest \
    docker-latest-logrotate \
    docker-selinux \
    docker-logrotate \
    docker-engine-selinux\
    docker-engine
    
  • rm 两个目录

    通过 rm –rf 删除/var/lib 下的 docker 与 containerd 两个目录。这两个目录中存放着镜像、容器、数据卷,它们在前面删除时不能被自动删除,需要手动删除

    rm -rf /var/lib/docker
    rm -rf /var/lib/containerd
    
  • 还有一些自己编辑、定义的配置文件,需要自己手工删除

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

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

相关文章

第一百八十六节 Java XML教程 - Java DOM编辑

Java XML教程 - Java DOM编辑 属性 以下代码显示如何向元素添加属性。 import java.io.StringWriter;import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.OutputKeys; import javax.xml.transform.Tr…

【OS】AUTOSAR OS Spinlock实现原理(下篇)

目录 3.1 Spinlock配置代码 3.1.1 Os_SpinlockConfigType_Tag 3.1.2 Os_LockConfigType_Tag 3.1.3 不同配置参数对配置代码生成的影响 3.2 Os_GetSpinlock详解 3.2.1 Os_SpinlockIsNotLockedLocal 3.2.2 Os_SpinlockIsLockOrderValid 3.2.3 Os_SpinlockSuspendByMethod…

bias偏置项(bias term)

bias偏置项&#xff08;bias term&#xff09;或者称为截距项&#xff08;intercept term&#xff09; 简称b 它其实就是函数的截距&#xff0c;与线性方程y wx b中的b的意义是一样的。 在y wx b中&#xff0c;b表示函数在y轴上的截距&#xff0c;控制着函数偏离原点的距…

食品安全知识竞赛规则及流程方案

活动简介 本届竞赛以“反食品浪费”为主线&#xff0c;在专业知识比拼基础上&#xff0c;融入了食物贮存方法、标签标识认知等生活化场景&#xff0c;将科普知识与日常生活紧密结合&#xff0c;更深入地践行“以赛促学 以学促行”的比赛口号&#xff0c;旨在通过大学生群体带动…

vue3集成LuckySheet实现导入本地Excel进行在线编辑,以及导出功能

第一步&#xff1a;克隆或者下载下面的代码 git clone https://github.com/dream-num/Luckysheet.git第二步&#xff1a;安装依赖 npm install npm install gulp -g 第三步&#xff1a;运行 npm run dev效果如下图所示 第四步&#xff1a;打包 打包执行成功后&#xff0c;…

萤石摄像头更换wifi操作记录

手机和摄像头在同一wifi下下载萤石云视频app长按reset,蓝灯常闪app中配置WiFi&#xff0c;要输入设备验证码&#xff0c;在设备上有配置完就可以了 H264编码修改方法https://open.ys7.com/bbs/article/14

️ LangChain +Streamlit+ Llama :将对话式人工智能引入您的本地设备(下篇)

引言&#xff1a;种下一棵树最好的时间是十年前,其次是现在 书接上回&#xff1a;将对话式人工智能引入您的本地设备成为可能CSDNhttps://mp.csdn.net/mp_blog/creation/editor/140865426 目的&#xff1a;在这个大模型横行的时候&#xff0c;我们常用电脑如何开展大模型的工作…

抽帧剪辑手法有哪些有什么好处 抖音抽帧补帧能不能提高作品原创度 抽帧剪辑可以防止被判搬运么 会声会影视频制作教程 会声会影中文免费下载

如果作品过不了原创检测&#xff0c;那么建议你一定要学会抽帧剪辑&#xff0c;这是目前最有效的防搬运检测手段。精细化地抽帧、补帧&#xff0c;可以轻松通过视频平台的原创和版权检测&#xff0c;避免视频被判搬运。在抖音或快手上进行短视频创作时&#xff0c;‌抽帧和补帧…

JS+CSS案例:JS+CSS 实现漂亮时尚的样式表切换(换肤)功能

切换样式表可能有人不理解&#xff0c;但说到网站换肤&#xff0c;大概率就很多人都明白了。因为它是很多网站都已经有的功能了&#xff0c;最常见的就是很多网站的关灯模式。本文&#xff0c;就给大家分享一个我自己网站上使用的样式表切换的方案。 案例效果 目录结构 文件准…

Ubuntu22.04 解决fabric 安装gradle构建的Java合约超时

问题 fabric安装gradle构建的Java合约时遇到合约代码编译超时问题&#xff0c;如下&#xff1a; $ peer lifecycle chaincode install cp.tar.gz Error: chaincode install failed with status: 500 - failed to invoke backing implementation of InstallChaincode: could …

宝塔面板上,安装rabbitmq

废话不多说&#xff0c;直接上干货&#xff01; 第一步&#xff1a;登录宝塔账号&#xff0c;在软件商店里搜索 第二步&#xff1a;点击设置 第三步&#xff1a;已经完成了&#xff0c;还看啥&#xff01;

3D魔方lua核心脚本制作

制作不易,请好好欣赏 U→R→F→D→L→B 废话不多说,上脚本 --魔方基本运行程序 --星空露珠优化脚本lua --主核心来自分享 --666 --[=[ #G4=I 1 # 2-----------2------------1 # | U1(0) U2(1) U3(2) | # …

Java:Thread类

Thread的常见构造方法 Thread的常见属性 ID 是线程的唯一标识,不同线程不会重复名称是在使用各种调试工具时会用到的状态表示线程当前所处的情况优先级高的线程理论上来说更容易被调度到关于后台线程,需要记住:JVM会在一个进程的所有非后台线程结束后,才会结束运行是否存活,即r…

基于python做镜像文件

用python制作网页镜像文件 第一步&#xff1a;初始化操作&#xff0c;用可用镜像源&#xff1a; mkdir -p /etc/docker tee /etc/docker/daemon.json <<-EOF { "registry-mirrors": ["https://hub.docker-alhk.dkdun.com/"] } EOF systemctl daemon…

攻击者劫持 Facebook 页面用于推广恶意 AI 照片编辑器

近日&#xff0c;有攻击者劫持了 Facebook 上的网页&#xff0c;诱骗用户下载一个合法的人工智能&#xff08;AI&#xff09;照片编辑器&#xff0c;但实际上他们真正下载的却是一个专门用以盗取用户的凭据信息窃取程序。 趋势科技的研究人员发现的这一恶意广告活动利用了人工…

ModuleNotFoundError: No module named ‘tqdm‘

报错信息&#xff1a; tqdm是一个快速、可扩展的Python进度条库&#xff0c;用于展示迭代器的长循环执行进度。 解决&#xff1a;通过以下命令安装 使用conda命令安装 conda install tqdm使用pip安装&#xff1a; pip install tqdm

临床数据科学中有关试验设计的四个关键要素

临床数据科学是现代医学研究中不可或缺的组成部分&#xff0c;通过科学的方法和统计分析工具来揭示医疗数据背后的规律和真相。试验设计是临床数据科学的核心环节&#xff0c;直接关系到研究结果的可靠性和科学性。 在过去几十年中&#xff0c;随机临床试验&#xff08;Randomi…

CNN卷积网络实现MNIST数据集手写数字识别

步骤一&#xff1a;加载MNIST数据集 train_data MNIST(root./data,trainTrue,downloadFalse,transformtransforms.ToTensor()) train_loader DataLoader(train_data,shuffleTrue,batch_size64) # 测试数据集 test_data MNIST(root./data,trainFalse,downloadFalse,transfor…

Project #0 - C++ Primer

知识点 1.pragma once C和C中的一个非标准但广泛支持的预处理指令&#xff0c;用于使当前源文件在单次编译中只被包含一次。 #pragma once class F {}; // 不管被导入多少次&#xff0c;只处理他一次2.explicit C中的一个关键字&#xff0c;它用来修饰只有一个参数的类构造函…

遇到突发事故,您是否能够应对自如?

近期发生的全球性大规模系统技术故障为我们敲响了警钟——仅仅依赖一朵公共云服务存在其固有的脆弱性。全球多地视窗系统因一款安全软件更新而宕机&#xff0c;出现“蓝屏”&#xff0c; 航空、医疗、传媒、金融、零售、物流等多个行业均受影响。这一事件凸显了对强大、多元化云…