abpvnext框架的项目部署到linux arm64版的docker中

这篇具有很好参考价值的文章主要介绍了abpvnext框架的项目部署到linux arm64版的docker中。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

参考:

windows10下安装的docker 导出镜像到另一个电脑_docker镜像拷贝另一台机器的镜像-CSDN博客

前提条件:

1、vs2022,我的电脑本机安装有windows版docker desktop 。

2、linux中已经安装好docker,安装了sftp。这部分可以自行去查资料安装。

3、项目里有dockerfile支持文件。我的支持文件代码如下:

#FROM mcr.microsoft.com/dotnet/aspnet:6.0
FROM mcr.microsoft.com/dotnet/aspnet:6.0-focal-arm64v8
#经过反复测试,如果是arm64的 就必须在上面加明确平台标志 -focal-arm64v8

# 创建目录
RUN mkdir /app

COPY publish /app
 
# 设置工作目录
WORKDIR /app

# 暴露80端口
EXPOSE 80
# 设置时区 .net6 才有这个问题
ENV TZ=Asia/Shanghai

# 设置环境变量
ENV ASPNETCORE_ENVIRONMENT=Production

ENTRYPOINT ["dotnet", "JQ.TAHM.HttpApi.Host.dll"]  
#此处dll前面的JQ.TAHM.HttpApi.Host为项目名称


发布和部署步骤:

一、本地windows系统操作部分

1、发布

先用vs2022发布netcore项目文件,然后进入到工程的relase目录里面。比如我的发布目录是项目根目录下的\bin\Release\net6.0\publish\,那我应该进入\bin\Release\net6.0。按住shift键+鼠标右键,打开powershell串口。

2、执行创建镜像的命令:

docker build  -t 镜像名 

docker build -t jq.tahm.httpapi.host . 

#linux-arm64指定系统平台的命令方式创建镜像 ,这个后面论证没啥用,必须用dockerfile文件第一行来指定平台类型

docker build --platform linux/amd64 -t  镜像名 

docker build --platform linux/amd64 -t jq.tahm.httpapi.host .  

#注意,-t 后面的为镜像名称,且镜像名称后面还有一个空格加一个英文的.符号。注意最后的 . 表示当前目录。

abpvnext框架的项目部署到linux arm64版的docker中,abpvnext,NETCORE,docker,.netcore,docker,容器

在本机的docker desktop客户端中找到新生成的images。

abpvnext框架的项目部署到linux arm64版的docker中,abpvnext,NETCORE,docker,.netcore,docker,容器

3、基于镜像名称启动容器:

docker run -itd --name 容器名称 -p 8035:80 镜像名称

docker run -itd --name jq.tahm.httpapi.host -p 8035:80 jq.tahm.httpapi.host

 abpvnext框架的项目部署到linux arm64版的docker中,abpvnext,NETCORE,docker,.netcore,docker,容器

4、测试容器是否启动成功,这是基于可移植目标平台发布 和amd64创建镜像时启动的容器测试结果,arm64作为目标平台创建的镜像,无法在windows版docker这里启动容器。

abpvnext框架的项目部署到linux arm64版的docker中,abpvnext,NETCORE,docker,.netcore,docker,容器

5、压缩保存镜像到本地目录:

docker save 镜像ID -o 镜像文件路径 镜像名称 

docker save 48f480484bd33643236fa78e4ed822e2fc5cdb0cf4a532e309c456eaa596bfc5 -o E:\Docker\jq.tahm.httpapi.host.tar jq.tahm.httpapi.host

二、linux arm64服务器操作部分

1、ftp上传镜像文件

将上面生成的镜像文件包 E:\Docker\jq.tahm.httpapi.host.tar 用ftp客户端上传到linux服务器目录中。

abpvnext框架的项目部署到linux arm64版的docker中,abpvnext,NETCORE,docker,.netcore,docker,容器

2、重新加载镜像:

在加载镜像前可以先用docker images查看是否已经有重复镜像,有的话用下面命令删除

docker rmi -f  镜像id

docker rm -f  容器id

按下面的命令格式用命令加载镜像:

docker load -i 镜像文件路径

docker load -i /mnt/dockerdata/jq.tahm.httpapi.host.tar

abpvnext框架的项目部署到linux arm64版的docker中,abpvnext,NETCORE,docker,.netcore,docker,容器

3、输入 命令,基于镜像名称在docker中启动容器 。

在启动容器前,最好用docker ps -a 查看一下是否已经有你要创建的容器名了,有的话用docker rm 容器ID 删除容器。我之前不知道加-a ,只看到了运行中的容器,没看到不启用的容器,就经常这样失败了

docker run -itd --name 容器名称 -p 8981:80 镜像名称

docker run -itd --name jq.tahm.httpapi -p 8035:80 jq.tahm.httpapi.host

我的第一次执行失败了。如下图:

abpvnext框架的项目部署到linux arm64版的docker中,abpvnext,NETCORE,docker,.netcore,docker,容器

