Docker入门二(应用部署、迁移与备份、DockerFile、docker私有仓库、Docker-Compose)

文章目录

  • 一、应用部署
    • 1.MySQL部署
    • 2.Redis部署
    • 3.Nginx部署
  • 二、迁移与备份
    • 1.容器做成镜像
    • 2.镜像备份和恢复(打包成压缩包)
  • 三、DockerFile
    • 0.镜像从哪里来?
    • 1.什么是DockerFile
    • 2.DockerFile 构建特征
    • 3.DockerFile命令描述
    • 4.构建一个带vim的centos镜像案例
    • 5.DockerFile构建Django项目
  • 四、docker私有仓库
    • 1.镜像传到官方仓库
    • 2.镜像分层
    • 3.私有仓库创建
      • docker搭建私有仓库(registry,这个是没有图形化界面)
  • 五、Docker-Compose介绍及下载
    • 1.介绍docker-compose
    • 2.下载docker-compose
    • 3.docker-compose常用命令
  • 六、使用docker-compose部署flask-redis项目

一、应用部署

1.MySQL部署

	'在dokcer中部署mysql,以后不需要在宿主机上装mysql'1.做端口映射docker run -id --name=mysql5.7 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=1234 mysql:5.72.做目录映射-如果没有做目录映射,在mysql容器中表数据一旦删除就所有都没有了,一旦做了目录映射,重新创建相同的,数据会在里面还在1.docker pull mysql:5.7  拉取镜像2.mkdir /mysql  # 创建文件夹数据分离  在根目录下mkdir /mysql/conf.dmkdir /mysql/data/'创建好文件 写入配置'3.vim /mysql/my.cnf  # 如果在宿主机上没有安装vim,就使用vi创建'写入数据,就是和本机上面安装的mysql的配置文件差不多参数'[client]default-character-set=utf8[mysqld]user=mysqlcharacter-set-server=utf8default_authentication_plugin=mysql_native_passwordsecure_file_priv=/var/lib/mysqlexpire_logs_days=7sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTIONmax_connections=10004.做目录映射  # 基于镜像运行成容器 端口映射3306 目录映射docker run -di -v /mysql/data/:/var/lib/mysql -v /mysql/conf.d:/etc/mysql/conf.d -v /mysql/my.cnf:/etc/mysql/my.cnf -p 3307:3306 --name mysql5.7 -e MYSQL_ROOT_PASSWORD=1234 mysql:5.75.本地链接好容器mysql5.7,创建库、创建表,插入数据6.关闭容器,删除容器,这样mysql的容器就没有了,但是数据还在宿主机上放着docker stop mysql5.7docker rm mysql5.7'这个时候删除容器 数据还在 只需要再创建一个新的容器 做好目录映射就可以继续使用了,目录保持一致,密码保持一致'

2.Redis部署

	1.docker pull redis 	# 拉取redis镜像,不写版本默认latest2.mkdir /root/data    # 根目录创建data文件夹3.vim /root/redis.conf  # 创建并编辑redis配置文件bind 0.0.0.0daemonize NOprotected-mode yesrequirepass 12344.运行创建-启动容器时,运行的命令是什么 redis-server /etc/redis/redis.conf-在容器运行时,可以自己定制运行命名 举例:docker run -id centos:centos7 lsdocker run -id  -p 6379:6379 --name redis -v /root/redis.conf:/etc/redis/redis.conf -v /root/data:/data redis  redis-server /etc/redis/redis.conf5.运行redis容器,并写入数据,用本地能链接redis的软件链接一下查看,或者直接cmd链接docker exec -it redis /bin/bash'容器redis链接'redis cli  # 链接auth xxxx # 密码'cmd窗口链接查看'redis-cli -h ip地址 -p 端口号auth 密码'resp链接:填入链接名称(随意填)、地址、密码即可'

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

3.Nginx部署

1.docker pull nginx 	# 拉取nginx镜像
'没做映射操作'
2.docker run -id --name=nginx -p 80:80 nginx  # run起容器
3.从win机器浏览器可以访问:xx.xxx.xx:80
4.进入容器内部,修改index    /usr/share/nginx/htmldocker exec -it nginx /bin/bash
5.修改index.htmlvi、vim、yum都没有因为不是Centos系统apt-get updateapt-get install vim
'做映射操作'
6.做目录映射# /usr/share/nginx/html-docker run -id --name nginx1 -p 8088:80 -v /root/html:/usr/share/nginx/html nginx-cd /root/html-vi index.html  随便填入html文本 <h1>hello world!</h1>-进入到容器内部后到/usr/share/nginx/html目录就可以看到映射过来的index.html文件了'以后只需要修改宿主机的/root/html 路径,看到页面就是修改后的'

