.NET 8 项目 Docker 方式部署到 Linux 系统详细操作步骤

news2025/1/22 10:23:40

本文将详细介绍如何将一个 .NET 8 项目通过 Docker 部署到 Linux 系统中。以下步骤包括从项目的创建、Dockerfile 的编写、镜像构建、到最后在 Linux 上的容器运行。

1. 环境准备

在开始之前,请确保你已经具备以下环境:

  • Linux 系统(如 Ubuntu、CentOS 等)
  • Docker 已经安装并正确运行
  • .NET 8 SDK 已安装(安装方法参考官网文档)
  • Git 工具用于拉取项目代码

1.1 安装 Docker (如果未安装)

对于 Ubuntu 系统,安装 Docker 的命令如下:

sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/docker-archive-keyring.gpg
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install docker-ce

安装完成后,确保 Docker 服务已经启动:

sudo systemctl enable docker
sudo systemctl start docker

检查 Docker 是否安装成功:

docker --version

1.2 安装 .NET 8 SDK

请参考官方文档安装 .NET 8 SDK:安装 .NET 8 SDK

以 Ubuntu 为例,安装 .NET 8 SDK 的命令如下:

wget https://download.visualstudio.microsoft.com/download/pr/14bbd1ca-6c19-47f5-b4ac-b0aef2b7f146/100b6d651d438574e6f9a78b2464a8da/dotnet-sdk-8.0.100-linux-x64.tar.gz
sudo mkdir -p /usr/share/dotnet
sudo tar zxf dotnet-sdk-8.0.100-linux-x64.tar.gz -C /usr/share/dotnet

验证是否成功安装:

dotnet --version

2. 创建 .NET 8 项目

首先,创建一个简单的 .NET 8 Web API 项目。如果已经有项目,跳过此步骤。

dotnet new webapi -n MyApp
cd MyApp

你可以通过以下命令运行此项目,确保它可以正常工作:

dotnet run

如果你在浏览器中访问 http://localhost:5000,你应该能看到该 Web API 返回的默认响应。

3. 编写 Dockerfile

接下来,我们将为 .NET 项目编写一个 Dockerfile,使其可以通过 Docker 容器运行。

在项目根目录下,创建一个名为 Dockerfile 的文件,并添加以下内容:

# 使用官方 .NET SDK 镜像作为构建环境
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build

# 设置工作目录
WORKDIR /src

# 将项目文件复制到工作目录
COPY ["MyApp/MyApp.csproj", "MyApp/"]

# 恢复依赖
RUN dotnet restore "MyApp/MyApp.csproj"

# 复制所有项目文件到容器
COPY . .

# 构建项目
WORKDIR "/src/MyApp"
RUN dotnet build "MyApp.csproj" -c Release -o /app/build

# 发布项目
RUN dotnet publish "MyApp.csproj" -c Release -o /app/publish

# 运行环境镜像
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS final

# 设置工作目录
WORKDIR /app

# 复制发布文件
COPY --from=build /app/publish .

# 设置容器启动命令
ENTRYPOINT ["dotnet", "MyApp.dll"]

# 暴露端口
EXPOSE 80

Dockerfile 说明:

  1. FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build:使用 .NET SDK 镜像作为构建环境。
  2. WORKDIR /src:设置工作目录为 /src,Docker 将文件复制到此目录。
  3. COPY ["MyApp/MyApp.csproj", "MyApp/"]:复制 .csproj 文件。
  4. RUN dotnet restore:恢复依赖。
  5. COPY . .:复制项目所有文件到容器。
  6. RUN dotnet build:构建项目。
  7. RUN dotnet publish:发布项目,生成可部署的文件。
  8. FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS final:使用 .NET 运行时镜像作为生产环境镜像。
  9. COPY --from=build /app/publish .:将构建好的文件从 build 阶段复制到生产环境镜像中。
  10. ENTRYPOINT ["dotnet", "MyApp.dll"]:设置容器启动时的命令,运行 MyApp.dll
  11. EXPOSE 80:暴露容器的 80 端口,方便外部访问。

4. 构建 Docker 镜像

在项目的根目录下,通过以下命令构建 Docker 镜像:

docker build -t myapp:1.0 .

命令解析:

  • -t myapp:1.0:为镜像指定标签 myapp:1.0
  • .:表示当前目录(Dockerfile 文件所在目录)作为上下文。

构建完成后,可以通过以下命令查看已构建的镜像:

docker images

你应该能够看到 myapp 镜像列在其中。

5. 运行 Docker 容器

使用以下命令启动容器:

docker run -d -p 80:80 --name myapp myapp:1.0