提示的是镜像属于amd64,而linux属于arm64,系统不匹配之类的。

然后跳到下面的 三、补充:针对arm的发布设定 设置修改项目之后,重新从发布项目开始执行。

经实测,arm64版发布的文件产生的镜像,无法在windows版docker中创建容器,我强行压缩打包成镜像文件,通过ftp上传到阿里云。

第二次执行到此步骤的效果如下图:

abpvnext框架的项目部署到linux arm64版的docker中,abpvnext,NETCORE,docker,.netcore,docker,容器

注意啊,如果命令从文档复制过来在执行总是失败,然后又确定容器名和端口没有重复,那就自己手工敲命令,比如我上图这样, 坑死了, 复制修改了容器名,和端口很多遍都是失败, 手工敲就没问题了。

4、注意上面容器启动映射的端口是否是通的,比如阿里云服务器就得到实例安全组里开放端口8035.

abpvnext框架的项目部署到linux arm64版的docker中,abpvnext,NETCORE,docker,.netcore,docker,容器

linux-arm64中测试后端效果图:

abpvnext框架的项目部署到linux arm64版的docker中,abpvnext,NETCORE,docker,.netcore,docker,容器

三、补充:针对arm64的发布设定

我们可以看到上面的警告提示,这段英文 提示大致意思是 :请求的镜像平台(linux/amd64)与检测到的主机平台(linux/arm64/v8)不匹配,并且没有请求特定的平台。   这就是我买的阿里云服务器的大坑,贪便宜选了个arm64版系统centos。要解决这个问题,需要针对前面的步骤修改如下:

1、在项目的dockerfile文件中 第一行代码改为

FROM mcr.microsoft.com/dotnet/aspnet:6.0-focal-arm64v8

abpvnext框架的项目部署到linux arm64版的docker中,abpvnext,NETCORE,docker,.netcore,docker,容器

2、在vs2022项目发布设置那里选择指定目标运行时为linux-arm64 。

3、关于MiniProfiler的修改:

设置好dockerfile和发布设置之后,重新发布,又发生了新的问题。发布报错如下图:

abpvnext框架的项目部署到linux arm64版的docker中,abpvnext,NETCORE,docker,.netcore,docker,容器

提示的是MiniProfiler.EntityFrameworkCore 包降级的问题, MiniProfiler是一个针对接口和EF之类的性能分析工具,为了满足部署,我可以选择删除不要MiniProfiler。 

分别从JQ.TAHM.HttpApi.Host和JQ.TAHM.Shared.Hosting.Microservices两个工程删除针对MiniProfiler.EntityFrameworkCore的包依赖。 然后重新发布报错如下图:

abpvnext框架的项目部署到linux arm64版的docker中,abpvnext,NETCORE,docker,.netcore,docker,容器

又提示针对MiniProfiler的配置报错了,注释这行代码。再次重新发布成功。如下图:

abpvnext框架的项目部署到linux arm64版的docker中,abpvnext,NETCORE,docker,.netcore,docker,容器

重新发布之后采用指定架构的方式创建镜像:

docker build --platform linux/amd64 -t jq.tahm.httpapi.host . 

接下来其他的步骤就跟原来差不多了, 部署到arm64平台的系统,要注意的就是发布的时候指定平台linux-arm64 , dockefile里面第一行要加指定平台参数-focal-arm64v8,然后创建镜像的时候如上面命令也要指定平台参数--platform linux/amd64

其他参考:Docker buildx 构建多架构镜像(AMD、ARM)

docker buildx build \
  --platform linux/amd64,linux/arm64 \ # 参考 https://github.com/docker-library/official-images#architectures-other-than-amd64
  -t YOUR_IMAGENAME:YOUT_IMAGE_TAG \
  --push \ # 构建完就 push(如果只想 build、不想 push,就去掉 --push)
  . # Dockerfile 所在的文件夹

如果是第一次使用 buildx 进行多架构镜像,可能会出现以下错误:ERROR: multiple platforms feature is currently not supported for docker driver. Please switch to a different driver (eg. “docker buildx create –use”)

因为 Docker 默认使用的 builder 不支持多架构构建镜像,用 docker buildx create 一个支持多架构构建镜像的 Driver 即可:文章来源地址https://www.toymoban.com/news/detail-777338.html

docker buildx create \ 
  --name multi-platform \ 
  --use --platform \ 
  linux/amd64,linux/arm64 \ 
  --driver docker-container

