【入门级】docker

在这里插入图片描述开头处生动的描述一下”码头工人”吧:小鲸鱼(登记处Registry:比如docker hub官方)背着好多集装箱(仓库repository:存放各种各样的镜像,一般存放的是一类镜像,这一类镜像中通过tag 版本进行区分),可以游向各个地方(指无需配置环境便可直接运行)。

【入门级】docker

  • 一、docker概念简述
  • 二、docker拉取
    • 1.国内镜像加速
    • 2.docker pull with proxy
  • 三、docker基本命令
    • 1.帮助命令
    • 2.镜像命令
    • 3.容器命令
    • 4.移动命令
    • 5.其余命令
  • 四、容器数据卷
    • 1. 容器-v挂载
    • 2.构建镜像时挂载
    • 3.数据卷容器
  • 五、DockerFile
  • 六、Docker网络

一、docker概念简述

所有应用,可以打包成docker镜像(包含某个软件运行所需的所有内容:代码、库、环境变量、配置文件等),无需重新配置环境,可以直接跑起来!简单了解以下几个名词:
在这里插入图片描述

  • 镜像(images):可以理解成C++里的类/模板,通过镜像实例化对象.
  • 容器(container):镜像实例化的对象就是容器,每个容器都类似一个VM虚拟机(区别是容器不用单独构建操作系统内核,所有的容器共用宿主机的内核,启动更快),各个容器之间存储隔离,不同容器可以进行交互.
  • 仓库(repository):存放镜像的地方(官方docker hub,以及一些国内的镜像仓库).
  • Ubuntu下docker的安装可以采用鱼香ros一键安装:wget http://fishros.com/install -O fishros && . fishros(安装的是引擎版,不是桌面版)
  • 安装完成后启动docker:systemctl start docker
    查看docker版本:docker version
    run hello-world检测docker:docker run hello-world(自动pull hello-world的镜像,拉取时关闭防火墙)
  • docker的默认工作路径在/var/lib/docker下,可以使用sudo -i提高权限,cd查看,Ctrl+D退出高级权限.
  • docker遵循client-server模式,可以输入docker info查看
  • 其余详情请移步到 docker官方用户手册

二、docker拉取

