[Docker]六.Docker自动部署nodejs以及golang项目

news2025/1/18 2:04:59

一.自动部署nodejs

1.创建node项目相关文件

app.js代码如下:

var express = require('express');

var app=express();

app.get('/',function(req,res){
	res.send('首页update');
})
app.get('/news',function(req,res){
	res.send('首页');
})

//docker做端口映射的时候不要指定ip
app.listen(3000);

 package.json代码如下:

{
  "dependencies": {
    "ejs": "^2.5.6",
    "express": "^4.15.3",
    "socket.io": "^2.0.3",
    "body-parser": "~1.17.1"
  }
}

把上面文件放入/var/www/node下,如图:

2.创建Dockerfile并编写部署代码

在/var/www/node下创建Dockerfile,并编写部署的代码,代码如下:

#下载node镜像
FROM node
#拷贝当前node项目文件夹下所有文件到镜像的/root/wwwroot下
COPY . /root/wwwroot/
#进入镜像/root/wwwroot文件夹下,安装对应的依赖
WORKDIR /root/wwwroot/
#对外暴露的端口
EXPOSE 3000
#安装依赖:通过npm安装依赖时,有时会报错,这时可以通过安装cnpm来安装依赖
RUN npm install cnpm -g --registry=https://registry.nlark.com
RUN cnpm install
#启动程序
CMD node app.js

3.生成nodejs项目的镜像并访问项目

(1).通过docker build -t docker.io/mynode:v1 . 生成node项目镜像

(2).通过docker images查看生成的node项目镜像
REPOSITORY                       TAG                 IMAGE ID       CREATED          SIZE
mynode                 v1                  0efc7b341f5a   28 seconds ago   1.17GB

(3).通过 docker run -it -d -p 3000:3000 0efc7b341f5a生成的镜像运行node项目容器
(4).通过docker ps查看运行的容器
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS                                       NAMES
fe8a6faa796a   0efc7b341f5a   "docker-entrypoint.s…"   5 seconds ago   Up 2 seconds   0.0.0.0:3000->3000/tcp, :::3000->3000/tcp   eloquent_hodgkin
(5).访问node项目
curl 127.0.0.1:3000

首页update

(6).通过浏览器访问node容器项目

#通过docker build -t docker.io/mynode:v1 . 生成node项目镜像
[root@localhost node]# docker build -t docker.oo/mynode:v1 .
Sending build context to Docker daemon  4.096kB
Step 1/7 : FROM node
 ---> 51bf29046591
Step 2/7 : COPY . /root/wwwroot/
 ---> b1f35befd1f9
Step 3/7 : WORKDIR /root/wwwroot/
 ---> Running in 29015c51bf9a
Removing intermediate container 29015c51bf9a
 ---> ecbd455f1189
Step 4/7 : EXPOSE 3000
 ---> Running in 9d3c0d21d1dd
Removing intermediate container 9d3c0d21d1dd
 ---> a38c3cd36bcd
Step 5/7 : RUN npm install cnpm -g --registry=https://registry.nlark.com
 ---> Running in dcb9adf6929b
npm WARN deprecated @npmcli/move-file@2.0.1: This functionality has been moved to @npmcli/fs

added 440 packages in 27s

28 packages are looking for funding
  run `npm fund` for details
npm notice 
npm notice New patch version of npm available! 10.2.0 -> 10.2.4
npm notice Changelog: <https://github.com/npm/cli/releases/tag/v10.2.4>
npm notice Run `npm install -g npm@10.2.4` to update!
npm notice 
Removing intermediate container dcb9adf6929b
 ---> 090e84deba2e
Step 6/7 : RUN cnpm install
 ---> Running in 2f689257b8c9
Recently updated (since 2023-11-11): 1 packages (detail see file /root/wwwroot/node_modules/.recently_updates.txt)

✔ Linked 88 latest versions fallback to /root/wwwroot/node_modules/.store/node_modules
deprecate socket.io@2.5.0 › debug@~4.1.0 Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)
✔ Run 1 script(s) in 204ms.
✔ Installed 4 packages on /root/wwwroot
✔ All packages installed (106 packages installed from npm registry, used 3s(network 2s), speed 872.71KB/s, json 88(574.66KB), tarball 1.56MB, manifests cache hit 0, etag hit 0 / miss 0)
Removing intermediate container 2f689257b8c9
 ---> 445cb2b8c2ab