在这里插入图片描述
在这里插入图片描述

二、迁移与备份

1.容器做成镜像

	-镜像从哪来的?1 docker pull 拉的2 通过容器打包成镜像-centos镜像运行成容器---》装了vim-把装了vim的容器---》打包成镜像-以后拿到这个镜像--》再运行成容器,都会带vim命令3 Dockerfile构建-容器保存为镜像-运行一个centos容器docker run -id --name centos_vim centos:centos7-在容器中装vimdocker exec -it a6e240 /bin/bashyum install vim -y-把容器做成镜像(centos+vim)  需要退出容器,在宿主机上操作docker commit 容器名 镜像名docker commit centos_vim centos_vim-把centos_vim 容器删除docker rm centos_vim -f-基于新构建的镜像,运行成容器docker run -id --name centos_vim centos_vim:latest-进入到容器中,查看,软件都在docker exec -it c3e633bd1 /bin/bash

2.镜像备份和恢复(打包成压缩包)

	'镜像的备份和恢复'-把镜像做成压缩包docker save -o 压缩包名	镜像名/镜像iddocker save -o mynginx.tar nginx  	# 把镜像做成tar文件-删除原有镜像-把备份的镜像恢复docker load -i 压缩包名docker load -i mynginx.tar			# 把压缩包load成镜像

三、DockerFile

0.镜像从哪里来?

	1 远程仓库拉取的 docker pull   (hub.docker---》搭建私有仓库)2 用容器做成的镜像 docker commit 3 把备份的恢复 docker load4 使用Dockerfile来构建(这种多)

1.什么是DockerFile

Dockerfile其实就是根据特定的语法格式撰写出来的一个普通的文本文件
利用docker build命令依次执行在Dockerfile中定义的一系列命令,最终生成一个新的镜像(定制镜像)文件名必须叫Dockerfile。

Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像。

  1. 对于开发人员:可以为开发团队提供一个完全一致的开发环境;
  2. 对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作了;
  3. 对于运维人员:在部署时,可以实现应用的无缝移植。

2.DockerFile 构建特征

1.DockerFile必须具备一个FROM命令来进行构建
2.每一个Dockerfile命令都会构建一层镜像(本质上是每一层都会启动一个容器,执行完命令后,将容器进行提交后,产生新的镜像层)
3.通过查看下载下来的镜像,发现历史层信息的层ID是missing,其实是因为原本的层id只存在于构建镜像的宿主机上,一旦转移镜像后,历史层消息中将只保留最新一层的ID

在这里插入图片描述

3.DockerFile命令描述

	详细指令介绍:https://zhuanlan.zhihu.com/p/419175543'常用命令'FROM: 指定基础镜像RUN: 构建镜像过程中需要执行的命令。可以有多条。docker buildCMD:添加启动容器时需要执行的命令。多条只有最后一条生效。可以在启动容器时被覆盖和修改ENTRYPOINT:同CMD,但这个一定会被执行,不会被覆盖修改。:为镜像添加对应的数据。MLABELAINTAINER:表明镜像的作者。将被遗弃,被LABEL代替。ENV:设置执行命令时的环境变量,并且在构建完成后,仍然生效ARG:设置只在构建过程中使用的环境变量,构建完成后,将消失ADD:将本地文件或目录拷贝到镜像的文件系统中。能解压特定格式文件,能将URL作为要拷贝的文件COPY:将本地文件或目录拷贝到镜像的文件系统中。WORKDIR:设置工作目录'''不怎么常用命令'''EXPOSE:设置对外暴露的端口。VOLUME:添加数据卷USER:指定以哪个用户的名义执行RUN, CMD 和ENTRYPOINT等命令ONBUILD:如果制作的镜像被另一个Dockerfile使用,将在那里被执行Docekrfile命令STOPSIGNAL:设置容器退出时发出的关闭信号。HEALTHCHECK:设置容器状态检查。SHELL:更改执行shell命令的程序。Linux的默认shell是[/bin/sh”,-c”],Windows的是[“cmd”,/S”,/C”]'CMD与ENTRYPOINT'1.相同点:只能写一条,如果写了多条,那么只有最后一条生效。容器启动时才运行,运行时机相同。2.不同点:ENTRYPOINT不会被运行的command覆盖,而CMD则会被覆盖。如果我们在Dockerfile中同时写了ENTRYPOINT和CMD,并且CMD指令不是一个完整的可执行命令,那么CMD指定的内容将会作为ENTRYPOINT的参数'ARG 和 ENV'ENV:设置执行命令时的环境变量,并且在构建完成后,仍然生效ARG:设置只在构建过程中使用的环境变量,构建完成后,将消失