命令解析:

  • -d:表示后台运行容器。
  • -p 80:80:将容器的 80 端口映射到主机的 80 端口。
  • --name myapp:为容器指定名称为 myapp
  • myapp:1.0:指定要运行的镜像名称和标签。

运行容器后,你可以在浏览器中访问 http://<your-server-ip>,你应该能看到应用程序的输出。

6. 检查容器状态

可以使用以下命令查看正在运行的容器:

docker ps

这将显示当前所有运行的容器信息。

7. 停止和删除容器

停止容器:

docker stop myapp

删除容器:

docker rm myapp

8. 其他操作

8.1 查看容器日志

你可以查看容器的日志,方便调试和监控:

docker logs myapp

8.2 进入容器进行调试

你可以使用 docker exec 命令进入容器并进行调试:

docker exec -it myapp /bin/bash

这将让你进入容器的 Bash 环境,可以在其中执行命令。

9. 总结

本文详细介绍了如何将一个 .NET 8 项目通过 Docker 部署到 Linux 系统中。操作步骤包括:

  • 安装 Docker 和 .NET SDK。
  • 创建 .NET 8 项目并编写 Dockerfile。
  • 构建 Docker 镜像并运行容器。

Docker 为 .NET 项目的部署提供了很好的解决方案,能使得应用在不同平台上快速启动并保持一致性。希望通过本文的学习,能够帮助你顺利将 .NET 8 项目部署到 Linux 系统中,并在 Docker 容器中高效运行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2280303.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

1. 基于图像的三维重建

1. 基于图像的三维重建 核心概念三维重建中深度图、点云的区别&#xff1f;深度图点云总结 深度图到点云还需要什么步骤&#xff1f;1. **获取相机内参**2. **生成相应的像素坐标**3. **计算三维坐标**4. **构建点云**5. **处理颜色信息&#xff08;可选&#xff09;**6. **去除…

智慧脚下生根,智能井盖监测终端引领城市安全新革命

在繁忙的都市生活中&#xff0c;我们往往只关注地面的繁华与喧嚣&#xff0c;却忽略了隐藏在地面之下的基础设施——井盖。这些看似不起眼的井盖&#xff0c;实则承担着排水、通讯、电力等重要功能&#xff0c;是城市安全运转的重要一环。然而&#xff0c;传统的井盖管理面临着…

62,【2】 BUUCTF WEB [强网杯 2019]Upload1

进入靶场 此处考点不是SQL&#xff0c;就正常注册并登录进去 先随便传一个 进行目录扫描&#xff0c;我先用爆破代替 先随便后面写个文件名 为了提供payload位置 www.tar.gz真的存在 返回浏览器修改url就自动下载了 看到tp5,应该是ThinkPHP5框架 参考此博客的思路方法c[强网杯…

IDEA导入Maven工程不识别pom.xml

0 现象 把阿里 sentinel 项目下载本地后&#xff0c;IDEA 中却没显示 maven 工具栏。 1 右键Maven Projects 点击IDEA右侧边栏的Maven Projects&#xff0c;再点击&#xff1a; 在出现的选择框中选择指定的未被识别的pom.xml即可&#xff1a; 2 Add as maven project 右键p…

LDD3学习9--数据类型和定时器

这部分对应的是第七章和第十一章&#xff0c;因为内容也不是很多&#xff0c;就一起写了。里面的内容基本上就是一个个的点&#xff0c;所以也就一个个点简单总结一下。 1 数据类型 1.1 数据长度 不同操作系统类型长度可能不一样&#xff0c;看图的话最好用u8&#xff0c;u16&…

latex去掉bibliography自带的reference

latex要去掉bibliography自带的reference其实很简单&#xff0c; 只需要加以下命令&#xff1a; \begingroup % 去掉thebibliography环境自带的“参考文献”标题 \renewcommand{\section}[2]{} 即可。 效果如图

AI在SEO中的关键词优化策略探讨

内容概要 在当今数字化时代&#xff0c;人工智能&#xff08;AI&#xff09;正逐渐重塑搜索引擎优化&#xff08;SEO&#xff09;行业。AI技术的快速发展使得SEO策略发生了翻天覆地的变化&#xff0c;特别是在关键词优化方面。关键词优化的基本概念是通过选择与用户搜索意图密…

Windows 上安装 MongoDB 的 zip 包

博主介绍&#xff1a; 大家好&#xff0c;我是想成为Super的Yuperman&#xff0c;互联网宇宙厂经验&#xff0c;17年医疗健康行业的码拉松奔跑者&#xff0c;曾担任技术专家、架构师、研发总监负责和主导多个应用架构。 近期专注&#xff1a; RPA应用研究&#xff0c;主流厂商产…

