Docker | 深度学习中的docker看这一篇就够啦

news2024/11/30 0:26:38

目录

1.了解Docker 

1.1.为什么要用docker?

1.2.可以用docker做什么?

1.3.docker 框架

2.Docker 的基本使用

3.实例 :VS code远程连接服务器上的docker环境

3-1:环境框架可视化及ssh连接,搭建pytorch深度学习环境

3-2:搭建一个新的容器pytorch深度学习环境Create New Env - GPU 版本)

3-3:创建一个TensorFlow深度学习环境Create New Env:Tensorflow)

 安装OpenCV

 安装相关依赖,再安装 dlib

 Docker container set Caffe(正在进行时)

3-4:创建第二个版本的TensorFlow(Create Env:Tensorflow)

总结(Summary)

问题与解决(PS)

[PS1]

[PS2]

[PS3]ImportError: libGL.so.1: cannot open shared object file: No such file or directory

[PS4]docker容器中执行vim命令,报错:bash: vim: command not found

[PS5]

[PS6]

[PS7]

[PS8]

[PS9] 

[PS10]VS code 打不开服务器的docker 容器

 参考文献


1.了解Docker 

1.1.为什么要用docker?

容器没有二进制映像,这使得 docker 与其他虚拟工具相比占用的空间要少得多。

1.2.可以用docker做什么?

  • 模拟系统:Ubuntu等
  • 配置深度学习环境:Pytorch/Tensorflow等

1.3.docker 框架

Docker[1] 使用客户端-服务器架构。Docker 客户端与 Docker 守护进程,它负责构建、运行和 分发Docker 容器。Docker 客户端和守护程序可以在同一系统上运行,也可以将 Docker 客户端连接到远程 Docker 守护 进程。Docker 客户端和守护程序使用 REST API 通过 UNIX 进行通信 套接字或网络接口。另一个 Docker 客户端是 Docker Compose, 这是一组容器组成的应用程序。

Docker 守护程序Docker daemon): 监听 Docker API 请求并管理 Docker 对象,例如映像、容器、网络和卷。守护进程也可以 与其他守护程序通信以管理 Docker 服务。

Docker 客户端 (Client):是许多 Docker 用户交互的主要方式 与 Docker 一起。当使用命令时,客户端会发送这些命令 ,执行这些命令。该命令使用 Docker API。Docker 客户端可以与多个守护程序通信。

Docker注册表(Docker registries)Docker 注册表存储 Docker 映像。Docker Hub 是公共的 任何人都可以使用的注册表,并且 Docker 配置为在 默认情况下为 Docker Hub。您甚至可以运行自己的私有注册表。使用 or 命令时,所需的图像是 从配置的注册表中提取。使用该命令时, 映像将推送到配置的注册表。

镜像(Images):镜像是只读模板,其中包含有关创建 Docker 的说明 容器。通常,一个图像基于另一个图像,还有一些额外的 定制。例如,您可以构建一个基于该映像的映像,但会安装 Apache Web 服务器和您的应用程序,以及 使应用程序运行所需的配置详细信息。

容器(Containers):容器是映像的可运行实例。您可以创建、启动、停止、 使用 Docker API 或 CLI 移动或删除容器。可以连接一个 容器到一个或多个网络,将存储附加到其中,甚至创建新的 基于其当前状态的图像。

默认情况下,容器与其他容器的隔离相对较好,并且 它的主机。可以控制容器的网络、存储、 或其他底层子系统来自其他容器或主机 机器。容器由其映像以及任何配置选项定义 在创建或启动它时提供它。删除容器后,对未存储在持久存储中的状态将消失。

如图,docker的原理是通过docker hub拉取镜像,

通过镜像(image)建立容器:

 整体如图,容器通过操作

 三者之间的关系如下:

2.Docker 的基本使用

[以下内容包括:Ubuntu user path    ]

启动docker

service docker start

 (chongqidiannao hou yijiu xuyao qidong docker)

  docker

docker info

 images

docker images

docker pull : 

docker pull pytorch/pytorch:1.12.1-cuda11.3-cudnn8-devel

docker run :创建一个新的容器并运行一个命令Build and run

yufa:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