Step 7/7 : CMD node app.js
 ---> Running in 2db6a0168a74
Removing intermediate container 2db6a0168a74
 ---> 0efc7b341f5a
Successfully built 0efc7b341f5a
Successfully tagged docker.io/mynode:v1
[root@localhost node]# 
[root@localhost node]# docker images
REPOSITORY                       TAG                 IMAGE ID       CREATED          SIZE
mynode                 v1                  0efc7b341f5a   28 seconds ago   1.17GB

#通过生成的镜像运行node项目容器
[root@localhost node]# docker run -it -d -p 3000:3000 0efc7b341f5a
fe8a6faa796a84b938addd9f1bdee02abdae9f90531eb3c05a21a8b1f97dc56a
#docker ps查看运行的容器
[root@localhost node]# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS                                       NAMES
fe8a6faa796a   0efc7b341f5a   "docker-entrypoint.s…"   5 seconds ago   Up 2 seconds   0.0.0.0:3000->3000/tcp, :::3000->3000/tcp   eloquent_hodgkin
#访问node项目
[root@localhost node]# curl 127.0.0.1:3000
首页update[root@localhost node]# 

二.自动部署golang项目

1.部署编译好的golang项目

(1).golang项目打包以及部署回顾

windows下:

golang项目目录下运行go run ./main.go成功后,在浏览器中访问项目,说明项目ok,然后在项目目录中运行以下命令:

#filename: 文件名
set GOOS=windows
set GOARCH=amd64
go build -o "filename"
直接双击 filename.exe 文件执行即可,然后可以通过浏览器访问
linux下:

 golang项目在windows下,需要打包到linux环境去运行,命令如下:

set GOOS=linux
set GOARCH=amd64
go build -o "filename"

 上传到 linux 中赋予执行权限:

chmod -R 777 目录

 然后在项目目录下执行:

./filename
这样也可以通过浏览器访问了
beego 项目打包:
使用命令 bee pack
windows环境下:
        bee pack -be GOOS=windows
通过上面命令生成一个tar的打包文件,解压双击exe后即可通过浏览器访问
而如果需要在linux环境下访问的话,则使用一下命令,生成一个在linux下执行的二进制文件,然后./文件名访问即可:
        bee pack -be GOOS=linux
 

(2).在linux下访问编译好的项目

在windows下编译好beego在linux下访问的二进制文件,然后上传到linux中的/var/www/beegotest目录下,然后./beegotest访问即可

 (3).部署编译好的beego项目

1).在beego项目下创建Dockerfile文件,并写入以下代码
#容器对应的镜像文件的环境
FROM centos:centos7
#把当前bee项目下面的文件拷贝到/root/golang下
COPY . /root/golang
#进入容器/root/golang文件夹
WORKDIR /root/golang
#对外暴露端接
EXPOSE 8080
#启动容器时运行命令:启动bee项目名
ENTRYPOINT ["./beegodemo01"]
2).编译生成bee项目的docker镜像

[root@localhost beegodemo]# docker build -t docker.io/mybeego:v1.0.1 . 
Sending build context to Docker daemon 14.62MB
Step 1/5 : FROM centos
---> 300e315adb2f
Step 2/5 : COPY . /root/golang
---> 78670b1c00eb
Step 3/5 : WORKDIR /root/golang
---> Running in 850af8309c34
Removing intermediate container 850af8309c34
---> f6f6f3ef99ed
Step 4/5 : EXPOSE 8080
---> Running in f1ea11c5c19b
Removing intermediate container f1ea11c5c19b
---> ba11828a3ef1
Step 5/5 : ENTRYPOINT ["./beegodemo01"]
---> Running in 57d921e41e48
Removing intermediate container 57d921e41e48
---> 87700337cda3
Successfully built 87700337cda3
Successfully tagged
3).通过dokcer images查看生成的bee项目docker镜像
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mybeego v1.0.1 87700337cda3 10 minutes ago 224MB
4).通过镜像启动bee项目docker容器
[root@localhost ~]# docker run -it -d -p 8081:8080 mybeego:v1.0.1
a38eb4ed369053f2d6c1209fb9070e388616613916f5dc228f5c539efd3aaeee
5).访问

