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

news2024/9/25 21:28:47

第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/1981349.html

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

相关文章

人力资源杂志人力资源杂志社人力资源编辑部2024年第13期目录

看法_总编随笔 学会退步 齐向宇; 1 看法_热点聚焦 数说 7 司事 9 看法_热点聚焦_翻转 话题 “霸总”发言遭吐槽对职场年轻人多些体谅 8 看法_视界《人力资源》投稿&#xff1a;cn7kantougao163.com 养老保险改革及其对人事工作的启示 赵梓安; 12-13 做…

潘展乐速度!滴滴无车赔,叫车就是快

8月5日&#xff0c;滴滴网约车“快”乐大使潘展乐在男子4x100米混合泳接力比赛中以45秒92的优异成绩在最后一棒反超&#xff0c;中国队夺得金牌&#xff01;恭喜潘展乐在本届比赛中和队友一起站上冠军的领奖台&#xff0c;用团队金牌为自己庆生&#xff01; 为进一步提升用户叫…

三级等保测评如何顺利通过

三级等保认证&#xff0c;作为中国信息安全等级保护制度中的高级别认证&#xff0c;其标准之高、要求之严&#xff0c;在国内信息安全领域内堪称顶尖。根据《信息系统安全等级保护基本要求》&#xff0c;三级等保的测评内容覆盖了等级保护安全技术要求和安全管理要求的多个层面…

android13 删除兼容性警告窗口 deprecation warning 去除弃用警告

总纲 android13 rom 开发总纲说明 目录 1.前言 2.情况 3.问题分析 4.代码更改 5.编译测试 6.彩蛋 1.前言 在 Android 13 中,为了提高用户体验和应用的兼容性,系统引入了一些新的隐私和安全特性。这些特性可能会影响旧版应用的行为,因此当用户运行可能不完全兼容 An…

【HarmonyOS NEXT星河版开发学习】小型测试案例01-今日头条置顶练习

个人主页→VON 收录专栏→鸿蒙开发小型案例总结​​​​​ 基础语法部分会发布于github 和 gitee上面 ​ 前言 本系列可能是博客首发&#xff0c;鸿蒙开发星河版是一个全新的版本&#xff0c;由于参考视频较少鸿蒙开发不被重视导致csdn上面并没有全套的学习路线&#xff0c;…

6款免费版文章生成器,为你的创作提供无限可能

在这个信息发展迅速的时代&#xff0c;创作者们常常陷入时间和灵感的困境中。为了应对这一挑战&#xff0c;人工智能技术为我们提供了一种全新的解决方案——文章生成器。在这些文章生成器中可以帮助我们快速生成高质量的内容&#xff0c;为我们的创作提供无限可能。在本文中&a…

json文件格式

json文件格式 格式介绍1格式介绍2格式3 格式介绍1 格式介绍2 格式3 参考地址

全自动真空拌馅机 肠类肉丸类馅料搅拌机:

拌馅机&#xff0c;作为现代厨房与食品加工行业不可或缺的利器&#xff0c;其优点繁多&#xff0c;宛如烹饪艺术中的魔术师&#xff0c;为食材的融合与美味的创造开辟了新的维度。 首先&#xff0c;拌馅机以其高效均匀的搅拌能力著称&#xff0c;能够瞬间将肉类、蔬菜、调料等多…

微信小程序 - 自定义计数器 - 优化(键盘输入校验)

微信小程序通过自定义组件&#xff0c;实现计数器值的增加、减少、清零、最大最小值限定、禁用等操作。通过按钮事件触发方式&#xff0c;更新计数器的值&#xff0c;并修改相关联的其它变量。通过提升用户体验&#xff0c;对计数器进行优化设计&#xff0c;使用户操作更加便捷…

亚马逊测评:提升产品信誉与销量的关键

在亚马逊这样竞争激烈的环境中。通过有效的测评&#xff0c;卖家可以轻松为自己的产品添加评论、提高排名&#xff0c;进而打造出优质的产品。然而&#xff0c;亚马逊测评并不等同于刷单。今天&#xff0c;将深入探讨亚马逊测评的本质、与刷单的区别&#xff0c;以及如何在这个…