OPTIONS说明:

  • -a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;

  • -d: 后台运行容器,并返回容器ID;

  • -i: 以交互模式运行容器,通常与 -t 同时使用;

  • -P: 随机端口映射,容器内部端口随机映射到主机的端口

  • -p: 指定端口映射,格式为:主机(宿主)端口:容器端口

  • -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;

  • --name="nginx-lb": 为容器指定一个名称;

  • --dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;

  • --dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;

  • -h "mars": 指定容器的hostname;

  • -e username="ritchie": 设置环境变量;

  • --env-file=[]: 从指定文件读入环境变量;

  • --cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;

  • -m :设置容器使用内存最大值;

  • --net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;

  • --link=[]: 添加链接到另一个容器;

  • --expose=[]: 开放一个端口或一组端口;

  • --volume , -v: 绑定一个卷

实例

docker run -it -e  /home/elena:/home/elena --gpus all --ipc host --net host --name torch_na pytorch/pytorch:1.12.1-cuda11.3-cudnn8-devel /bin/bash

如果出错,可查看[PS]

也就是说以交互模式运行容器,为容器重新分配一个伪输入终端,设置环境变量为 /home/elena:/home/elena,使用 GPU版本,指定容器的网络连接类型为 host。

进入docker 容器

docker exec -it pytorch /bin/bash

这里/bin/bash表示载入容器后运行bash ,docker中必须要保持一个进程的运行,要不然整个容器就会退出。这个就表示启动容器后启动bash。

再次返回到我们的容器。为此,我们需要知道“容器 ID/名称”:

docker ps

docker ps 是查看现在运行的docker 容器

docker ps -a

 docker ps -a 是查看docker 现有的所有容器

让我们做附加:

docker attach 容器名称/容器id
  • 先按Ctrl+P然后再按Ctrl+Q:退出容器,且容器在运行

  • Ctrl+D:退出容器,且容器不在运行(停止容器)

  •   启动容器
docker start 容器名称/容器id

  •  进入容器
docker exec -it 容器名称/容器id /bin/bash

 默认根用户身份登录

  • 检查当前正在运行的进程(容器内查看)
top

 

如有4个进程,它们是与主机进程隔离的进程。

 按Ctrl+P然后再按Ctrl+Q,

  • 检查容器内正在运行哪些进程(容器外查看)
docker top 容器名称/容器id

可以使用“docker top ”检查容器内正在运行哪些进程:

  • 停止在后台运行的容器
docker stop 容器名称/容器id

docker ps 就可以看到容器没有在运行了.

删除容器

1)首先需要停止所有的容器

docker stop 容器id/名称

2)删除所有的容器(只删除单个时把后面的变量改为container id即可)

docker rm 容器id/名称

删除镜像

1)查看host中的镜像

docker images

2)删除指定id的镜像

docker rmi 镜像id/名称

3)删除全部的images

docker rmi 

3.实例 :VS code远程连接服务器上的docker环境

3-1:环境框架可视化及ssh连接,搭建pytorch深度学习环境

(默认所有镜像获取于docker hub,国内拉取可能会比较慢,建议大家更改国内镜像)

进入docker环境,使用如下命令修改root用户密码:passwd

注意,这里的密码是后续在vscode中远程登录时需要输入的密码

创建环境

(要确认是下载到linux服务器里,还是容器里!!)

linux服务器

安装openssh-server 

如果是root 

apt-get update
apt-get install openssh-server

如果是用户(本文中都是用户操作)

sudo apt-get update

sudo apt-get install openssh-server

 

然后设置两遍相同的密码,之后登陆的时候要用到! 4. 修改配置文件

vim /etc/ssh/sshd_config

用户操作

sudo vim /etc/ssh/sshd_config

 注释掉 PermitRootLogin prohibit-password 这一行 添加这一行 PermitRootLogin yes 5. 重启ssh服务

j :向下

i: 添加文本,输入

x: 删除

先按快捷键ESC,然后输入: wq 保存文件并退出

 

service ssh restart
# 或使用
# /etc/init.d/ssh restart

进入目录查看是否有sshd文件,如果没有,则使用如下命令创建 mkdir -p /var/run/sshd

woyou 

启动openssh-server

 /usr/sbin/sshd -D &

安装netstat apt-get install net-tools (如果已经安装可忽略)

查看sshd是否监听22端口 netstat -apn | grep ssh

 

在window上vscode中下载Remote-SSH插件

STEP 1 :拉取镜像(把pytorch的环境下载到本地)

 然后创建和运行容器(than build and run container)