1.国内镜像加速

  • 在终端进行下述配置:
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<EOF
{
    "registry-mirrors": [
        "https://hub.uuuadc.top",
        "https://docker.anyhub.us.kg",
        "https://dockerhub.jobcher.com",
        "https://dockerhub.icu",
        "https://docker.ckyl.me",
        "https://docker.awsl9527.cn"
    ]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
  • docker.awsl9527.cn为例拉取:
docker pull docker.awsl9527.cn/library/alpine:latest // 拉取 library 镜像
docker pull docker.awsl9527.cn/coredns/coredns:latest // 拉取 coredns 镜像

(说明:library是一个特殊的命名空间,它代表的是官方镜像。如果是某个用户的镜像就把library替换为镜像的用户名)

  • 重命名镜像名称:
docker image tag docker.awsl9527.cn/library/alpine:latest library/alpine:latest
docker image tag docker.awsl9527.cn/coredns/coredns:latest coredns/coredns:latest
  • 删除“中间站”镜像:
docker rmi docker.awsl9527.cn/library/alpine:latest
docker rmi docker.awsl9527.cn/coredns/coredns:latest

欲知其余镜像加速器的配置方法,可以跳转DockerHub国内镜像源列表

2.docker pull with proxy

若想使用clash(确保已经配置好clash)直接从docker hub官网拉取镜像,可以配置proxy,具体步骤如下:

  • mkdir /etc/systemd/system/docker.service.d
  • vim /etc/systemd/system/docker.service.d/http-proxy.conf
  • 在 http-proxy.conf 中添加下述内容:
[Service]
Environment="HTTP_PROXY=http://proxy.example.com:80/"
Environment="HTTPS_PROXY=http://proxy.example.com:80/"

(在终端使用命令env | grep -i proxy,查看HTTP_PROXYHTTPS_PROXY的值进行替换)

  • 刷新一下:sudo systemctl daemon-reload
  • 查看配置是否被加载完成
$ sudo systemctl show --property Environment docker
Environment=HTTP_PROXY=http://proxy.example.com:80/
Environment=HTTPS_PROXY=http://proxy.example.com:80/
  • 重启docker:sudo systemctl restart docker

(注:配置好代理后pull时需要关掉防火墙)

三、docker基本命令

1.帮助命令

docker 命令 --help

官方命令Reference

2.镜像命令

sudo docker images  //查看所有已下载的docker镜像
docker images -q  //只显示镜像id

docker search osrf/ros  //搜索镜像(也可以在docker hub上直接搜索)
docker search osrf/ros --filter=STARS=73   //过滤:只搜索stars大于73的镜像

sudo docker pull osrf/ros:humble-desktop-full  //拉取ros-humble的docker镜像 分层下载(如果不写tag,默认latest) 

sudo docker rmi 镜像ID/镜像name  //删除镜像
docker rmi -f $(docker images -aq)  //删除所有镜像(f->force  a->all  q->id)

(注:容器ID≠镜像ID)

3.容器命令

sudo docker ps  //查看正在运行的docker容器
sudo docker ps -a  //列出所有运行/停止的容器
sudo docker ps -aq  //仅列出所有运行/停止的容器的id
sudo docker ps -n=?  //显示最近创建的容器(尚存在的)

sudo docker run -it hello-world:latest  //运行容器(-it:交互式运行;i:从容器中获取一个标准输入stdIn创建可交互连接;t:在容器内分配一个伪终端;hello-world:repository;latest:tag)
sudo docker run -it -d osrf/ros:humble-desktop-full-jammy  //在后台运行一个容器(输出1c7a8a5b58116e6b5f7d88aa1608748a1b36ab582822c760556d5e6b7850f5ee,前12位为容器ID)(容器发现没有前台进程,自杀->exit)
sudo docker run -it --rm osrf/ros:humble-desktop-full-jammy //仅用于测试,关闭容器后自动删除
sudo docker run -it -d --name xiaoxin osrf/ros:humble-desktop-full-jammy  //创建容器时自己给容器rename

sudo docker start 容器name/ID  //重新打开已经创建好但退出的容器
docker restart 容器name/ID  //重启容器
sudo docker attach 1c7a8a5b5811  //连接进入ID为1c7a8a5b5811的容器(Ctrl+D后exited)
docker exec -it  frosty_mahavira /bin/bash  //连接进入name为frosty_mahavira的容器(开启一个新终端 Ctrl+D后up)

CTRL+P+Q  //让容器呆在后台(不停止)
当前终端:CTRL+D或exit  //停止并退出容器
新开终端:sudo docker stop 容器name/ID  //温柔退出容器
sudo docker kill 容器name/ID  //强制关闭docker容器

sudo docker rm 容器ID/容器name  //删除容器(不能删除正在运行的容器,如果强制删除rm -f)
docker rm -f $(docker ps -aq)  //删除所有的up/exit容器(若去掉-f,只能删掉停止的容器)
docker ps -aq | xargs docker rm  //删除所有的容器(xargs处理管道多行变单行,换行和空白将被空格取代)
sudo docker container prune  //把所有停止的容器一键删除
sudo docker system prune -a  //(慎用)删掉所有未运行的容器、所有镜像、构建的缓存、所有网络

4.移动命令

docker save -o lawskiybin.tar lawskiy/roaf3d_bin:v3.0  //把镜像打包成tar
docker load -i lawskiybin.tar  //从tar文件导出镜像

sudo docker commit 容器ID 容器name/镜像name  //创建一个当前运行容器的 Docker 镜像
docker commit -m="提交的描述信息" -a="作者" 容器ID 目标镜像名:tag

docker cp 容器id:容器内路径 目的主机路径  //从容器内拷贝文件(夹)到主机上
docker cp /home/zixie/ws frosty_mahavira:/home  //从主机拷贝文件(夹)到容器内

5.其余命令

# 查找日志
docker logs -tf  --tail 10 容器name/ID  //输出最近的10条日志(t-时间戳 f-实时显示 tail-后跟最近日志获取数量)
docker logs -tf 容器names/ID  //输出所有日志
# 查看容器中进程信息
docker top 容器name/ID   
//各个输出所表含义:
//UID-进程的用户ID   
//PID-进程ID    
//PPID-父进程ID                
//C-CPU使用率                   
//STIME-进程启动时间               
//TTY-进程所在的终端                 
//TIME-进程累计CPU时间                
//CMD-启动进程的命令
#查看容器的源数据
docker inspect 容器name/ID
#查看docker磁盘使用情况
docker system df

在这里插入图片描述

四、容器数据卷

容器内部数据和主机数据的互相挂载,确保容器的”持久化“以及”同步化“。通过挂载数据卷,容器之间也可以共享数据.

  • docker inspect 容器name:查看挂载详情:Mounts挂载-v;Source主机目录;Destination容器内目录.
  • docker volume ls:查看所有容器数据卷.
  • docker volume inspect 卷名:查看容器在主机的挂载目录Mountpoint.
  • docker volume rm 数据卷名:删除容器数据卷(在/var/lib/docker/volumes执行rm -rf 主机目录有时删不掉).

1. 容器-v挂载

docker run -it -v 主机目录:容器内目录 镜像name:tag
  • 匿名挂载docker run --rm -it -v /home/test osrf/ros:humble-desktop-full(只写了容器内目录:/home/test;主机目录默认为:/var/lib/docker/volumes/数据卷名/_data)
  • 具名挂载docker run --rm -it -v juming:/home/test osrf/ros:humble-desktop-full(juming前没加/,不是主机目录,而是数据卷的名字,主机目录默认为:/var/lib/docker/volumes/数据卷名/_data)
  • 指定路径挂载docker run --rm -it -v /home/zixie:/home/test osrf/ros:humble-desktop-full(指定路径挂载是一种把主机目录绝对化的匿名挂载)
//改变读写权限(针对于容器而言)
docker run -it -v 主机目录:容器内目录:ro/rw 镜像name:tag
//ro:readonly 只能在宿主机进行操作,容器内只读
//rw:readwrite

2.构建镜像时挂载

vim Dockerfile新建Dockerfile文件,输入:

FROM osrf/ros:humble-desktop-full

VOLUME ["volume1","volume2"]

CMD echo "---end---"

CMD /bin/bash

终端输入docker build -f ./Dockerfile -t hzx/ros:1.0 .构建镜像(不要少写了 “.”)
新建容器docker run --rm -it hzx/ros:1.0,完成后ls可以看到挂载的数据卷volume1&volume2.

3.数据卷容器

docker run --rm -it --name docker01 hzx/ros:1.0  //hzx/ros:1.0镜像在构建时自带数据卷
docker run --rm -it --name docker02 --volumes-from docker01 hzx/ros:1.0  //实现容器间挂载数据卷

(关于挂载原理不是很清楚:本人先删除docker,虚拟机中的文件不会丢失;删除虚拟机中的volume数据卷,docker中的文件丢失)

五、DockerFile

构建docker镜像的文件(手工构建image)——命令脚本
通过docker history 镜像名可以大致窥见构建镜像的Dockerfile.

  • 关键字(指令)可以大/小写字母(推荐大写).
  • 从上到下顺序执行.
  • 使用#注释
  • 每一个指令都会创建一个镜像层,并提交.
    在这里插入图片描述
    (bootfs是Docker镜像的基础文件系统,由多个只读层(read-only layer)组成,这些层叠加形成了完整的文件系统,这个文件系统是唯一一个在容器运行时保持不变的层,所有的修改都是在其他层上完成)
指令说明
FROM指定基础镜像:FROM ubuntu:18.04(FROM scratch 白手起家)
RUN在构建镜像过程中执行的操作:RUN apt-get update && apt-get install -y vim
COPY拷贝本机文件到镜像内
ADD类似于COPY,支持URL和自动解压缩
WORKDIR进入容器后所在的工作目录
EXPOSE暴露端口
CMD指定容器启动时默认执行的命令,只有最后一个生效,运行容器时若添加CMD后的相关指令会被替代:CMD [“python ”, “app.py”]
ENTRYPOINT指定容器启动时默认执行的命令,只有最后一个生效, 运行容器时可以在原先Dockerfile ENTRYPOINT的基础上追加命令
LABEL键值对形式,可以生成镜像的作者名称(取代MAINTAINER):LABEL maintainer=‘zixie’
ENV设置环境变量,运行容器时有效
ARG设置环境变量,构建镜像时有效
VOLUME挂载数据卷:VOLUME [“volume1”, “volume2”]
USERdocker默认运行权限是root,USER用于设置运行容器时的用户
ONBUILD该指令后面的指令在当前镜像被构建时,并不会被执行;只有以当前镜像为基础镜像去构建下一级镜像时,才会被执行

(每个指令的些微介绍请移步Docker Dockerfile指令大全)

发布自己的镜像到 docker hub 官网:

  • 首先在个人docker hub账户dockerhub_username(命名空间)下Create repository 创建仓库repository_name,这样做是为了确定要上传网站的位置为dockerhub_username/repository_name
  • 给自己的镜像打标签 docker tag [镜像id] [网站上的位置]:[自定义Tag名字]docker tag <local_image_id> dockerhub_username/repository_name:tag
  • 终端输入docker login -u username ,然后输入密码——>Login Succeeded
  • push到官方docker push dockerhub_username/repository_name:tag
  • docker logout退出

docker流程小结
(Dockerfile & Images & Containers & Docker registry & backup.tar)
在这里插入图片描述

六、Docker网络

首先,简要插播一下计算机网络的内容:

  • 集线器hub(物理层):连接多个PC端。不做任何处理,通过48位的MAC地址无脑将电信号广播至所有出口,浪费网络资源又不安全。
    在这里插入图片描述
  • 交换机(数据链路层):内部维护一张 MAC 地址表(起初MAC地址表的形成要依靠广播),只把数据包发给目标 MAC 地址(物理层面上,一般不可修改)指向的那台电脑,形成以太网。由于交换机端口数量有限,当PC端逐渐变多时难以支撑,此时可以考虑把交换机A(连接ABCD)与交换机B(连接EFGH)相连,但两个交换机得分别记录 A ~ H 所有机器的映射记录,日积月累,交换机也不堪重负。
    在这里插入图片描述
  • 路由器(网络层):路由器的每一个端口,都有独立的 MAC 地址,现在交换机的 MAC 地址表中,只需要多出一条 MAC 地址 ABAB 与其端口的映射关系,利用32位IP地址(软件层面上,可以修改),就可以成功把数据包转交给路由器了。
    在这里插入图片描述
  • All in all:电脑视角:首先我要知道我的 IP 以及对方的 IP;通过子网掩码判断我们是否在同一个子网;在同一个子网就通过 arp 缓存表(通过 arp 协议广播逐渐完善)获取对方 mac 地址直接扔出去;不在同一个子网就通过 arp 缓存表获取默认网关的 mac 地址直接扔出去。交换机视角:我收到的数据包必须有目标 MAC 地址;通过 MAC 地址表(通过以太网各节点广播逐渐完善)查映射关系;查到了就按照映射关系从我的指定端口发出去;查不到就所有端口都发出去。路由器视角:我收到的数据包必须有目标 IP 地址;通过路由表(各种路由算法 + 人工配置逐步完善)查映射关系;查到了就按照映射关系从我的指定端口发出去;查不到则返回一个路由不可达的数据包。
  • 网络层(IP协议)本身没有传输包的功能,包的实际传输是委托给数据链路层(以太网中的交换机)来实现的
    以上总结参考自wx公众号,欲深入了解请跳转

查看docker网络模式docker network ls,会出现bridgehostnone三种网络模式,创建容器时默认为bridge,可以使用docker network inspect bridge/host/none来查看三种网络的详细信息。

  • 默认bridge:采用veth(virtual ethernet虚拟以太网)技术,以docker0做bridge默认网络模式的网关,每创建一个容器就会产生(一对)veth-pair接口&与docker0在同一网段的一个IP地址.
    在这里插入图片描述
    容器IP是私有地址,外部互联网想要访问容器,需要-p暴露端口.
    在这里插入图片描述
    假设采用默认bridge网络模式创建了两个容器aa(172.17.0.2)和bb(172.17.0.3),进入容器aa,ping 172.17.0.3可以ping通,但在默认bridge模式下无法进行DNS域名解析,即ping bb会ping不通。采用–link进行容器互联 docker run -it --name bb --link aa 镜像name:tag,可以实现bb ping aa的单方向DNS域名解析.
  • 自定义bridge:docker network create -d bridge my_bridge_net创建自定义bridge网络模式,可以使用docker network ls 查看新建的bridge,同样它也有一个类似docker0的桥。docker run -it --network my_bridge_net 镜像name:tag使用自定义bridge创建容器,可以进行DNS域名解析。要想删除此网络,终端输入docker network rm my_bridge_net(无法删除原始的3种网络).
  • host:该模式下容器相当于宿主机的一个应用,无需端口映射互联网也能访问容器(非要映射会遭到拒绝discard).
  • none:以该模式创建的容器只有lo本地回环一种网络,不能联网,被隔离.

docker进阶:

  • Docker Compose :一个在单个服务器或主机上创建多个容器的工具
  • Docker Swarm :可以在多个服务器或主机上创建容器集群服务

(未完待续)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

kubernetes k8s Deployment 控制器配置管理 k8s 红蓝部署 金丝雀发布

目录 1、Deployment控制器&#xff1a;概念、原理解读 1.1 Deployment概述 1.2 Deployment工作原理&#xff1a;如何管理rs和Pod&#xff1f; 2、Deployment资源清单文件编写技巧 3、Deployment使用案例&#xff1a;创建一个web站点 4、Deployment管理pod&#xff1a;扩…

邮箱验证码功能开发

该文章用于记录怎么进行邮箱验证码开发。 总所周知&#xff0c;我们在某些网站进行注册的适合总是会遇到什么填写邮箱&#xff0c;邮箱接收验证码&#xff0c;验证通过后才可以继续注册&#xff0c;那么这个功能是怎么实现的呢&#xff1f; 一&#xff0c;准备工作 1.1 邮箱…

贪心算法(2024/7/16)

1合并区间 以数组 intervals 表示若干个区间的集合&#xff0c;其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间&#xff0c;并返回 一个不重叠的区间数组&#xff0c;该数组需恰好覆盖输入中的所有区间 。 示例 1&#xff1a; 输入&#xff1a;inter…

朴素模式匹配算法与KMP算法(非重点)

目录 一. 朴素模式匹配算法1.1 什么是字符串的匹配模式1.2 朴素模式匹配算法1.3 通过数组下标实现朴素模式匹配算法 二. KMP算法2.1 算法分析2.2 用代码实现&#xff08;只会出现在选择题&#xff0c;考察代码的概率不大&#xff09; 三. 手算next数组四. KMP算法的进一步优化4…

3D可视化赋能智慧园区安防管理,开启园区管理新篇章!

3D可视化&#xff0c;主要是研究大规模非数值型信息资源的视觉呈现&#xff0c;以及利用图形方面的技术与方法&#xff0c;帮助人们理解和分析数据。 传统园区的信息化往往数据不互通&#xff0c;业务难融合&#xff0c;长期面临着服务体验差、综合安防弱、运营效率低、管理成本…

MySQL执行状态查看与分析

当mysql出现性能问题时&#xff0c;一般会查看mysql的执行状态&#xff0c;执行命令&#xff1a; show processlist 各列的含义 列名含义id一个标识&#xff0c;你要kill一个语句的时候使用&#xff0c;例如 mysql> kill 207user显示当前用户&#xff0c;如果不是root&…

烟雾监测与太阳能源:实验装置在其中的作用

太阳光在烟雾中的散射效应研究实验装置是一款模拟阳光透过烟雾环境的设备。此装置能帮助探究阳光在烟雾中的传播特性、散射特性及其对阳光的影响。 该装置主要包括光源单元、烟雾发生装置、光学组件、以及系统。光源单元负责产生类似于太阳光的光线&#xff0c;通常选用高亮度的…

2024牛客暑期多校训练营1 A题(A Bit Common )解题思路

前言&#xff1a; 今年和队友报了牛客暑期多校比赛&#xff0c;写了一下午结果除了签到题之外只写出了一道题&#xff08;A&#xff09;&#xff0c;签到题没什么好说的&#xff0c;其他题我也没什么好说的&#xff08;太菜了&#xff0c;根本写不出来&#xff09;&#xff0c;…

django-ckeditor富文本编辑器

一.安装django-ckeditor 1.安装 pip install django-ckeditor2.注册应用 INSTALLED_APPS [...ckeditor&#xff0c; ]3.配置model from ckeditor.fields import RichTextFieldcontent RichTextField()4.在项目中manage.py文件下重新执行迁移&#xff0c;生成迁移文件 py…

常见的数据分析用例 —— 信用卡交易欺诈检测

文章目录 引言数据集分析1. 读入数据并快速浏览2.计算欺诈交易占数据集中交易总数的百分比3. 类别不平衡对模型的影响3.1 总体思路&#xff08;1&#xff09;数据的划分&#xff08;2&#xff09;训练模型&#xff08;3&#xff09;测试模型&#xff08;4&#xff09;解决不平衡…

django报错(二):NotSupportedError:MySQL 8 or later is required (found 5.7.43)

执行python manage.py runserver命令时报版本不支持错误&#xff0c;显示“MySQL 8 or later is required (found 5.7.43)”。如图&#xff1a; 即要MySQL 8或更高版本。但是企业大所数用的还是mysql5.7相关版本。因为5.7之后的8.x版本是付费版本&#xff0c;贸然更新数据库肯定…

python自动化之用flask校验接口token(把token作为参数)

用到的库&#xff1a;flask 实现效果: 写一个接口&#xff0c;需要token正确才能登录 代码&#xff1a; # 导包 from flask import Flask,request,jsonify,json # 创建一个服务 appFlask(__name__) # post请求&#xff0c;路径&#xff1a;/query app.route(/query, met…

框架设计MVC

重点&#xff1a; 1.用户通过界面操作&#xff0c;传输到control&#xff0c;control可以直接去处理View&#xff0c;或者通过模型处理业务逻辑&#xff0c;然后将数据传输给view。 2.control包含了model和view成员。 链接&#xff1a; MVC框架详解_mvc架构-CSDN博客 MVC架…

【香橙派 Orange pi AIpro】| 搭建部署基于Yolov5的车牌识别系统

【香橙派 Orange pi AIpro】| 搭建部署基于Yolov5的车牌识别系统 一、香橙派 Orange pi AIpro 开发板介绍及实物开箱1.1 开发板介绍1.2 产品详情图1.3 开箱实物 二、开发部署预先准备2.1 镜像介绍与烧录2.2 启动开发板2.3 连接开发板 三、基于Yolov5的车牌识别系统3.1 项目介绍…

前端pc和小程序接入快递100(跳转方式和api方式)====实时查询接口

文章目录 跳转方式微信小程序&#xff08;我以uniapp为例&#xff09;pc api接入说明关于签名计算成功示例 跳转方式 没有任何开发成本&#xff0c;直接一键接入 可以直接看官方文档 https://www.kuaidi100.com/openapi/api_wxmp.shtml 微信小程序&#xff08;我以uniapp为例…

知识图谱与 LLM:微调与检索增强生成

Midjourney 的知识图谱聊天机器人的想法。 大型语言模型 (LLM) 的第一波炒作来自 ChatGPT 和类似的基于网络的聊天机器人&#xff0c;这些模型在理解和生成文本方面非常出色&#xff0c;这让人们&#xff08;包括我自己&#xff09;感到震惊。 我们中的许多人登录并测试了它写…

大数据信用查询有哪些问题值得注意呢?

随着大数据技术的不断发展&#xff0c;大数据信用报告成为一种新型的信用风险检测工具&#xff0c;被很多的银行和机构广泛用于信用风险评估&#xff0c;那大数据信用查询有哪些问题值得注意呢?本文就带大家一起去了解一下&#xff0c;希望对你有一定的帮助。 大数据信用查询这…

数据结构——单链表详解(超详细)(2)

前言&#xff1a; 上一篇文章小编简单的介绍了单链表的概念和一些函数的实现&#xff0c;不过为了保证文章的简洁&#xff0c;小编把它分成了两篇来写&#xff0c;这一篇小编紧接上一篇文章继续写单链表函数功能的实现&#xff1a; 目录&#xff1a; 1.单链表剩余函数的编写 1.…

使用Windows Linux 子系统安装 Tensorflow,并使用GPU环境

在Microsoft Store商店安装Ubuntu 20.04 使用 nvidia-smi 命令查看GPU信息&#xff0c;查看支持的CUDA版本&#xff0c;这里最高支持11.7 安装cuda工具集 进入官网&#xff1a;CUDA Toolkit Archive | NVIDIA Developer&#xff0c;现在对应版本&#xff0c;点击 配置平台&…

【Django+Vue3 线上教育平台项目实战】登录功能模块之短信登录与钉钉三方登录

文章目录 前言一、几个关键概念1.HTTP无状态性2.Session机制3.Token认证4.JWT 二、通过手机号验证码登录1.前端短信登录界面2.发送短信接口与短信登录接口3.Vue 设置interceptors拦截器4. 服务端验证采用自定义中间件方式实现5. 操作流程及效果图如下&#xff1a; 三、通过第三…