在这里插入图片描述
在这里插入图片描述

4.构建一个带vim的centos镜像案例

	'构建一个带vim的centos:7镜像,根路径下有/jack/xx.py'1.在宿主机上创建一个文件(文件名必须叫Dockerfile),文件里面书写下面的-vim Dockerfile'''ENV 环境变量touch 创建文件echo 输出 等同于printecho 'xxx' > /xx.py   > 就是放入到指定文件中mv 1.txt test.txt  mv移动,也可以是重命名copy 复制到指定文件中workdir jack 工作目录,创建完毕后进入时会直接进入到这个目录'''FROM centos:centos7MAINTAINER WhiteGENV name jackRUN yum install vim -y &&\mkdir /jack &&\touch /jack/xx.py &&\echo 'print(hello world)' > /jack/xx.pyCOPY ./test.txt /jack/test.txtWORKDIR /jack'''注意如果在这里使用了CMD命令,例如CMD ['python' './jack/xx.py'],运行容器时会默认加上 /bin/bash -c(可以在docker images 的COMMAND看) 这个是以shell形式,运行时,linux默认会加上的''''然后保存退出,也可以查看一下 cat Dockerfile是否修改内容成功'2.基于dockerfile构建镜像, '.' 是基于当前路径下的Dockerfile 构建镜像  -docker build -t='centos_jack_vim' .3.可以查看是否构建成功镜像   docker images4.基于这个构建的镜像运行成容器# 因为建构的镜像没有写版本,默认就是latest,只要是latest,可写可不写- docker run -id --name xx centos_jack_vim:latest'上面的CMD命令方式运行,会自动加上/bin/bash -c 所以我们可以修改直接在把镜像运行成容器时添加启动命令即可''docker run -id --name xx centos_jack_vim python /jack/xx.py'5.进入到容器内-docker exec -it xx /bin/bash6.验证vim,和文件夹,文件是否存在-使用python的方式查看环境变量1.python中,导入模块 import os2.os.environ.get('name')  # 获取对应环境变量-使用shell命令查看环境变量echo $name  # 使用echo输出即可

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.DockerFile构建Django项目

	'在公司中,使用Docker开发的工作流程:'1.开发完一个Django项目2.然后在项目路径下新建Dockerfile,编辑下面内容:FROM python:3.8MAINTAINER WhiteGWORKDIR /softCOPY ./requirements.txt /soft/requirements.txtRUN pip install -r requirements.txt -i https://pypi.doubanio.com/simpleCMD ["python","manage.py","runserver","0.0.0.0:8080"]3.把代码提交到git/或者私有仓库中'这里我以git 为例'-git init # 初始化-然后git仓库创建新的空仓库,然后粘贴对应的命令-git add .-git commit -m '' # 提交到版本库-git push origin master 4.在部署项目的机器上,clone(克隆)项目-在部署项目的机器上安装 yum install git-git clone https://gitee.com/xxxx/xxxxx.git5.构建镜像 ,cd到对应的文件夹中 执行构建命令-docker build -t='django_books' .   # 点表示从当前路径的Dockerfile中构建镜像6.把刚刚构建的镜像运行成容器,并做目录映射、端口映射-docker run -id --name=books -v /root/docker_books:/soft -p 8080:8080 django_books:latest"""如果镜像不是django_books目录下构建的,它是找不到dockerfile文件的解决方法:停止容器  删除容器  删除镜像  切到books下新构建新镜像"""7.这样直接访问宿主机的8080端口就能看到项目的前端页面了8.后续只需要开发人员继续提交代码到仓库(push)9.运维人员在部署的机器上拉取仓库代码(pull),然后重启容器,这样就可以直接看到最新的页面了-注意需要再第一次拉取的项目文件夹中拉取,否则无效-cd docker_books -git pull origin master-docker restart books # 重启容器'''注意:如果是开发修改了项目依赖,然后修改requirements.txt,就需要重写构建镜像,然后在运行容器的操作了,如果是开发修改代码逻辑,为了做版本区分,也是需要做新版本镜像,这样也是需要重构新镜像'''

