首页 > 其他分享 >使用Docker部署Rust web应用

使用Docker部署Rust web应用

时间:2023-11-14 14:31:39浏览次数:35  
标签:web 文件 映像 应用程序 Rust Docker docker rust

Rust是一种非常快速和安全的系统编程语言,Rust因其web框架的速度而备受关注。在这篇文章中,我们将看到如何使用docker部署Rust web应用程序。

创建项目

使用cargo创建一个新项目:

cargo new --bin rust-docker-project


在Cargo.toml文件中添加依赖项:

[dependencies]
axum = "0.6.6"
tokio = { version = "1.0", features = ["full"] }


Axum是一个用户友好的web框架,它的学习曲线非常小。下面是在Axum框架中实现的最小hello world程序。

use axum::{response::Html, routing::get, Router};
use std::net::SocketAddr;

#[tokio::main]
async fn main() {
    // build our application with a route
    let app = Router::new().route("/", get(handler));

    // run it
    let addr = SocketAddr::from(([0, 0, 0, 0], 3000));
    println!("listening on {}", addr);
    axum::Server::bind(&addr)
        .serve(app.into_make_service())
        .await
        .unwrap();
}

async fn handler() -> Html<&'static str> {
    println!("Request received\nSending response.");
    Html("<h1>Hello from Rust!</h1>")
}



Dockerfile

你可以将dockerfile视为组装应用程序的指导手册。我们编写这条指令,以便运行不同开发环境的任何人都可以用一个命令可靠地重新创建应用程序运行时环境。这有助于减少设置开发环境和部署期间所花费的时间。

FROM rust:latest

WORKDIR /usr/src/myapp
COPY . .
RUN cargo install --path .
CMD ["rust-docker-project"]


RUN是执行构建命令的指令,CMD将在运行容器时执行。dockerfile必须总是以一个from指令开始,该指令指定应用程序的父docker映像。在我们的例子中,最新的rust映像是从docker容器存储库中提取的。

这个Dockerfile只有5行,可以帮助创建应用程序的docker映像。将Dockerfile放置在与cargo相同的目录中。然后运行“docker build -t rust-docker-project .”。这将通过顺序执行dockerfile中的指令来构建docker映像。

.dockerignore

在构建docker映像之前,docker会读取根目录中的.dockerignore文件,并忽略其中指定的文件。该文件将有助于避免复制构建工件和缓存文件,这些文件在运行应用程序时不需要,或者从docker容器中构建。语法类似于.gitignore文件:

target/


Docker-Compose

docker-compose.yaml文件:

services:
  rust-docker:
    image: rust-docker-project
    ports:
      - 3000:3000


docker compose文件有助于避免每次打开容器时在终端中键入冗长的命令。它用于定义多个服务及其环境变量、端口、卷等。

使用docker build命令构建容器后,“docker-compose up”命令用于调出容器并开始监听指定端口中的请求。可以通过访问http://localhost:3000查看托管的网页。HOST_PORT在docker-compose.yaml文件中指定。如图:

使用Docker部署Rust web应用_docker



标签:web,文件,映像,应用程序,Rust,Docker,docker,rust
From: https://blog.51cto.com/u_64214/8368851

相关文章

  • Web_XCTF_WriteUp | pure_color
    题目分析给了个纯白png图片,看来是图片隐写题。按照隐写题的解题思路,依次进行了:打开图片属性寻找flag:未果用010Editor打开文件代码寻找flag及查看文件的开头/结束标志:没有找到flag,标志也分别是png文件的开头/结束标志,没有异常因为这两天重装了虚拟机,所以先用......
  • Docker 树莓派 mysql5.7
    创建my.cnf[mysqld]##server_id=1##binlog-ignore-db=mysql##log-bin=replicas-mysql-bin##binlog_cache_size=1M##binlog_format=mixed##expire_logs_days=7#设置比较表名和数据库名时忽略大小写lower_case_table_names=1max_allowed_packet=125Mmax_c......
  • selenium报错result.webdriverValue.value
    1.示例代码fromseleniumimportwebdriverdriver=webdriver.Chrome()driver.get('http://124.223.30.31:xxx/forum.php')driver.find_element('id','ls_username').send_keys('admin')端口我匿了这个代码是没有问题的,任意其他代码在当前的环境下都是会出现这个错......
  • 欢迎解答-Web开发人员的技能和经验熟悉的前端框架是
    当然,我可以为你提供一些典型的面试问题,以评估Web开发人员的技能和经验。请问你对以下问题有何回答?你最熟悉的前端框架是什么?请分享你在具体项目中使用该框架的经验。你对响应式设计和移动优先的开发有何了解?可以分享你在开发这方面的经验吗?请描述你在使用JavaScript编写复杂交互功......
  • docker异常unable to add return rule in DOCKER-ISOLATION-STAGE-1 chain
    docker重装启动异常 INFO[2021-03-09T15:06:20.839195000+08:00]Loadingcontainers:start.INFO[2021-03-09T15:06:20.885624800+08:00]stoppingeventstreamfollowinggracefulshutdownerror="<nil>"module=libcontainerdnamespace=mobyINFO[2021-......
  • Web实时消息推送的解决方案
      什么是消息推送(push) 推送的场景比较多,比如有人关注我的公众号,这时我就会收到一条推送消息,以此来吸引我点击打开应用。 消息推送(push)通常是指网站的运营工作等人员,通过某种工具对用户当前网页或移动设备APP进行的主动消息推送。消息推送一般又分为web端消息推送和移......
  • rust程序设计(3)结构体相关概念和疑问
    结构体//如何定义结构体structUser{active:bool,username:String,email:String,sign_in_count:u64,}//如何使用结构体letuser=User{ active:true,username:String::from("someusername123"),email:String::from("someone@exampl......
  • Web_BUUCTF_WriteUp | [ACTF2020 新生赛]Include
    题目分析F12打开查看器,只有一个php文件,URL为http://9862c108-f9d1-4746-aeb0-848c1e0d8147.node4.buuoj.cn:81点tips看看,啥也妹有,URL为http://9862c108-f9d1-4746-aeb0-848c1e0d8147.node4.buuoj.cn:81/?file=flag.php完全没有头绪……又能学新东西了!找到一篇大......
  • windows 10 安装ubuntu+docker(不安装desktop docker)步骤
    windows10安装ubuntu+docker(不安装desktopdocker)步骤1.安装wsl2,ubuntu22.04参考网络文档2.powershell里运行wsl3.sudo-i4.curl-fsSLhttps://get.docker.com-oget-docker.sh5.shget-docker.sh6.servicedockerstart7.在2.1通过脚本安装docker时,会出现下面这个问......
  • HTML和webAPI之根据时间和事件来变实现图片的转换
    一:概述在一些前端的设计场景中,我们会发现有很多的场景需要根据时间然后去变换图片。在不同时间都会出现不同的图片。下面来写一个案例,来更换图片,并显示当前的时间(xx年xx月xx日)。二:案例实现在这里需要用到的知识是事件的使用以及JavaScript内置对象(时间函数)的使用。以及时间的......