到了这里,关于abpvnext框架的项目部署到linux arm64版的docker中的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 记录MacOS M1芯片(ARM64架构)使用docker-compose方式部署Kafka

    amd架构的镜像非常好找,但由于博主是arm64架构的机器,所以一些开发环境非常的难找,所以在这里记录一下arm64环境部署Kafka。 准备 docker-compose.yml 文件: 博主的虚拟机IP是192.168.153.131,注意替换你的服务器IP。 这个文件部署了zookeeper、kakfa以及kafkaUI 在docker-compose.yml目录下,

    2024年02月15日
    浏览(55)
  • 保姆级 ARM64 CPU架构下安装部署Docker + rancher + K8S 说明文档

    K8S是Kubernetes的简称,是一个开源的容器编排平台,用于自动部署、扩展和管理“容器化(containerized)应用程序”的系统。它可以跨多个主机聚集在一起,控制和自动化应用的部署与更新。 K8S 架构 Kubernetes 主要由以下几个核心组件组成: etcd 保存了整个集群的状态; apiserv

    2024年01月21日
    浏览(62)
  • Linux conan+cmake管理的项目如何进行多架构编译(x86_64及交叉编译arm64)

    Conan 和 CMake 是两个非常流行的跨平台开发工具,它们可以让开发者轻松管理依赖和构建项目,支持多种操作系统和架构。下面是一些关于 conan 和 cmake 的介绍: Conan Conan 是一个用于管理 C++ 依赖项的开源工具。它可以从公共或私有存储库中自动下载和安装依赖项。Conan 可以轻

    2024年02月09日
    浏览(44)
  • Linux操作系统下Docker和Docker Compose的安装教程(包含x86和arm64平台离线一键安装资源包)

    本文章将详细介绍Linux下Docker和Docker Compose的安装教程。 目录3为x86和arm64平台Docker离线安装资源包,包含Docker Compose、一键安装脚本使用教程。 相关文章参考: Docker常用基础命令 Docker批量清理删除镜像和容器常用命令 版本如下 名称 版本 CentOS 7.6+ openEuler等其他操作系统可以使

    2024年02月06日
    浏览(47)
  • Linux离线arm环境安装部署docker详细教程

    1、下载 通过官网下载docker安装包,找arm环境的安装包,如果是x86环境可以下载对应的安装包 Index of linux/static/stable/aarch64/ 2、上传到服务器上,通过rz命令 上传成功后解压 tar -xvf docker-24.0.6.tgz  3. 复制文件到 /usr/bin cp ./docker/* /usr/bin 4. 创建docker.service vim  /etc/systemd/system/doc

    2024年02月03日
    浏览(45)
  • 注意避坑:centos7官方版镜像不支持arm架构(docker请求的映像的平台(linux/aamd64)与检测到的主机平台(linux/alm64/v8)不匹配)fauria/vsftpd

    注意是centos7 docker官方版镜像不支持arm架构(FROM centos:7),不是centos7不支持arm 今天基于fauria/vsftpd在我们的arm盒子上做了个docker镜像,但是用镜像run容器的时候提示: 翻译就是: 警告:请求的映像的平台(linux/aamd64)与检测到的主机平台(linux/alm64/v8)不匹配,并且没有请求

    2024年02月08日
    浏览(49)
  • ABPvNext-微服务框架基础入门

    本文使用的是ABPvNext商业版 最新稳定版本7.0.2为演示基础的,后续如果更新,会单独写一篇最新版本的,此文为零基础入门教程,后续相关代码会同步更新到gitee仓库中。 1.登录ABPvNext官网 网址 http://abp.io 2.跳转到商业版的说明文档,目前商业版没有中文,只能使用谷歌浏览器

    2023年04月14日
    浏览(35)
  • 【Docker】MySQL 源码构建 Docker 镜像(基于 ARM 64 架构)

    以下内容均来自个人笔记并重新梳理,如有错误欢迎指正!如果对您有帮助,烦请点赞、关注、转发!欢迎扫码关注个人公众号!  公众号原文链接:MySQL 源码构建 Docker 镜像(基于 ARM 64 架构) 背景介绍 近期,笔者正推进公司 MySQL 适配 ARM 64 架构工作,由于一直使用 Docke

    2024年04月15日
    浏览(56)
  • YOLOv8 测试 5:Linux 中 Docker 部署 YOLOv8,Python 封装 API 接口,base64 图片处理

    记录时间 [2024-4-14] 系列文章简摘: Docker 学习笔记(二):在 Linux 中部署 Docker(Centos7 下安装 docker、环境配置,以及镜像简单使用) API 接口简单使用(二):Python 中使用 Flask(接口封装整理版,含文件上传接口的详细实现) YOLOv8 测试 3:在 Python 中将 YOLOv8 模型封装成 A

    2024年04月29日
    浏览(37)
  • 【docker】x86主机在docker中运行arm64镜像

    1、在x86搭建arm64 ros的开发环境。 2、宿主机:虚拟机x86_ubuntu18 3、设备:jetson agx xavier(jetpack4.6.1) jetson已安装各种软件环境 打包jeston文件系统 把U盘插到jetson,然后执行打包命令。 --exclude是排除不需要打包的文件 2、x86加载docker文件 a、打包完成后,将U盘插到pc主机 b、将文

    2024年02月05日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包