四、docker私有仓库

docker官方提供的远程仓库,可以把自己定义的镜像传上去,就是自己的私有镜像(可公开)。公司做的镜像一般不放在远程仓库,会放在公司自己搭建私有仓库(把公司制作的镜像传到私有仓库)

1.镜像传到官方仓库

0步:在远端创建仓库第一步:给镜像打标签docker tag 本地镜像名:标签  你的名字/镜像名字:标签例如:docker tag centos:centos7   0jchen/centos7:latest第二步:登录到远程仓库(官方的hub.docker)docker login  # 输入注册的docker官方账号和密码第三步:将镜像提交docker远程仓库docker push 0jchen/centos7:latest第四步:别人就可以下载了docker pull 0jchen/centos7:latest

2.镜像分层

每一个Dockerfile命令都会构建一层镜像(本质上是每一层都会启动一个容器,执行完命令后,将容器进行提交通过查看下载下来的镜像,发现历史层信息的层ID是missing,其实是因为原本的层id只存在于构建镜像的宿主机上,一旦转移镜像后,历史层消息中将只保留最新一层的ID.

	'只要执行一个命令就会多一层,例如:'-RUN yum install vim -y-RUN yum install git -y-这样就会多出好几层,这也是为什么我上面的一个案例里面会把RUN命令都合并的写(&&),这样能减少镜像分层的层数'查看镜像分层的命令'docker history  镜像名:版本'而分层少的的好处:构建快,分发方便,如果本地有某一层了,这一层就不需要下载了''所以以后:Dockerfile写命令,建议多条命令合为一条,这样就只会生成一层,例如:'-使用了\就是换行,这样在Dockerfile文件中就可以换行写,不然就只能一行的写,观看效果不好RUN python -m pip install --upgrade pip &&\python -m pip install --upgrade setuptools &&\pip install -r requirements.txt

在这里插入图片描述

3.私有仓库创建

企业级的私有仓库Harbor (有图形化界面,跟hub.docker 很像),harbor部署与使用具体自行搜索即可

docker搭建私有仓库(registry,这个是没有图形化界面)

	'Harbor就是封装了Docker的registry v2,然后做了图形化界面'这里就演示搭建一个registry私有仓库'搭建步骤:(使用docker搭建docker私有仓库)'1.拉取registry镜像docker pull registry2.registry镜像运行成容器docker run -di --name=registry -p 5000:5000 registry3.这是个web服务端,所以需要从浏览器中访问它-打开浏览器 输入地址http://10.0.0.110:5000/v2/_catalog看到{"repositories":[]} 表示私有仓库搭建成功并且内容为空4.修改daemon.jsonvi /etc/docker/daemon.json  # 这个之前创建的时候配置过国内镜像下载# 配置私有仓库的地址,就是ip地址+端口号{"insecure-registries":["10.0.0.110:5000"]  } 5.重启docker和重启容器,让配置生效systemctl restart dockerdocker start registry6.把某个镜像tag成私有仓库的镜像docker tag 镜像名字/id IP地址:端口/私有仓库镜像名:版本  # 版本可以不填,默认latestdocker tag django_books 10.0.0.110:5000/django_books7.提交到私有仓库docker push 10.0.0.110:5000/django_books8.其他人,只要配置了私有仓库就可以直接拉取docker pull 10.0.0.110:5000/django_books

五、Docker-Compose介绍及下载

1.介绍docker-compose

使用docker部署项目时,会存在一个问题,例如一个Django项目中,把mysql、redis都放在一个容器中,之后不好使用服务,如果每个服务放在一个容器,批量管理多个容器,比较难操作,于是出现了docker-compose

docker-compose是一个能一次性定义和管理多个Docker容器的工具,单机容器编排【定义和管理】。Compose中定义和启动的每一个容器都相当一个服务(service),Compose中能定义和启动多个服务,且它们之间通常具有协同关系。管理方式:

  1. 使用YAML文件来配置我们应用程序的服务。
  2. 使用单个命令(docker-compose up),就可以创建并启动配置文件中配置的所有服务。

多容器编排的工具:

	-docker swarm:公司里用的不多-k8s是多机容器编排工具,go语言写了k8s

2.下载docker-compose

安装docker-compose (可执行文件,放在了github上,下载下来即可,速度很慢)
https://github.com/docker/compose/releases
'然后找到自己想要的对应版本的docker-compose复制链接即可,例如docker-compose-linux-x86_64 v2.24.6版本'
https://github.com/docker/compose/releases/download/v2.24.6/docker-compose-linux-x86_64-使用压缩包形式下载
1.在docker上安装yum install wget -ywget https://github.com/docker/compose/releases/download/v2.24.6/docker-compose-linux-x86_64
2.本地下载上传到docker上
'因为去github官方下载很慢,所以我这里选择自己在本地下载好,使用yum install lrzsz软件'rz 从本地文件中导入进来-复制目录
'想在任意路径下执行docker-compose都有相应反应,就需要把可执行文件放到环境变量所在的目录下'
cp ./docker-compose /usr/local/bin/docker-compose 
/usr/local/bin/ 这个目录就是在环境变量当中-给执行的权限
chmod +x /usr/local/bin/docker-compose
'''
+x linux中的执行权限,具体可自行查找资料
ls -al  查看权限
rwx    rwx    rwx
属主   属组   其他r:read 读权限 w:wirte 写权限x:执行权限chmod +x 表示添加执行权限
chmod +r 表示添加读权限
chmod +w 表示添加写权限属主   属组  所有人
chmod  777   文件名   777就是最高权限三个rwx全都有--------------------rwx   rwx   rwx
000	  000   000  使用二进制来表示每个rwx的三位,二进制只有0、1
(逢二进一[第一位需要到二就第二位为一],到第二位进第三位也是逢二进一),所以一个rwx就需要7,因此三个rwx就是777例如:chmod 555 文件名
当rwx中有为零的则用-表示,如果全为零---表示
r-x  r-x  r-x
101  101  101
这个例子就是表示只有当前文件的所有的读权限和执行权限
'''  -这样以后在任意位置敲docker-compose都可以'''
补充:使用epel源 (epel源为“红帽系”的操作系统提供的额外的软件包,适用于RHEL,CentOS)
我们正常下载就去centos系统对应的仓库下载(别的系统就去它对应的系统仓库下载)
但是仓库的软件不够全面,只提供了一些常规的
这就是为什么要使用epel源,epel源,是一个扩展源,这个源仓库软件非常多,像nginx、redis等等都可以直接下载
这个源唯一的缺点就是不能指定下载的镜像版本具体如何下载及配置自行查找资料,yum install -y epel-release 安装
'''

在这里插入图片描述
在这里插入图片描述

3.docker-compose常用命令

	常用命令# 启动管理容器docker-compose up  # 会自动搜索当前路径下的 docker-compose.yml文件docker-compose -f 指定文件 updocker-compose up -d  # 后台执行,一般我们看日志输出,不用这个docker-compose stop  # 停止,不会删除容器和镜像docker-compose down # 停止,并删除关联的容器docker-compose start  # 启动yml文件管理的容器docker-compose ps    # 正在运行的容器docker-compose images # docker-compose管理的镜像docker-compose exec yml文件中写的service /bin/bash  # 进入到容器内

六、使用docker-compose部署flask-redis项目

flask项目,使用redis服务---->2个容器

1. 新建flask项目app.py

from flask import Flask
from redis import Redis
import osapp = Flask(__name__)
# redis = Redis(host=os.environ.get('REDIS_HOST', '127.0.0.1'), port=6379)
# 容器的主机名---》flask容器和redis容器是能ping通的(同一个网段),可以通过ip ping 也可以通过主机名ping
redis = Redis(host='redis', port=6379)@app.route('/')
def hello(): redis.incr('hits')return '你好! 查看 %s 次\n' % (redis.get('hits'))if __name__ == "__main__":app.run(host="0.0.0.0", port=5000, debug=True)

2. 编写Dockerfile构建flask项目

FROM python:3.9
WORKDIR /app
COPY . /app
RUN pip install flask redis -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
EXPOSE 5000
CMD [ "python", "app.py" ]# 构建出镜像,一会统一使用 docker-compose构建

3. 编写docker-compose 的yml文件docker-compose.yml

'注意,必须要缩进好'
version: "3"
services:redis:image: redisweb:build:context: .dockerfile: Dockerfileports:- 8080:5000environment:REDIS_HOST: redis

4. docker-compose启动

1.使用docker-compose构建并启动(一键部署:redis,和flask ,每个都在一个容器中)docker-compose up
2.ping redis  连接# 进入到了web,ping redis# 安装ping命令,apt-get updateapt-get install inetutils-pingping redis3.这样删除后,在使用docker-compose up可以直接一键自动部署好docker-compose up-构建flask镜像-reids镜像如果不存在,就会拉取-启动flask-启动redis

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

PC-DARTS: PARTIAL CHANNEL CONNECTIONS FOR MEMORY-EFFICIENT ARCHITECTURE SEARCH

PC-DARTS&#xff1a;用于内存高效架构搜索的部分通道连接 论文链接&#xff1a;https://arxiv.org/abs/1907.05737 项目链接&#xff1a;https://github.com/yuhuixu1993/PC-DARTS ABSTRACT 可微分体系结构搜索(DARTS)在寻找有效的网络体系结构方面提供了一种快速的解决方案…

[java基础揉碎]断点调试

一个实际需求: 1.在开发中&#xff0c;新手程序员在查找错误时&#xff0c;这时老程序员就会温馨提示&#xff0c;可以用断点调试&#xff0c; 一步一步的看源码执行的过程&#xff0c;从而发现错误所在。 2.重要提示:在断点调试过程中&#xff0c;是运行状态&#xff0c;是以…

TCP-IP 知识汇总

开放式系统互联模型------国际化标准组织ISO提出----协议组&#xff08;协议模型&#xff09; 应用层&#xff1a;接收用户数据&#xff0c;人机交互的接口 表示层&#xff1a;将编码转换为二进制&#xff08;加密、解密&#xff09;---统一格式 会话层&#xff1a;针对传输…

一维差分(模板)

差分是前缀和的逆运算&#xff0c;对于一个数组a&#xff0c;其差分数组b的每一项都是a [ i ]和前一项a [ i − 1 ]的差。 注意&#xff1a;差分数组和原数组必须分开存放&#xff01;&#xff01;&#xff01;&#xff01; #include <iostream> using namespace std;t…

PCL安装(C++)并配置vs

准备工作&#xff1a; 1.PCL下载包(此教程使用PCL1.11.0) 3.visual studio(此教程使用vs2019) PCL下载&#xff1a; 1、找到自己适合的PCL版本,我选择的是PCL1.11.0。 1.1 Github下载&#xff1a;Releases PointCloudLibrary/pcl GitHub 1.2 百度网盘&#xff1a;https://pan…

FDTD液晶折射率各项异性表示方法

由于FDTD的数据都是沿坐标轴的&#xff0c;各向异性材料的参数也需要根据坐标轴来输入。 首先要了解坐标变换。 坐标变换 这里以二维坐标变化为例。 矢量下我们可以发现OP可在两个坐标系下分别表示 接下来将两个坐标相互关联&#xff0c;这里以Xb举例&#xff0c;Yb同理 注…

Transformer中注意力层和位置感知前馈层的分工与合作

1. 注意力层和位置感知前馈层的分工与合作 在Transformer模型中&#xff0c;注意力层&#xff08;自注意力机制&#xff09;和位置感知前馈层&#xff08;Position-wise Feed-Forward Networks, FFNs&#xff09;分别承担着不同的任务&#xff1a; 注意力层&#xff08;自注意…

SQLiteC/C++接口详细介绍之sqlite3类(六)

快速前往文章列表&#xff1a;SQLite—系列文章目录 上一篇&#xff1a;SQLiteC/C接口详细介绍之sqlite3类&#xff08;五&#xff09; 下一篇&#xff1a;SQLiteC/C接口详细介绍之sqlite3类&#xff08;七&#xff09; 19. sqlite3_changes与sqlite3_changes64 是SQLite中用…

用Windows server2022实现批量装机(原理server系列通用)

本篇文章将手把手教会大家从Windows server的安装到批量安装环境的部署&#xff08;我将使用vmware进行操作&#xff0c;物理机过程相同&#xff09; Windows server2022系统镜像可以从msdn和hellowindows下载 MSDN, 我告诉你 - 做一个安静的工具站 (itellyou.cn) &#xff08…

数据仓库核心:揭秘事实表与维度表的角色与区别

文章目录 1. 引言2. 基本概念2.1 事实表&#xff08;Fact Table&#xff09;2.2 维度表&#xff08;Dimension Table&#xff09; 3. 两者关系4. 为什么要有做区分5. 写在最后 1. 引言 前篇我们深入探讨了Hive数据仓库中的表类型&#xff0c;包括内部表、外部表、分区表、桶表…

HarmonyOS鸿蒙开发常用4种布局详细说明

介绍一下鸿蒙开发常用4种布局 1、线性布局 2、层叠布局 3、网格布局 4、列表布局 ​1. 线性布局&#xff08;Column/Row&#xff09; 线性布局&#xff08;LinearLayout&#xff09;是开发中最常用的布局&#xff0c;通过线性容器Row&#xff08;行&#xff09;和Column&…

【数据结构七】堆与PriorityQueue详解

堆 在Java中有一种数据结构基于队列&#xff0c;并保证操作的数据带有优先级&#xff0c;该数据结构应该提供了两个最基本的操作&#xff0c;一个是返回最高优先级对象&#xff0c;一个是添加新的对象。这种数据结构就是优先级队列(Priority Queue)。它的底层使用了堆这种数据结…

数学与计算机(2)- 线性代数

原文&#xff1a;https://blog.iyatt.com/?p13044 1 矩阵 NumPy 中 array 和 matrix 都可以用于储存矩阵&#xff0c;后者是前者的子类&#xff0c;array 可以表示任意维度&#xff0c;matrix 只能是二维&#xff0c;相当于矩阵专用&#xff0c;在一些矩阵的运算操作上较为直…

openEular入门操作(仅供学习哦~)

如何登录Linux&#xff1f; shell简介 修改密码 Linux用户 bash shell快捷操作 进入openEular&#xff0c;输入账号密码。 命令ip addr 进入putty&#xff0c;输入查到的ip&#xff0c;使用ssh。即可远程登录 修改密码&#xff0c; 修改用户&#xff08;passwd 用户名字&…

Secure MIMO Communication Relying on Movable Antennas

文章目录 IV. SIMULATION RESULTSA. Simulation SetupB. Convergence Behaviour of the Proposed AlgorithmsC. Baseline SchemesD. Performance Analysis Compared to Baseline Schemes IV. SIMULATION RESULTS 在本节中&#xff0c;仿真结果验证了所提出算法的有效性&#x…

Python 多线程大批量处理文件小程序

说明 平时偶尔需要进行重复性的对文件进行重命名、格式转化等。假设以文件复制功能作为目标&#xff0c;设计一个小程序使用多线程对文件进行批量复制。&#xff08;其实以后主要目标是针对Realsense的raw文件进行批量的转化&#xff0c;并借助多线程加速&#xff09; 代码 i…

FileZillaClient连接被拒绝,无法连接

1.ECONNREFUSED - 连接被服务器拒绝 2、无法连接FZ时&#xff0c;判断没有ssh 更新源列表&#xff1a; sudo apt-get update 安装 openssh-server &#xff1a;sudo apt-get install openssh-server 查看是否启动ssh&#xff1a;sudo ps -e | grep ssh

html5cssjs代码 023 公制计量单位进位与换算表

html5&css&js代码 023 公制计量单位进位与换算表 一、代码二、解释 这段HTML代码定义了一个网页&#xff0c;用于展示公制计量单位的进位与换算表。 一、代码 <!DOCTYPE html> <html lang"zh-cn"> <head><meta charset"utf-8&quo…

【全面了解自然语言处理三大特征提取器】RNN(LSTM)、transformer(注意力机制)、CNN

目录 一 、RNN1.RNN单个cell的结构2.RNN工作原理3.RNN优缺点 二、LSTM1.LSTM单个cell的结构2. LSTM工作原理 三、transformer1 Encoder&#xff08;1&#xff09;position encoding&#xff08;2&#xff09;multi-head-attention&#xff08;3&#xff09;add&norm 残差链…

OpenHarmony4.0对RK3566的烧写过程

前面已经编译的过程搞了比较长的时间,因为遇到了不少问题,老是编译出错,后来经过努力还是编译成功了。 我这里主要针对RK3566的Purple Pi OH开发板,如下图: 因为开源鸿蒙里没有针对这个板的特殊配置,需要下载下面这个文件: purple-pi-oh-patch.zip 这个文件里包含了可…