docker run -it -e  /home/elena/workspace:/home/elena/workspace --gpus all --ipc host --net host --name elena_torch  pytorch/pytorch:1.12.1-cuda11.3-cudnn8-devel /bin/bash 

验证是否可用

退出 python

exit()

 - exit是退出Python指令

复制ubuntu的文件夹到 容器内

 按Ctrl+P然后再按Ctrl+Q,回到ubuntu用户地址下。

ls

- ls指令查询当前位置所有文件夹

复制Ubuntu 本地文件到容器内:

docker cp face_asian torch_na:/workspace

 - torch_na是docker容器名称,后面跟得是容器内保存地址,可以换自己想保存的路径

输入指令后就复制好了,打开容器后,到指定路径就会有文件存在

在VS code中也可以查看 

 

# 开启 docker 自启动
systemctl enable docker.service

# 关闭 docker 自启动
systemctl disable docker.service

3-2:搭建一个新的容器pytorch深度学习环境Create New Env - GPU 版本)

获取镜像

打开 Explore Docker's Container Image Repository | Docker Hub

 

pytorch中有很多版本,点击标签(tags),选择一个合适的

拉取pytorch-gpu版本镜像

创建并运行容器

docker run -it -e  /home/elena/workspace:/home/elena/workspace --gpus all --ipc host --net host --name torchv2 pytorch/pytorch:1.13.1-cuda11.6-cudnn8-runtime /bin/bash

复制项目到容器内

docker cp face-att torchv2:/workspace

 

新建test的python文件

touch test.py

 test.py


print("hi")
 
import torch
print("torch v:"torch.__version__)
 
print("cuda used:"torch.cuda.is_available())
print(torch.version.cuda)
print(torch.backends.cudnn.version())
 
import platform
print(platform.python_version())
import torchvision
print(torchvision.__version__)

配置OpenCV(下载opencv-python版本会出错,这个版本不会)

pip install opencv-python-headless

 

设置Tensorboard(Setting Tensorboard)

)

 docker pytorch容器 安装 tensorboard

pip install tensorboard

 if wrong,see [PS8]

docker pytorch容器 安装 matplotlib

pip install matplotlib

 3-3:创建一个TensorFlow深度学习环境Create New Env:Tensorflow)

 

打开MobaXterm( open  MobaXterm),拉取TensorFlow-gpu版本镜像

docker pull tensorflow/tensorflow:devel-gpu

 与上面的pytorch同理,创建TensorFlow深度学习容器并运行

docker run -it -e  /home/elena/workspace:/home/elena/workspace --gpus all --ipc host --net host --name tf tensorflow/tensorflow:devel-gpu /bin/bash

 然后直接进入容器

打开win10系统的VS code( Open VS code),在Ubuntu用户下复制项目文件到TensorFlow深度学习容器内,

复制命令如下: 

docker cp face-att tf:/workspace

 - face-att是保存在我Ubuntu用户下的我的项目文件名

- tf:/workspace是容器名称后面跟的项目保存路径

在MobaXterm软件上进入docker容器:

安装deepface第三方库 Set Deepface

pip install deepface

 安装如图

 中间省略

(可选择)升级一下pip版本

/usr/bin/python3 -m pip install --upgrade pip

 

建立一个python文件 (build a file) ,叫做 deepface.py

touh deepfacetest.py

 因为容器内没有vim命令,所以下载然后更新

apt-get install vim
apt-get update

( 如果这里出错,查看P4)

建立并编辑一个python文件 

vim deepfacetest.py

 deepfacetest.py

from deepface import DeepFace

obj = DeepFace.analyze(img_path = "/workspace/data/face_asian/faces_JinChungChen/00000A02.jpg".jpg", 
        actions = ['age', 'gender', 'race', 'emotion']
)

#/workspace/data/face_asian/faces_JinChungChen/00000A02.jpg
print(obj)

 - 此处路径需要改为自己文件的图片路径

编辑完事后,按快捷键 Esc ,输入 :wq 退出并保存文件。

如果出错查看P5( if wrong see P5)

运行刚编辑的python文件(Run deepfacetest.py)

也可以上传自己的文件从Ubuntu服务器到容器内

与配置pytorch深度学习环境同理,复制文件到容器内:

docker cp face_att_v1 tf:/workspace

 安装OpenCV

