分享好友 最新动态首页 最新动态分类 切换频道
使用 Docker 打包 Rust Web 服务
2024-12-27 11:21

引言

使用 Docker 打包 Rust Web 服务

   学习Rust四个多月了,打算用Rust重写我之前的web项目。Rust web中文资料非常少,学习之路很是坎坷,很多框架文档少的可怜,甚至有的框架直接没有文档只能依靠源代码里面的运行示例研究。但是不管多困难只要坚持下去就一定会有收获。这篇博客是我这一周学习的收获,它应该可以帮你解决以下几个问题。

1.搭建一个简单web服务运行程序。

2.使用cargo build --release 打包的时候速度很慢甚至出现网络异常的问题。

3.使用cargo build --release 打包的时候配置文件和静态资源找不到的问题。

4.使用debian发布Rust web服务。

5.使用alpine 发布Rust web服务。

 

搭建简单的web服务程序

 这里我使用的是


 2.在控制台运行 cargo run 命令测试项目是否创建成功 正确结果如下图

 3.添加依赖  cargo项目的依赖在Cargo.toml 文件中管理,因为只是为了演示docker发布web,所以这里只添加最基本的两个依赖分别是warp和tokio。完整配置如下:

项目结构图如下:

4.创建一个web服务。完整代码如下: 

结构图如下:

 5.控制台执行cargo run 测试一下结果。注意运行的时候会下载依赖包速度很慢,网络环境差的话很有可能会失败。正确运行结果如下图:

6.浏览器访问地址  http://127.0.0.1:8080/user 查看结果 正确结果如下

到这里一个简单的web应用就搭建完成了。 

 

更换crates.io源

接下来我们来解决第二问题,编译代码的时候因为网络的问题经常失败。原因不用说了cargo默认的源是国外的,这个和npm、maven仓库一样的原因,更换成功国内的镜像就好了。找到你cargo的安装地址,我的电脑是mac 使用brew安装的cargo 默认地是 

如果cargo安装路径下有config配置文件那么只需要将这段代码复制进去(注意如果你的机器默认带有config文件 那么一定不要覆盖掉 在最后面追加就可以了),如果没有config那就自己创建一个。代码如下:

上面这个源是中科大的,还有一个是个人搭建的据说比较稳定,但是我没试过,感兴趣的可以试一下。代码如下

配置好之后直接就生效了,我们来编译测试一下 控制台执行 

如果配置的是第一个源会出现ustc的标记出现这个标记就说明配置成功了。

 

关于 cargo build 后配置文件和静态资源找不到

    web项目我已经习惯了使用yml配置文件,为此我特意自己模仿springboot的配置方式写了一个切换配置文件的功能,运行起来没有任何问题,但是运行编译后的执行程序一直都是提示找不到文件。折腾很久发现把配置文件手动复制的到执行程序的同级目录发现程序能正常运行了。所以我猜想cargo 编译的时候不会把配置文件和静态资源也编译进去,所以我的建议是把配置文件和静态资源放到和src同级目录下这样编译后方便复制和读取配置文件。

 

debian发布Rust web服务 

1.创建debian文件夹。debian文件夹和src同级目录 如下图:

2.创建Dockerfile文件。

项目结构图:

 注意 application.yml 是我特意添加的配置文件用来演示docker发布带有配置文件的项目 这里配置文件没有用到

3.创建.dockerignore文件。注意前面的点.dockerignore文件是用来标记忽略文件夹或文件的。如下图:

 3.在控制台运行docker构建命令 如下:

 构建失败了,看上面这张图使用的源还是默认的地址。rust和java不一样,java一次编译到处运行。我们可以把编译后的jar文件直接打包成docker镜像。而rust在不同的机器编译结果不一样所以我们需要把源代码复制然后在容器里面重新编译,容器默认安装cargo使用的源是默认地址。怎么解决呢?针对这个问题我折腾了很久,想到到能不能在创建容器的时候重新创建或者覆盖容器默认cargo安装路径下的配置文件,我创建一个只复制文件的容器然后登陆容器查看cargo的默认安装路径是 /usr/local/cargo。那么我们来尝试一下能不能实现我们所想的。

1.在debian文件夹下创建config文件内容如下:

项目结构图如下:

 2.更新Dockerfile 文件新增内容如下:

项目结构图如下:

 3.再次执行docker构建命令  sudo docker build -t rust-debian -f https://www.cnblogs.com/jishuzhaichen/p/debian/Dockerfile .   结果如下:

 出现了ustc的标记 但是还是编译失败了 如下图:

 rust编译后会把- 自动转化为_ 所以失败了 我们更新一下Dockerfile 将- 改成_ 如下图:

 4.启动dockder镜像 执行命令如下:

结果如下图:

  5.浏览器访问测试 结果如下

 浏览器访问不到, 我登录容器在容器内部使用curl命令访问能访问到 排查很久发现是rust代码写的有问题:

 在docker容器中使用127.0.0.1就会导致只能容器内部访问 。更新代码如下:

项目结构如下:

  再次重新构建镜像然后启动 查看浏览器已经可以了

 

alpine发布Rust Web服务 

alpine和debian发布流程基本一致 只是配置上稍有不同

1.创建alpine文件夹.

2.创建Dockerfile文件 内容如下:

注意 alpine 容器默认的cargo 安装地址是 /opt/rust/cargo

3.创建config文件内容如下:

注意 和debian的config相比多了两个 配置这个两个配置是alpine容器安装的cargo默认的配置 

4.执行构建docker镜像命令

5.启动镜像。

6.浏览器测试。

 

 

最新文章
网易高管解读Q1财报:希望未来海外市场占比达到50%
5月24日,网易公布了2022年第一季度财报。一季度,网易净收入236亿元人民币;归属于公司股东的净利润为44亿元;研发投入34亿元,研发投入强度达14%。在随后的财报电话会上,网易CEO丁磊、CFO杨昭烜等高管就财报和业务发展做出解读。当投资人
如何利用黄页引流推广网站入口提升业务曝光度
在当今数字化时代,企业正面临日益激烈的市场竞争,尤其是在网络上的营销和推广活动成为了重中之重。许多企业往往忽视了一个传统而有效的工具——黄页。虽然黄页在互联网时代并不如从前那般受宠,但其潜在的引流能力依然不可小觑。充分利用
抖音短剧系统快速搭建,部署上线维护全包,支持媒资管理/广告回传
标题:抖音短剧系统一站式服务,快速搭建,无忧运营!正文:随着短视频行业的蓬勃发展,短剧作为一种新兴的短视频形式,迅速吸引了大量用户的关注。为了帮助广大开发者轻松踏入短剧制作与运营的领域,南阳迈特推出了一款领先的短剧系统——
自动发货fmrte23外置核武2023修改器cdkey在线激活码cdk可汉化key
1个激活码能激活1台电脑!友情提示:发货后不能退款,请谨慎购买!FMRTE 23 下载地址:http://www.fmrte.com/download/fmrte23汉化操作:点击上方菜单中的FMRTE参数设置(Settings),在Language(语言)下拉菜单中选择简体中文,点击上方的Sav
飞奥热水器快速售后24小时人工400-(问题解决) - 生活 - 百科知识-蓝心网
飞奥热水器售后24小时维修服务热线:400-658-8618。飞奥热水器全市各区售后服务点热线号码。☎:400-658-8618飞奥热水器售后服务,秉承“诚信为本、客户至上”的服务态度和“以客户为中心”的服务指导思想,不仅真诚地为用户提供先进、高质
高清美女写真生成神器,不可错过的AI绘图体验!
限时免费,点击体验最近超火的AI生图神器,坐拥3000美女的大男主就是你! https://ai.sohu.com/pc/generate/textToImg?_trans_=030001_yljdaimn 在这个科技迅猛发展的年代,AI正在渗透我们的生活,为我们带来诸多便利与惊喜。就拿生成美女
SEO推广优化:打造品牌,提高排名
  随着互联网的发展,越来越多的企业开始将重心转向网络营销。毕竟,在互联网时代,拥有一个良好的网站和的网络营销策略是必不可少的。而SEO(Search Engine Optimization)作为一种营销手段,被越来越多的企业所重视和采用。那么,如何
百度推广怎么优化
多维度展示多维度展示:制作图文并茂、形象直观的广告内容,便于客户理解,使产品卖点更加突出。好的创意物料能够更加吸引人眼球,为实现广告高的点击率打下扎实的基础,而广告文案创作形式上又有多种表现手法:数据分析数据分析:通过统计
第一导航——让你的上冲浪更高效
在这个信息爆炸的时代,我们每天都要面对海量的网络内容。如何在众多的网站和信息中快速找到自己需要的东西,成为了一项重要的技能。而第一导航就是为了帮助你更高效地上网冲浪而诞生的。什么是第一导航第一导航是一个集合了众多优质网站和
酒泉百度爱采购运营技巧
想要让百度等搜索引擎快速收录,实际上还要了解一下,搜索引擎是干嘛的。搜索引擎就是检索了海量的信息,让用户在搜索某些关键词时,能够快速、准确的找到结果或答案,这就是搜索引擎要做的工作。那么,要想被百度等搜索引擎收录,第一步就
相关文章
推荐文章
发表评论
0评