Lab1 Rust Application
首先熟悉一下Actix-web
,官网有小白代码,直接copy下来,把bind
的地址改成虚拟机ip
,局域网下主机可以访问,效果如下:
构建
echo server
,添加函数:
async fn echo_name(name:web::Path<String>)->impl Responder{
format!("hello,{}",name)
}
然后添加路由:
.route("/echo/{name}", web::get().to(echo_name))
重新编译运行,主机访问虚拟机,效果如下:
添加
cors
:添加[dependencies]
依赖并在main.rs
添加
.wrap(Cors::permissive())
部署swagger editor
,在执行指令:
docker pull swaggerapi/swagger-editor
docker run -d -p 8080:8080 swaggerapi/swagger-editor
后,查看容器并访问:
编写
openAPI
文档定义请求,效果如下:Lab 2 封装rust应用到dockers镜像
添加dockerfile
后执行指令:
docker build -t hello-world .
docker run -p 8088:8088 hello-world
效果如下:(service running
是自己添加的日志)
代码如下:(中间经过修改)
use actix_web::{web, App, HttpServer, Responder,HttpResponse};
use actix_cors::Cors;
use actix_web::middleware::Logger;
async fn echo_name(name: web::Path<String>) -> impl Responder {
format!("Hello {}!", name)
}
async fn index() -> impl Responder {
HttpResponse::Ok().body("Hello world!")
}
#[actix_web::main]
async fn main() -> std::io::Result<()> {
println!("service running...");
HttpServer::new(|| {
App::new()
.wrap(Cors::permissive())
.wrap(Logger::default())
.route("/echo/{name}", web::get().to(echo_name))
.route("/hello",web::get().to(index))
})
.bind("0.0.0.0:8088")?
.run()
.await
}
补充(一点点碎念):和docker
斗了快一天显得自己比较sb
,安装的错误,镜像被墙(第二天才发现群里有镜像,像个小丑),容器运行的问题。。。一堆,然后比较欣慰的是研究虚拟机走主机代理也研究了半天,最后发现如果主机代理软件有Tun
模式,会在代理软件上建一个虚拟网卡,主机的所有进程包括虚拟机,都会被重定向到这里,不需要配虚拟机网络了,体验良好,不过VMWare
还是比较笨重,性能堪忧,也有点麻烦,后面研究下wsl
吧
探究:尝试 docker run
增加 -d
参数,他直接返回到了命令行,为什么
-d
: 后台运行容器(即分离模式),这使得容器在启动时不会占用终端,查看容器可以看到正在运行