2.部署未编译的 golang 项目 

在linux的/var/www/goweb目录下创建main.go,以及Dockerfile,然后进行操作

(1).goweb 目录新建 main.go

package main
import ( 
    "fmt"
    "net/http"
)
func handlerHello(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "hello docker")
}
func main() {
    http.HandleFunc("/", handlerHello)
    http.ListenAndServe(":8080", nil)
}

(2).在工程目录 goweb 下,新建 Dockerfile 文件

#获取golang环境镜像
FROM golang
#设置开发人员信息
MAINTAINER "1028538262@qq.com" 
#把goweb工程目录下的所有文件复制到容器/root/goweb下
ADD . /root/goweb
#cd到/root/goweb
WORKDIR /root/goweb

#执行命令
RUN go mod init goweb
RUN go mod tidy
#执行go build生成可执行的二进制文件
RUN go build
#暴露端口
EXPOSE 8080
#执行容器启动命令: 启动goweb项目
ENTRYPOINT ["./goweb"]

(3).通过docker build -t 生成goweb项目镜像

[root@localhost goweb]# docker build -t docker.io/goweb:v4 .
Sending build context to Docker daemon  3.072kB
Step 1/9 : FROM golang
 ---> 4c88d2e04e7d
Step 2/9 : MAINTAINER "1028538262@qq.com"
 ---> Using cache
 ---> aa682bbc7c54
Step 3/9 : ADD . /root/goweb
 ---> 9747f860ba2a
Step 4/9 : WORKDIR /root/goweb
 ---> Running in 4ab2d41b8269
Removing intermediate container 4ab2d41b8269
 ---> 794d6dc76dc4
Step 5/9 : RUN go mod init mygoweb
 ---> Running in 0e7d4e43f510
go: creating new go.mod: module mygoweb
go: to add module requirements and sums:
	go mod tidy
Removing intermediate container 0e7d4e43f510
 ---> 0f5176b44c2a
Step 6/9 : RUn go mod tidy
 ---> Running in 2604b6df8323
Removing intermediate container 2604b6df8323
 ---> c2e03a32a3b7
Step 7/9 : RUN go build
 ---> Running in 0dd305afa33b
Removing intermediate container 0dd305afa33b
 ---> 206024eb719c
Step 8/9 : EXPOSE 8080
 ---> Running in 756480f55fb3
Removing intermediate container 756480f55fb3
 ---> 60d3344f4c27
Step 9/9 : ENTRYPOINT ["./goweb"]
 ---> Running in 6eca95002f82
Removing intermediate container 6eca95002f82
 ---> 3bf4b763b543
Successfully built 3bf4b763b543
Successfully tagged goweb:v4

(4).查看是否生成镜像

通过docker images查看

[root@localhost goweb]# docker images
REPOSITORY                       TAG                 IMAGE ID       CREATED              SIZE
goweb                          v4                  3bf4b763b543   About a minute ago   885MB

(5).启动项目容器

通过docker run -it -d -p 8081:8080 镜像ID启动

[root@localhost goweb]# docker run -it -d -p 8081:8080 3bf4b763b543   
e44585ca40e1c3a19c6f61cac7eee40836e9d7e71d35de49e1449dcacc53959b

(6).查看是否启动容器

通过docke ps查看

[root@localhost goweb]# docker ps
CONTAINER ID   IMAGE          COMMAND     CREATED         STATUS         PORTS                                       NAMES
e44585ca40e1   ee27c58e2ef5   "./goweb"   7 seconds ago   Up 4 seconds   0.0.0.0:8081->8080/tcp, :::8081->8080/tcp   epic_merkle

(7).通过浏览器访问看看是否成功

 (8).进入goweb项目容器查看数据

#通过docker exec -it 进入容器,
[root@localhost goweb]# docker exec -it e44585ca40e1 /bin/bash

#go version 存在,说明容器中已经有golang环境了
root@e44585ca40e1:~/goweb# go version
go version go1.21.4 linux/amd64