Kotlin Bytedeco OpenCV 图像图像50 仿射变换 图像缩放

Kotlin Bytedeco OpenCV 图像图像50 仿射变换 图像缩放 1 添加依赖2 测试代码3 测试结果 在OpenCV中&#xff0c;仿射变换&#xff08;Affine Transformation&#xff09;和透视变换&#xff08;Perspective Transformation&#xff09;是两种常用的图像几何变换方法。 变换方…

传统企业怎样实现数字化转型升级?

​很多企业工厂都知道数字化转型是大势所趋。 但很多时候&#xff0c;仅仅知道是不行的&#xff0c;要贯彻落实才有意义。针对每个阶段&#xff0c;企业要有相应的行动方案&#xff0c;不行动&#xff0c;永远都是理论层面的&#xff0c;一点都没有用&#xff0c;这里就给大家…

HTML 表单和输入标签详解

HTML 表单是网页与用户交互的重要工具&#xff0c;它允许用户输入数据并将其提交到服务器。表单在网页中的应用非常广泛&#xff0c;例如登录、注册、搜索、评论等功能都离不开表单。本文将详细介绍 HTML 表单及其相关标签的使用方法&#xff0c;帮助你全面掌握表单的设计与实现…

机器学习(5):支持向量机

1 介绍 支持向量机&#xff08;Support Vector Machine&#xff0c;简称 SVM&#xff09;是一种监督学习算法&#xff0c;主要用于分类和回归问题。SVM 的核心思想是找到一个最优的超平面&#xff0c;将不同类别的数据分开。这个超平面不仅要能够正确分类数据&#xff0c;还要使…

ASP.NET Blazor部署方式有哪些?

今天我们来说说Blazor的三种部署方式&#xff0c;如果大家还不了解Blazor&#xff0c;那么我先简单介绍下Blazor Blazor 是一种 .NET 前端 Web 框架&#xff0c;在单个编程模型中同时支持服务器端呈现和客户端交互性&#xff1a; ● 使用 C# 创建丰富的交互式 UI。 ● 共享使用…

渗透测试--攻击常见的Web应用

本文章咱主要讨论&#xff0c;常见Web应用的攻击手法&#xff0c;其中并不完全&#xff0c;因为Web应用是在太多无法囊括全部&#xff0c;但其中的手法思想却值得我们借鉴&#xff0c;所以俺在此做了记录&#xff0c;希望对大家有帮助&#xff01;主要有以下内容&#xff1a; 1…

Spring Boot自动配置原理:如何实现零配置启动

引言 在现代软件开发中&#xff0c;Spring 框架已经成为 Java 开发领域不可或缺的一部分。而 Spring Boot 的出现&#xff0c;更是为 Spring 应用的开发带来了革命性的变化。Spring Boot 的核心优势之一就是它的“自动配置”能力&#xff0c;它极大地简化了 Spring 应用的配置…

PHP同城配送小程序

&#x1f680; 同城极速达——您生活中的极速配送大师 &#x1f4f1; 一款专为现代都市快节奏生活量身打造的同城配送小程序&#xff0c;同城极速达&#xff0c;集高效、便捷、智能于一身&#xff0c;依托ThinkPHPGatewayWorkerUniapp的强大架构&#xff0c;巧妙融合用户端、骑…

Kotlin Bytedeco OpenCV 图像图像57 图像ROI

Kotlin Bytedeco OpenCV 图像图像57 图像ROI 1 添加依赖2 测试代码3 测试结果 1 添加依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xmlns"http://maven.apache.o…

RabbitMQ集群安装rabbitmq_delayed_message_exchange

1、单节点安装rabbitmq安装延迟队列 安装延迟队列rabbitmq_delayed_message_exchange可以参考这个文章&#xff1a; rabbitmq安装延迟队列-CSDN博客 2、集群安装rabbitmq_delayed_message_exchange 在第二个节点 join_cluster 之后&#xff0c;start_app 就会报错了 (CaseC…

蓝桥与力扣刷题(73 矩阵置零)

题目&#xff1a;给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,1,1],[1,0,1],[1,1,1]] 输出&#xff1a;[[1,0,1],[0,0,0],[1,0,1]]示例 2&…

华为E9000刀箱服务器监控指标解读

美信监控易内置了数千种常见设备监测器&#xff0c;能够监测超过20万项指标。这些指标涵盖了从硬件设备到软件系统&#xff0c;从网络性能到安全状态等各个方面。如下基于美信监控易——IT基础监控模块&#xff0c;对华为E9000刀箱服务器部分监控指标进行解读。 一、华为E9000…