二、部署docker
二、安装与部署
2.1 安装环境概述
Docker划分为CE和EE,CE为社区版(免费,支持周期三个月),EE为企业版(强调安全,付费使用)。
Docker CE每月发布一个Edge版本(17.03,17.04,17.05……),每三个月发布一个Stable版本(17.03,17.06,17.09……);docker EE和stable版本号保持一致,每个版本提供一年维护。
(1)依赖的基础环境
- 64 位CPU
- Linux kernel(内核) 3.10+
- Linux kernel cgroups and namespaces
(2)查询自己服务器的环境
① 使用的操作系统版本
# cat /etc/redhat-release
Red Hat Enterprise Linux release 9.3 (Plow)
② 内核版本
# uname -r
5.14.0-362.8.1.el9_3.x86_64
③ ip地址
# hostname -I
④卸载旧版本,旧版本的Docker称为docker或者docker-engine:
# yum remove docker docker-common docker-selinux docker-engine
2.2 安装docker
docker的安装官方文档:https://docs.docker.com/engine/install/centos/
2.2.1 使用yum安装
(1)添加docker-ce 源信息
安装依赖包(yum-utils 提供了 yum-config-manager):
# yum install yum-utils -y
# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/rhel/docker-ce.repo
(2)修改docker-ce源
# sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo##或者手动写仓库
# cat docker-ce.repo
[docker-ce]
name=cocker-ce
baseurl=https://mirrors.aliyun.com/docker-ce/linux/rhel/9/x86_64/stable/
gpgcheck=0
(3)更新源
# yum makecache
(4)安装docker-ce
①默认安装docker-ce是最新版本
# yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
# rpm -q docker-ce
docker-ce-27.1.2-1.el9.x86_64
# systemctl start docker
# systemctl status docker
②安装指定版本
# yum list docker-ce --showduplicates | sort -r
[root@rhel9 ~]# yum install docker-ce-26.1.4-1.el9 -y
[root@rhel9 ~]# systemctl start docker
[root@rhel9 ~]# systemctl status docker
2.2.2 二进制安装
官方指导文档:https://docs.docker.com/engine/install/binaries/#install-daemon-and-client-binaries-on-linux
(1)下载二进制文件
二进制文件的下载路径:https://download.docker.com/linux/static/stable/
#此次安装的是docker-25.0.5
[root@rocky9 ~]# mkdir -p /data
[root@rocky9 ~]# wget -P /data/ https://download.docker.com/linux/static/stable/x86_64/docker-25.0.5.tgz
[root@rocky9 ~]# cd /data/
[root@rocky9 data]# tar xf docker-25.0.5.tgz
[root@rocky9 data]# cp docker/* /usr/bin/
[root@rocky9 data]# dockerd &
2.3 查看当前docker信息
在docker安装之后,默认会生成一个名称为docker0的网卡并且默认IP地址为172.17.0.1
[root@rhel9 ~]# ip a show docker0
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group defaultlink/ether 02:42:2e:42:6f:44 brd ff:ff:ff:ff:ff:ffinet 172.17.0.1/16 brd 172.17.255.255 scope global docker0valid_lft forever preferred_lft forever
查看docker当前的版本
#验证docker的版本
[root@rhel9 ~]# docker version
Client: Docker Engine - CommunityVersion: 27.1.2API version: 1.46Go version: go1.21.13Git commit: d01f264Built: Mon Aug 12 11:52:49 2024OS/Arch: linux/amd64Context: defaultServer: Docker Engine - CommunityEngine:Version: 27.1.2API version: 1.46 (minimum version 1.24)Go version: go1.21.13Git commit: f9522e5Built: Mon Aug 12 11:51:10 2024OS/Arch: linux/amd64Experimental: falsecontainerd:Version: 1.7.20GitCommit: 8fc6bcff51318944179630522a095cc9dbf9f353runc:Version: 1.1.13GitCommit: v1.1.13-0-g58aa920docker-init:Version: 0.19.0GitCommit: de40ad0
查看当前的容器、镜像、仓库等信息
[root@rhel9 ~]# docker info
Client: Docker Engine - CommunityVersion: 27.1.2Context: defaultDebug Mode: falsePlugins:buildx: Docker Buildx (Docker Inc.)Version: v0.16.2Path: /usr/libexec/docker/cli-plugins/docker-buildxcompose: Docker Compose (Docker Inc.)Version: v2.29.1Path: /usr/libexec/docker/cli-plugins/docker-composeServer:Containers: 0 #当前主机运行的容器总数Running: 0 #有几个容器是正在运行的Paused: 0 #有几个容器是暂停的Stopped: 0 #有几个容器是停止的Images: 0 #当前主机上的镜像数Server Version: 27.1.2 #服务端版本Storage Driver: overlay2 #正在使用的存储引擎Backing Filesystem: xfs #后端文件系统,即服务器的磁盘文件系统Supports d_type: true #是否支持d_typeUsing metacopy: false Native Overlay Diff: true #是否支持差异数据存储userxattr: falseLogging Driver: json-file #日志类型Cgroup Driver: systemd #cgroups类型Cgroup Version: 2Plugins: #插件Volume: localNetwork: bridge host ipvlan macvlan null overlay Log: awslogs fluentd gcplogs gelf journald json-file local splunk syslogSwarm: inactive Runtimes: io.containerd.runc.v2 runc #已安装的容器运行时Default Runtime: runc #默认使用的容器运行时Init Binary: docker-init #初始化容器的守护进程,即pid为1的进程containerd version: 8fc6bcff51318944179630522a095cc9dbf9f353runc version: v1.1.13-0-g58aa920init version: de40ad0Security Options:seccompProfile: builtincgroupnsKernel Version: 5.14.0-362.8.1.el9_3.x86_64Operating System: Red Hat Enterprise Linux 9.3 (Plow)OSType: linuxArchitecture: x86_64CPUs: 2 #宿主机cpu数量Total Memory: 1.692GiB #宿主机总内存Name: rhel9ID: 681118d1-e2e3-41a7-b24d-0ae36f8cc338Docker Root Dir: /var/lib/docker #宿主机数据保存目录Debug Mode: falseExperimental: false #是否测试版Insecure Registries: #非安全的镜像仓库127.0.0.0/8 Live Restore Enabled: false #是否开启活动重启(重启docker-daemon不关闭容器)
docker的相关进程:
dockerd:被client直接访问,其父进程为宿主机的systemd守护进程。
containerd:被dockerd进程调用以实现与runc交互,containerd可以在宿主机中管理完整的容器生命周期(容器镜像的传输和存储,容器的执行和管理,存储和网络等)。
containerd-shim:containerd套件,其目的主要是隔离containerd和容器。 containerd守护进程收到gRPC调用请求(比如来自Kubelet域或Docker的创建容器请求),便会启动/usr/bin/containerd-shim套件。
containerd-shim-runc-v2: containerd-shim启动后会去启动/usr/bin/containerd-shim-runc-v2,然后立即退出,此时containerd-shim-runc-v2的父进程就变成了systemd(1),这样containerd-shim-runc-v2就和containerd脱离了关系,即便containerd退出也不会影响到容器(这也是containerd-shim套件的作用) 。
runc:OCl标准的具体实现就是runc,真正创建和维护容器便是由runc来完成的。/usr/bin/containerd-shim-runc-v2会启动runc去create、start容器,然后runc立即退出,容器的父进程就变成了containerd-shim-runc-v2。containerd-shim-runc-v2会收集容器进程的状态,上报给containerd
docker-proxy:实现容器通信,其父进程为dockerd
[root@rhel9 ~]# ps -ef | egrep "(docker|containerd)"
root 2080 1 0 09:40 ? 00:00:00 /usr/bin/containerd
root 2088 1 0 09:40 ? 00:00:00 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
root 2324 1693 0 09:40 pts/0 00:00:00 grep -E --color=auto (docker|containerd)
[root@rhel9 ~]# pstree -p | egrep "(systemd|docker|containerd)"
systemd(1)-+-ModemManager(846)-+-{ModemManager}(886)|-containerd(2080)-+-{containerd}(2081)| |-{containerd}(2082)| |-{containerd}(2083)| |-{containerd}(2084)| |-{containerd}(2085)| |-{containerd}(2087)| `-{containerd}(2089)|-dockerd(2088)-+-{dockerd}(2090)| |-{dockerd}(2091)| |-{dockerd}(2092)| |-{dockerd}(2093)| |-{dockerd}(2094)| |-{dockerd}(2095)| |-{dockerd}(2096)| `-{dockerd}(2097)
容器的创建与管理过程:
1、dockerd通过grpc和containerd模块通信。dockerd和containerd通信的socket文件:/run/containerd/containerd.sock。
2、containerd在dockerd启动时被启动,然后containerd启动grpc请求监听。containerd处理grpc请求,根据请求做相应动作。
3、若是创建容器,containerd拉起一个container-shim容器进程,并进行相应的创建操作。
4、container-shim被拉起后,start/exec/create拉起runc进程,通过exit、control文件和containerd通信,通过父子进程关系和SIGCHLD(信号)监控容器中进程和状态。
2.4 docker镜像加速配置
国内从Docker Hub拉取镜像有时会遇到困难,可以通过修改docker配置文件的方式添加一个加速器,可以通过加速器达到下载镜像的目的。
(1)从2017年6月9日起,Docker 官方提供了在中国的加速器,以解决墙的问题。不用注册,直接使用加速器地址:https://registry.docker-cn.com 即可。
(2)中国科技大学的镜像加速器:中科大的加速器不用注册,直接使用地址 https://docker.mirrors.ustc.edu.cn/ 配置加速器即可。进一步的信息可以访问:http://mirrors.ustc.edu.cn/help/dockerhub.html?highlight=docker
(3)阿里云加速器:注册阿里云开发账户(免费的)后,访问这个链接就可以看到加速器地址: https://cr.console.aliyun.com/#/accelerator
(4)DaoCloud 加速器:注册 DaoCloud 账户(支持微信登录),然后访问: https://www.daocloud.io/mirror#accelerator-doc
#配置docker镜像加速
[root@rhel9 ~]# cat /etc/docker/daemon.json
{"registry-mirrors": ["https://docker.m.daocloud.io","https://huecker.io","https://dockerhub.timeweb.cloud","https://noohub.ru","https://hub.oepkgs.net","https://huecker.io","https://dockerhub.timeweb.cloud" ]
}
[root@rhel9 ~]# systemctl daemon-reload
[root@rhel9 ~]# systemctl restart docker
[root@rhel9 ~]# docker info | grep -iA 4 registryRegistry Mirrors:https://docker.m.daocloud.io/https://huecker.io/https://dockerhub.timeweb.cloud/https://noohub.ru/
#出现该内容表示镜像加速配置成功
#拉取hello-world镜像,测试能否拉取
[root@rhel9 ~]# docker pull hello-world
Using default tag: latest
latest: Pulling from library/hello-world
c1ec31eb5944: Pull complete
Digest: sha256:53cc4d415d839c98be39331c948609b659ed725170ad2ca8eb36951288f81b75
Status: Downloaded newer image for hello-world:latest
docker.io/library/hello-world:latest
[root@rhel9 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest d2c94e258dcb 15 months ago 13.3kB
相关文章:

二、部署docker
二、安装与部署 2.1 安装环境概述 Docker划分为CE和EE,CE为社区版(免费,支持周期三个月),EE为企业版(强调安全,付费使用)。 Docker CE每月发布一个Edge版本(17.03&…...
FFmpeg 4.3 音视频-多路H265监控录放C++开发十九,ffmpeg封装
封装就是将 一个h264,和一个aac文件重新封装成一个mp4文件。 这里我们的h264 和 aac都是来源于另一个mp4文件,也就是说,我们会将 in.mp4文件解封装成一路videoavstream 和 一路 audioavstream,然后 将这两路的 avstream 合并成一…...

ML 系列:第 39 节 - 估计方法:最大似然估计 (MLE)
目录 一、说明 二、什么是最大似然估计 (MLE)? 2.1 理解公式 2.2 MLE 的定义 2.3 我们何时使用 MLE? 三、结论 一、说明 在统计学领域,我们经常需要根据观察到的数据估计统计模型的参数。为此目的广泛使用的两种关键方法是最大似然估计 ( MLE…...

Linux 权限管理:用户分类、权限解读与常见问题剖析
🌟 快来参与讨论💬,点赞👍、收藏⭐、分享📤,共创活力社区。🌟 🚩用通俗易懂且不失专业性的文字,讲解计算机领域那些看似枯燥的知识点🚩 目录 💯L…...

网络原理之 UDP 协议
目录 1. UDP 协议报文格式 2. UDP 的特点 (1) 无连接 (2) 不可靠 (3) 面向数据报 (4) 全双工 3. 基于 UDP 的应用层协议 前文是:UDP 的使用 首先了解一下基础知识: 1. UDP 协议报文格式 传输层最重要的协议有两个,一个是 TCP&#x…...

并发框架disruptor实现生产-消费者模式
Disruptor是LMAX公司开源的高性能内存消息队列,单线程处理能力可达600w订单/秒。本文将使用该框架实现生产-消费者模式。一、框架的maven依赖 <!-- https://mvnrepository.com/artifact/com.lmax/disruptor --><dependency><groupId>com.lmax<…...

【Vivado】xdc约束文件编写
随手记录一下项目中学到的约束文件编写技巧。 时序约束 创建生成时钟 参考链接: Vivado Design Suite Tcl Command Reference Guide (UG835) Vivado Design Suite User Guide: Using Constraints (UG903) 通过Clocking Wizard IP创建的时钟(MMCM或…...

Redis使用场景-缓存-缓存雪崩
前言 之前在针对实习面试的博文中讲到Redis在实际开发中的生产问题,其中缓存穿透、击穿、雪崩在面试中问的最频繁,本文加了图解,希望帮助你更直观的了解缓存雪崩😀 (放出之前写的针对实习面试的关于Redis生产问题的博…...

概率论相关知识随记
作为基础知识的补充,随学随记,方便以后查阅。 概率论相关知识随记 期望(Expectation)期望的定义离散型随机变量的期望示例:掷骰子的期望 连续型随机变量的期望示例:均匀分布的期望 期望的性质线性性质期望的…...

【PlantUML系列】序列图(二)
目录 一、参与者 二、消息交互顺序 三、其他技巧 3.1 改变参与者的顺序 3.2 使用 as 重命名参与者 3.3 注释 3.4 页眉和页脚 一、参与者 使用 participant、actor、boundary、control、entity 和 database 等关键字来定义不同类型的参与者。例如: Actor&…...
WPF+MVVM案例实战与特效(三十四)- 日志管理:使用 log4net 实现高效日志记录
文章目录 1、概述2、日志案例实现1、LogHelper 类详解2、代码解释3、配置文件4、实际应用案例场景 1:记录系统运行日志场景 2:记录数据库操作日志场景 3:记录 HTTP 请求日志5、总结1、概述 在WPF软件开发中,良好的日志记录机制对于系统的调试、维护和性能优化至关重要。lo…...

前端测试框架 jasmine 的使用
最近的项目在使用AngulaJs,对JS代码的测试问题就摆在了面前。通过对比我们选择了 Karma jasmine ,使用 Jasmine做单元测试 ,Karma 自动化完成,当然了如果使用 Karma jasmine 前提是必须安装 Nodejs。 安装好 Nodejs ,使用 npm 安装好必要…...

Qwen2-VL视觉大模型微调实战:LaTex公式OCR识别任务(完整代码)
《SwanLab机器学习实战教程》是一个主打「开箱即用」的AI训练系列教程,我们致力于提供完善的数据集、源代码、实验记录以及环境安装方式,手把手帮助你跑起训练,解决问题。 Qwen2-VL是通义千问团队最近开源的大语言模型,由阿里云通…...

「Mac玩转仓颉内测版42」小学奥数篇5 - 圆和矩形的面积计算
本篇将通过 Python 和 Cangjie 双语解决简单的几何问题:计算圆的面积和矩形的面积。通过这道题,学生将掌握如何使用公式解决几何问题,并学会用编程实现数学公式。 关键词 小学奥数Python Cangjie几何计算 一、题目描述 编写一个程序&#…...

Groom Blender to UE5
Groom Blender to UE5 - Character & Animation - Epic Developer Community Forums Hello, 你好, While exporting my “groom” from blender to UE5, I notice that the curves have a minimal resolution in Unreal. However I would like to get the same …...
开发一套ERP 第十弹 图片作为配置文件,本地读取图片,定时更新图片类型
echo Hello World在同一数据库中在建一个图床数据表,产品一,一对应,图片命名 最优的方案,使用 rust 在构建一个 http server 用于管理非数据库资源,也可以将来对接不同的图床,部署方便 考虑到数据库资源和图片资源,都可以被远程访问这种方法最佳...
第七十六条:努力保持故障的原子性
当对象抛出异常之后,通常我们期望这个对象仍然保持在一种定义良好的可用状态之中,即使失败是发生在执行某个操作的过程中间。对于受检的异常而言,这尤为重要,因为调用者期望能从这种异常中进行恢复。一般而言,失败的方…...
Word分栏后出现空白页解决方法
Word分栏后出现空白页解决方法 只需要在后面的空白页设置相同的页面布局(分栏格式),然后按Ctrl backspace即可删除该空白页。 参考文章:Word分栏出现空白怎么解决。...

基于HTML和CSS的校园网页设计与实现
摘要 随着计算机、互联网与通信技术的进步,Internet在人们的学习、工作和生活中的地位也变得越来越高,校园网站已经成为学校与学生,学生与学生之间交流沟通的重要平台,对同学了解学校内发生的各种事情起到了重要的作用。学校网站…...
【算法day7】字符串:反转与替换
题目引用 反转字符串反转字符串II替换数字 1.反转字符串 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 示例 1&am…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...

NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...
今日科技热点速览
🔥 今日科技热点速览 🎮 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售,主打更强图形性能与沉浸式体验,支持多模态交互,受到全球玩家热捧 。 🤖 人工智能持续突破 DeepSeek-R1&…...

Linux nano命令的基本使用
参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时,显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...

c++第七天 继承与派生2
这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分:派生类构造函数与析构函数 当创建一个派生类对象时,基类成员是如何初始化的? 1.当派生类对象创建的时候,基类成员的初始化顺序 …...
【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error
在前端开发中,JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作(如 Promise、async/await 等),开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝(r…...

Chrome 浏览器前端与客户端双向通信实战
Chrome 前端(即页面 JS / Web UI)与客户端(C 后端)的交互机制,是 Chromium 架构中非常核心的一环。下面我将按常见场景,从通道、流程、技术栈几个角度做一套完整的分析,特别适合你这种在分析和改…...
小木的算法日记-多叉树的递归/层序遍历
🌲 从二叉树到森林:一文彻底搞懂多叉树遍历的艺术 🚀 引言 你好,未来的算法大神! 在数据结构的世界里,“树”无疑是最核心、最迷人的概念之一。我们中的大多数人都是从 二叉树 开始入门的,它…...
在RK3588上搭建ROS1环境:创建节点与数据可视化实战指南
在RK3588上搭建ROS1环境:创建节点与数据可视化实战指南 背景介绍完整操作步骤1. 创建Docker容器环境2. 验证GUI显示功能3. 安装ROS Noetic4. 配置环境变量5. 创建ROS节点(小球运动模拟)6. 配置RVIZ默认视图7. 创建启动脚本8. 运行可视化系统效果展示与交互技术解析ROS节点通…...