#还可以通过go env 查看golang配置常量
root@e44585ca40e1:~/goweb# go env
GO111MODULE=''
GOARCH='amd64'
GOBIN=''
GOCACHE='/root/.cache/go-build'
GOENV='/root/.config/go/env'
GOEXE=''
GOEXPERIMENT=''
GOFLAGS=''
GOHOSTARCH='amd64'
GOHOSTOS='linux'
GOINSECURE=''
GOMODCACHE='/go/pkg/mod'
GONOPROXY=''
GONOSUMDB=''
GOOS='linux'
GOPATH='/go'
GOPRIVATE=''
GOPROXY='https://proxy.golang.org,direct'
GOROOT='/usr/local/go'
GOSUMDB='sum.golang.org'
GOTMPDIR=''
GOTOOLCHAIN='local'
GOTOOLDIR='/usr/local/go/pkg/tool/linux_amd64'
GOVCS=''
GOVERSION='go1.21.4'
GCCGO='gccgo'
GOAMD64='v1'
AR='ar'
CC='gcc'
CXX='g++'
CGO_ENABLED='1'
GOMOD='/root/goweb/go.mod'
GOWORK=''
CGO_CFLAGS='-O2 -g'
CGO_CPPFLAGS=''
CGO_CXXFLAGS='-O2 -g'
CGO_FFLAGS='-O2 -g'
CGO_LDFLAGS='-O2 -g'
PKG_CONFIG='pkg-config'
GOGCCFLAGS='-fPIC -m64 -pthread -Wl,--no-gc-sections -fmessage-length=0 -ffile-prefix-map=/tmp/go-build2427941496=/tmp/go-build -gno-record-gcc-switches'
root@e44585ca40e1:~/goweb# 

3.部署未编译的 beego 项目

(1).查看bee --help,bee自动生成Dockerfile

可以通过bee --help查看帮助文档

     version     Prints the current Bee version
    migrate     Runs database migrations
    api         Creates a Beego API application
    bale        Transforms non-Go files to Go source files
    fix         Fixes your application by making it compatible with newer versions of Beego
    pro         Source code generator
    dev         Commands which used to help to develop beego and bee
    dlv         Start a debugging session using Delve
    dockerize   Generates a Dockerfile and docker-compose.yaml for your Beego application
    generate    Source code generator
    hprose      Creates an RPC application based on Hprose and Beego frameworks
    new         Creates a Beego application
    pack        Compresses a Beego application into a single file
    rs          Run customized scripts
    run         Run the application by starting a local development server
    server      serving static content over HTTP on port
    update      Update Bee

发现可以通过dockerize   参数生成Dockefile文件,当然也可以不通过dockerize自己编写Dockerfile

(2).自己编写Dockerfile

自己编写的Dockerfile: 

#从golang获取镜像
FROM golang
#创建者邮箱
MAINTAINER "1028538262@qq.com"
#赋值beego项目到/root/beegodemo01
COPY . /root/beegodemo01
#进入容器中项目目录
WORKDIR /root/beegodemo01
#配置环境变量
ENV GO111MODULE=on
ENV GOPROXY=https://goproxy.cn,direct
#运行命令:下载beego
RUN go get -u github.com/beego/bee
#暴露端口
EXPOSE 8080
#容器启动命令:运行bee项目
ENTRYPOINT ["bee", "run"]

(3).通过docker build -t 生成bee项目镜像

[root@localhost beegotest]# docker build -t docker.io/beego:1.1 .
Sending build context to Docker daemon  121.3kB
Step 1/9 : FROM golang
 ---> 4c88d2e04e7d
Step 2/9 : MAINTAINER "1028538262@qq.com"
 ---> Using cache
 ---> aa682bbc7c54
Step 3/9 : COPY . /root/beegodemo01
 ---> 3f66273e71e9
Step 4/9 : WORKDIR /root/beegodemo01
 ---> Running in c67b1bb8c951
Removing intermediate container c67b1bb8c951
 ---> d3f44b8e021a
Step 5/9 : ENV GO111MODULE=on
 ---> Running in 8b7b5c5e81d6
Removing intermediate container 8b7b5c5e81d6
 ---> bb6f1cb28746
Step 6/9 : ENV GOPROXY=https://goproxy.cn,direct
 ---> Running in 97b7a35d38c3
Removing intermediate container 97b7a35d38c3
Successfully built 931a238bfbbb
Successfully tagged beego:1.1

(4).通过docker images查看是否生成镜像成功

[root@localhost beegodemo01]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
beego  v3.0.1 931a238bfbbb About a minute ago 1.01GB