在OpenCV时,安装得是opencv-python-headless,而不是opencv-python,我一开始安装的就是opencv-python,无法运行(because of cv and dlib,so install env) 。

pip3 install opencv-python-headless

 (远程服务器中docker 容器,配置dlib)

 安装相关依赖,再安装 dlib

依次安装文件

  • cmake
  • libgtk-3-dev
  • libboost-all-dev
  • dilb
apt-get install build-essential cmake

apt-get install libgtk-3-dev

apt-get install libboost-all-dev

 

pip3 install dlib

pip3 list 

 Docker container set Caffe(正在进行时)

 

3-4:创建第二个版本的TensorFlow(Create Env:Tensorflow)

简单概括

#拉取TensorFlow-GPU版本镜像
docker pull tensorflow/tensorflow:1.11.0-devel-gpu-py3

#创建并运行docker容器
docker run --runtime=nvidia -it --name tf tensorflow/tensorflow:1.11.0-devel-gpu-py3 /bin/bash

#python验证
python -c "import tensorflow as tf;a=tf.constant(1);b=tf.constant(2);c=tf.add(a,b);sess=tf.Session();result=sess.run(c);print('The result is',result)"

 如图

总结(Summary)

Container and Ubuntu GPU are irrelevant 

Docker是一种相对使用较简单的容器,我们可以通过以下几种方式获取信息:

1,通过docker run执行命令,或许返回信息

2,通过docker logs去获取日志,做有针对性的筛选

3,通过systemctl status docker查看docker服务状态

4,通过journalctl -u docker.service查看日志

5.如文章所示,docker不仅可以模拟系统,还可以搭建不同版本的环境,在我们日常工作中,省去了很多不必要的麻烦。

问题与解决(PS)

[PS1]

docker: Error response from daemon: OCI runtime create failed: container_linux.go:349: starting container process caused "process_linux.go:449: container init caused \"process_linux.go:432: running prestart hook 0 caused \\\"error running hook: exit status 1, stdout: , stderr: nvidia-container-cli: requirement error: unsatisfied condition: cuda>=11.6, please update your driver to a newer version, or use an earlier cuda container\\\\n\\\"\"": unknown.
ERRO[0000] error waiting for container: context canceled

[PS2]

docker重启错误-重启命令一直卡住

systemctl重新启动docker卡住

未知原因:可能是启动的容器数量过多,或者磁盘IO问题

解决方式:

systemctl启动docker-cleanup.service

systemctl启动docker

[PS3]ImportError: libGL.so.1: cannot open shared object file: No such file or directory

导入错误:libgl.so.1:无法打开共享对象文件:没有这样的文件或目录

 如果您的应用程序依赖于cv2或opencv-python如果您尝试使用诸如 python:3.9-slim、python:buster 等图像构建 docker 容器,并且如果您导入 cv2,您将收到以下错误。

(pip uninstall opencv-python)

安装opencv-python-headless

(pip install opencv-python-headless)
代替opencv-python,您可以安装opencv-python-headless包含没有外部依赖项的预编译二进制轮(除了numpy),并且适用于 Docker 等无头环境。

与此相比,python3-opencv这是一个更轻量级的包,并将 docker 映像大小减少了 700MB

[PS4]docker容器中执行vim命令,报错:bash: vim: command not found

原因分析 :因为vim没有安装。

apt-get install vim

 

 这时,需要先执行命令:apt-get update,等更新完后在执行命令:vim命令进行安装后,就可以正常使用了!

apt-get update的作用是:同步 /etc/apt/sources.list 和 /etc/apt/sources.list.d 中列出的源的索引,这样才能获取到最新的软件包,yiban qingkuangxia anzhaunghou douxuyao yong zhetiao mingling gengxinyixia 。

[PS5]

解决

pip3 install --update numpy

 [PS6]

 [PS7]

pip3 list

[PS8]

 TypeError: Descriptors cannot not be created directly.
If this call came from a _pb2.py file, your generated code is out of date and must be regenerated with protoc >= 3.19.0.
If you cannot immediately regenerate your protos, some other possible workarounds are:
 1. Downgrade the protobuf package to 3.20.x or lower.
 2. Set PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python (but this will use pure-Python parsing and will be much slower).TypeError: 描述符不能被直接创建。
