lsj Lab记录

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: 后台运行容器(即分离模式),这使得容器在启动时不会占用终端,查看容器可以看到正在运行

2 个赞

好诶