(5).通过镜像ID启动bee项目容器

docker run -it -d -p 8083:8080 --name beegodemo 镜像ID

(6).查看是否启动容器成功

[root@localhost beegodemo01]# docker ps
CONTAINER ID IMAGE COMMAND CREATED
1c96e85d3c03 golangimg:v3.0.1 "/bin/sh -c 'bee run'" 7 seconds ago Up 6 s
econds 0.0.0.0:8083->8080/tcp, :::8083->8080/tcp beegodemo

(7).通过浏览器访问看看是否成功

发现操作成功,说明bee项目镜像,容器部署成功

[上一节] [Docker]五.Docker中Dockerfile详解

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

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

相关文章

浏览器页面被恶意控制时的解决方法

解决360流氓软件控制浏览器页面 提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、接受360安全卫士的好意&#xff08;尽量不要选&#xff09;二、拒绝360安全卫士的好意&#xff08;强烈推荐&#xff09;第…

unity教程

前言 伴随游戏行业的兴起&#xff0c;unity引擎的使用越来越普遍&#xff0c;本文章主要记录博主本人入门unity的相关记录大部分依赖siki学院进行整理。12 一、认识unity引擎&#xff1f; 1、Unity相关信息&#xff1a; Unity的诞生&#xff1a;https://www.jianshu.com/p/550…

webpack 中,filename 和 chunkFilename 的区别

filename filename 是一个很常见的配置&#xff0c;就是对应于 entry 里面的输入文件&#xff0c;经过webpack打包后输出文件的文件名。比如说经过下面的配置&#xff0c;生成出来的文件名为 index.min.js。 chunkFilename chunkFilename 指未被列在 entry 中&#xff0c;却…

LangChain 2模块化prompt template并用streamlit生成网站 实现给动物取名字

上一节实现了 LangChain 实现给动物取名字&#xff0c; 实际上每次给不同的动物取名字&#xff0c;还得修改源代码&#xff0c;这周就用模块化template来实现。 1. 添加promptTemplate from langchain.llms import OpenAI # 导入Langchain库中的OpenAI模块 from langchain.p…

springboot323基于Java的美妆购物网站的设计与实现

交流学习&#xff1a; 更多项目&#xff1a; 全网最全的Java成品项目列表 https://docs.qq.com/doc/DUXdsVlhIdVlsemdX 演示 项目功能演示&#xff1a; ————————————————

资产设备管理系统

dtAsset 是一个固定资产设备管理系统&#xff0c;它专为中小企业的需求而设计。该软件提供了对常用资产设备进行信息化管理的功能&#xff0c;并支持自定义设备类型、导入导出数据、维护工作统计、采购管理、文档管理、运维监控 (使用 Zabbix)、知识库等功能。 主要模块 1.系统…

【Rust】快速教程——闭包与生命周期

前言 你怎么向天生的瞎子说清颜色&#xff1f;怎么用手势向天生的聋子描述声音&#xff1f; 鲜花就在眼前&#xff0c;雷鸣就在头顶&#xff0c;对他们来说却都毫无意义 眼睛看不到&#xff0c;鼻子可以嗅闻花香&#xff0c;耳朵听不见&#xff0c;手指可以触碰窗纸的震动。 犯…

QtCreator13源码windows编译

1.下载QtCreator13源码: https://download.qt.io/snapshots/qtcreator/13.0/13.0.0-beta1/installer_source/latest/qt-creator-opensource-src-13.0.0-beta1.zip 2.下载并安装llvm Release LLVM 17.0.5 llvm/llvm-project GitHub 3.系统 要求&#xff1a; Windows 10 (64…

2023OceanBase年度发布会后,有感

很荣幸收到了OceanBase邀请&#xff0c;于本周四&#xff08;11月16日&#xff09;参加了OceanBase年度发布会并参加了DBA老友会&#xff0c;按照理论应该我昨天&#xff08;星期五&#xff09;就回到成都了&#xff0c;最迟今天白天就该把文章写出来了&#xff0c;奈何媳妇儿买…

vue2【axios请求】