如果这个调用来自_pb2.py文件,你的生成的代码已经过时了,必须用protoc >= 3.19.0重新生成。
如果你不能立即重新生成你的protos,其他一些可能的解决方法是。
 1. 将protobuf包降级到3.20.x或更低。
 2. 设置PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python(但这将使用纯Python解析,速度会慢很多)。
解决方案:

卸载重装!!!

[PS9] 

docker: Error response from daemon: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: error during container init: error running hook #0: error running hook: exit status 1, stdout: , stderr: Auto-detected mode as 'legacy'
nvidia-container-cli: initialization error: nvml error: driver not loaded: unknown.

ERRO[0000] error waiting for container: context canceled

docker:守护进程的错误响应:创建shim任务失败。OCI runtime create failed: runc create failed: unable to start container process: error during container init: error running hook #0: error running hook: exit status 1, stdout: , stderr: 自动检测模式为'legacy'。
nvidia-container-cli:初始化错误:nvml错误:驱动程序未加载:未知。
ERRO[0000]等待容器的错误:上下文取消了

原因分析:没安装nvidia/cuda

sudo apt install nvidia-cuda-toolkit

[PS10]VS code 打不开服务器的docker 容器

 参考文献

【1】Docker overview | Docker Documentation

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

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

相关文章

北大硕士LeetCode算法专题课-数组相关问题

算法专题: 北大硕士LeetCode算法专题课---算法复杂度介绍_骨灰级收藏家的博客-CSDN博客 北大硕士LeetCode算法专题课-基础算法之排序_骨灰级收藏家的博客-CSDN博客 北大硕士LeetCode算法专题课-基础算法查找_骨灰级收藏家的博客-CSDN博客 数组相关问题 双指针 …

20-FreeRTOS队列API函数