新能源车燃料和动力电池及系统应用概述(上)

随着化石能源的日益消耗和对环保的逐渐重视&#xff0c;利用电能取代化石能源作为动力的电动汽车受到了世界各国的关注和大力研发。电池技术作为电动汽车的核心和瓶颈&#xff0c;是电动汽车研究的重点和热点方向&#xff0c;也是关系到新能源汽车成本、续航里程、安全性及使用…

【LLM大模型】一文掌握Prompt:万能框架+优化技巧+常用指标

随着大模型在2023年横空出世&#xff0c;“Prompt 工程” 应运而生&#xff0c;作为用好大模型最重要的武器&#xff0c;Prompt 的好坏对模型效果有着决定性的影响。然而&#xff0c;网络上大量相关文章多是罗列“Prompt 工程” 中的若干技巧&#xff0c;少有体系化的总结&…

gym/Gymnasium强化学习玩推箱子游戏

gym/Gymnasium强化学习玩推箱子游戏 gym 框架 源码 https://github.com/openai/gym 文档 https://www.gymlibrary.dev/ 自 2021 年以来一直维护 Gym 的团队已将所有未来的开发转移到 Gymnasium&#xff0c;这是 Gym 的替代品&#xff08;将 gymnasium 导入为 gym&#xff09;…

k8s工作负载控制器--DaemonSet

文章目录 一、概述二、适用场景三、基本操作1、官网的DaemonSet资源清单2、字段解释3、编写DaemonSet资源清单4、基于yaml创建DaemonSet5、注意点5.1、必须字段5.2、DaemonSet 对象的名称5.3、.spec.selector 与 .spec.template.metadata.labels之间的关系 6、查看DaemonSet6.1…

主成分分析和线性判别分析

主成分分析 (PCA) PCA 是一种线性降维方法&#xff0c;通过投影到主成分空间&#xff0c;尽可能保留数据的方差。 原理 PCA 通过寻找数据投影后方差最大的方向&#xff0c;主成分是这些方向上的正交向量。 公式推理 对数据中心化&#xff1a; 其中&#xff0c;μ 是数据的…

姿态矫正app-不良坐姿语音提示

“让爷康康”是一款应用于安卓平台的手机应用&#xff0c;可以实时监测不良坐姿并给出语音提示。本项目主要基于 [Tensorflow Lite 官方示例 - 姿态估计] 文件结构 ├───android │ ├───app │ │ └───src │ └───gradle ├───doc_images ├───…

科普文:JUC系列之Java中7种阻塞队列DelayQueue用法

阻塞队列DelayQueue是一种无界阻塞队列&#xff0c;‌用于放置实现了Delayed接口的对象。‌这些对象只能在其到期时才能从队列中取走&#xff0c;‌这种队列是有序的&#xff0c;‌即队头对象的延迟到期时间最长。‌如果没有任何延迟到期的对象&#xff0c;‌那么就不会有任何头…

示例:在ML.NET中应用Model Builder模型生成器构建图片对象检测模型

一、目的&#xff1a;ML.NET 是一个开源且跨平台的机器学习框架&#xff0c;专为 .NET 开发人员设计。它允许你在 .NET 应用程序中构建、训练和部署机器学习模型&#xff0c;而无需离开 .NET 生态系统。ML.NET 支持多种机器学习任务&#xff0c;包括分类、回归、聚类、异常检测…

五、栈与队列(2)

五、栈与队列&#xff08;2&#xff09; [150. 逆波兰表达式求值 ](https://leetcode.cn/problems/evaluate-reverse-polish-notation/description/)[239. 滑动窗口最大值 ](https://leetcode.cn/problems/sliding-window-maximum/description/)[347.前 K 个高频元素 ](https:/…

python学习(day1)

1.Python 是大小写敏感的语言。 比如 print 函数名&#xff0c;该函数定义就是全部小写的&#xff0c; 不能写成 Print 或者 PRINT。 2.在Python语言中也会涉及到 对象&#xff0c; 这些对象包含了一定的数据信息。 Python语言中&#xff0c;所有的 数据 都被称之为 对象。 …