1&#xff1a;axios作用 axios&#xff08;发音&#xff1a;艾克c奥斯&#xff09;是前端圈最火的&#xff0c;专注于数据请求的库。 Axios 是一个基于 promise 的 HTTP 库&#xff0c;可以用在浏览器和 node.js 中axios的github:https://github.com/axios/axios 中文官网地址…

ESP32网络开发实例-非接触式水位监测

非接触式水位监测 文章目录 非接触式水位监测1、HC-SR04介绍2、软件准备3、硬件准备4、代码实现在本文中,我们将使用 HC-SR04 超声波传感器和 ESP32 创建一个水位监测网络服务器。 这将是一个非接触式水位测量系统。 首先,我们将介绍HC-SR04 与 ESP32 连接。 使用ESP32对超声…

如何去掉图片上的水印?这三种去水印的方法帮你解决!

当我们从网上看到喜欢的图片&#xff0c;想要保存下来作为头像或者插入到工作汇报中时&#xff0c;却发现下载的图片带有水印。这不仅影响了图片的美观&#xff0c;还可能对图片的可用性造成影响。那么&#xff0c;如何去掉图片上的水印呢? 实际上&#xff0c;现在市面上的很多…

【数据结构】10道经典面试题目带你玩转链表

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:数据结构 ⚙️操作环境:Visual Studio 2022 目录 一.移除链表元素 二.反转链表 三.链表的中间结点 四.链表中倒数第K个结点 五.合并两个有序链表 六.链表分割 七.链表的回文结构 八.相交链表 九.环形链表 一.移…

[Vue3] pinia状态管理

文章目录 1.pinia的介绍2.pinia的配置3.state状态管理3.1 state的基本使用3.2 state的访问 4.getters 1.pinia的介绍 Pinia 是 Vue 的专属状态管理库&#xff0c;它允许你跨组件或页面共享状态。如果你熟悉组合式 API 的话&#xff0c;你可能会认为可以通过一行简单的 export …

梦想编织者——Adobe Dreamweaver

今天&#xff0c;我们来谈谈一款在Adobe系列中推出的一款Adobe Dreamweaver&#xff0c;简称“DW”&#xff0c;中文名称 “梦想编织者”&#xff0c;是集网页制作和管理网站于一身的所见即所得网页代码编辑器。 利用对 HTML、CSS、JavaScript等内容的支持&#xff0c;设计人员…

QGIS003:【05高级数字化工具栏】-要素移动、修改、合并操作

摘要&#xff1a;QGIS地图导航工具栏包括激活高级数字化工具、移动要素、旋转要素、缩放要素、简化要素、添加环、添加部件、填充环、删除环、删除部件、重塑要素、偏移曲线、反转线、裁剪/扩展要素、分割要素、分割部件、合并所选要素、合并所选要素的属性、旋转点符号等选项&…

配电房智能监控系统

配电房智能监控系统是一种集成了互联网、物联网、大数据、人工智能等技术的系统&#xff0c;专门用于对配电房进行全方位、实时的监控和管理。主要是在高压柜、变压器及低压柜智能化的基础上&#xff0c;通过分布在配电室内的各类传感器、采集与通信设备&#xff0c;将各种设备…

【产品应用】一体化伺服电机在系留无人机中的应用

一体化伺服电机是一种将电机、驱动器、编码器结合在一起的伺服系统&#xff0c;具有高精度控制、快速响应和高效运行等优点。系留无人机则是一种通过绳索或链条与地面设施连接的无人机&#xff0c;能够实现长时间的稳定悬停和空中作业。 01.设备简介 电源线牵引装置&#xff1…

人工智能发展前景

随着人工智能的快速发展&#xff0c;这个行业对人才的需求也在不断增长。越来越多的有志之士开始关注人工智能&#xff0c;希望通过自学获得相关技能&#xff0c;进而在人工智能领域找到心仪的职业。本文将探讨人工智能职业发展的前景&#xff0c;并为大家提供自学人工智能的途…

紫色调城市和奔跑人物剪影背景工会工作总结汇报PPT模板

这是一套紫色调城市和奔跑人物剪影背景工会工作总结汇报PPT模板&#xff0c;共33页&#xff1b; PPT模板封面&#xff0c;使用了蓝天白云、城市剪影、奔跑人物剪影背景图片。中间填写工会工作总结汇报PPT标题。界面色彩丰富充满活力。 PowerPoint模板内容页&#xff0c;由31张…