1- xQueueCreate queue. hQueueHandle_t xQueueCreate( UBaseType_t uxQueueLength,UBaseType_t uxItemSize );创建一个新队列并返回 可引用此队列的句柄。 configSUPPORT_DYNAMIC_ALLOCATION 必须在 FreeRTOSConfig.h 中被设置为 1,或保留未定义状态(此…

ShardingSphere分库分表schema名称导致NPE问题排查记录

前段时间把 ShardingSphere 升级到了 5.1.1 版本,奈何官方版本升级太快跟不上速度,这不最近又发现了一个 BUG。 问题现象 数据库做了分库分表,在需要查询多表数据进行 merge 的时候发生了一个 NPE 的异常。 Caused by: java.lang.NullPoin…

【数据结构】前缀树/字典树

目录1.概述2.代码实现3.应用本文参考: LeetCode 208.实现 Trie (前缀树) 1.概述 前缀树又称字典树、Trie 树、单词查找树,是一棵有根树,同时也是一种哈希树的变种,其每个节点包含以下字段: 指向子节点的指针数组 chi…

pytorch 分布式调试debug torch.distributed.launch

文章目录一. pytorch 分布式调试debug torch.distributed.launch 三种方式1. 方式1:ipdb调试(建议)命令行使用pdb未解决:2. 方式2:使用pycharm进行分布式调试(侵入式代码)3. 方式3:使…

HRNet源码阅读笔记(5),庞大的PoseHighResolutionNet模块-transition1

在stage1的最后,分支了。就是所谓的transition1,详见下面的第13行。def forward(self, x):x self.conv1(x)x self.bn1(x)x self.relu(x)x self.conv2(x)x self.bn2(x)x self.relu(x)x self.layer1(x)x_list []for i in range(self.stage2_cfg[NU…

【前端之旅】Webpack模块打包工具

一名软件工程专业学生的前端之旅,记录自己对三件套(HTML、CSS、JavaScript)、Jquery、Ajax、Axios、Bootstrap、Node.js、Vue、小程序开发(Uniapp)以及各种UI组件库、前端框架的学习。 【前端之旅】Web基础与开发工具 【前端之旅】手把手教你安装VS Code并附上超实用插件…

【图的存储】

更好的阅读体验\color{red}{更好的阅读体验}更好的阅读体验 文章目录1. 邻接矩阵2. 边集数组3. 邻接表4. 链式邻接表5. 链式前向星总结1. 邻接矩阵 思想: 利用二维数组 g[N][N] 存储所有的点到点的权值。其中 N 为点的数量,g[i][j] 表示点 i 到点 j 的权…

【C++】容器适配器

文章目录一. 什么是适配器?什么是容器适配器?二.理解容器适配器stack的模拟实现queue的模拟实现一. 什么是适配器?什么是容器适配器? 适配器是一种设计模式(设计模式是一套被反复使用的,多数人知晓的,经过分类编目的,代码设计…

CAD未协调的新图层怎么处理?

在打开CAD图纸时,系统提示图形存在为协调的新图层是什么意思?所谓未协调图层,是指上次打印或者保存之类命令后新增的图层,大部分情况下增加新的外部参照时会把所有外部参照中的图层标记为未协调图层。CAD未协调的新图层怎么处理&a…

2023年底,我要通过这5点,实现博客访问量500W

说实话,这真的是一个非常高远的flag,因为我目前只有35W,但根据我2个月前还是12W的访问量,我觉得我还是可以拼一把的,在这里我想向大家分享一下我的计划,如何达成2023年底,博客访问量达到500W的K…

期刊会议排名、信息检索网站推荐、IEEE Latex模板下载(更新中...)

一.拿到一个期刊或论文,不知道他的影响因子、分区类型等等信息,可以使用以下几个网站搜索一下。二.一些会议期刊搜索1.国外The Latest Information Technology Conference and Journal List - Conference Partner(信息技术最新国际会议和期刊…

Java程序员必知四种负载均衡算法

前言 一般来说,我们在设计系统的时候,为了系统的高扩展性,会尽可能的创建无状态的系统,这样我们就可以采用集群的方式部署,最终很方便的根据需要动态增减服务器数量。但是,要使系统具有更好的可扩展性&…

直观理解--马氏距离

首先我们很了解欧氏距离了,就是用来计算欧式空间(就是我们常见的坐标系)中两个点的距离的。 比如点 x(x1,…,xn)x (x_1,…,x_n)x(x1​,…,xn​) 和 y(y1,…,yn)y (y_1,…,y_n)y(y1​,…,yn​) 的欧氏距离为: d(x,y)(x1−y1)2(x2…

依靠小游戏带动产品增收,app运营这样做

大家都玩过小游戏吧?从小时候的4399游戏平台到现在的微信小游戏,尤其是风靡一时的“跳一跳”和“羊了个羊”都曾上榜热搜,让人印象深刻。在当下小游戏爆火社交平台的不断出现的背景下,小游戏的发展劲头更是强盛。 小游戏的吸引力在…

Memblaze发布大容量企业级SSD:支持32T最大容量,性能更强!

2023年1月10日 —— 今天,北京忆恒创源科技股份有限公司(Memblaze)正式发布 PBlaze6 6930 系列 PCIe 4.0 企业级 NVMe SSD。PBlaze6 6930 面向企业高性能业务应用开发,有着 1600K/680K IOPS 的 4K 随机读/写性能,具备更…

Mysql常见面试题

Mysql常见面试题汇总①⭐事务的基本特性和隔离级别⭐ACID靠什么保证⭐什么是MVCC⭐mysql的主从同步原理简述MyISAM和InnoDB的区别简述mysql中索引类型以及对数据库的性能影响⭐索引的基本原理Mysql聚簇索引和非聚簇索引的区别⭐B树和B树的区别,为什么Mysql使用B树My…

第04讲:Docker部署MySQL8

MySQL 的 Docker 镜像在 dockerhub 上的地址:https://hub.docker.com//mysql 当前(2021-04-02)的 latest 和 8.0.23 是同一个镜像 。另外,5.7 版本和 5.7.33 是同一个镜像 第1步:安装mysql 查询中央仓库 docker se…

Kestrel封装在WindowService中(.net5,.net6,.net7三个版本的介绍)

Kestrel封装在WindowServer中背景关于WindowsServer开发服务.NET5版本建项目添加Controller添加引用修改Startup.cs修改Program.cs配置Kestrel监听发布程序通过命令行创建服务关于SC命令启动服务查看效果测试效果.NET6错误1解决办法:错误2运行效果如下图.NET7版本&a…

千锋教育嵌入式物联网教程之系统编程篇学习-01

目录 课程视频链接 笔记目的 什么是系统编程 如何操作内核的系统调用 系统调用的分类​编辑 系统调用的返回值 系统调用IO函数 文件描述符 文件IO文件描述符与标准IO的文件指针对应关系 Man手册使用 open函数 函数调用失败打印错误 close函数 测试一个进程最多能产生多少个…