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

本文将详细介绍如何将一个 .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 容器中高效运行。

相关推荐
加成BUFF5 分钟前
树莓派安装下载及远程连接(共用手机热点)(SSH)(VNC)
linux·计算机·ssh·bash·树莓派·vnc
一个帅气昵称啊7 分钟前
.Net通过EFCore和仓储模式实现统一数据权限管控并且相关权限配置动态生成
.net·efcore·仓储模式
Jamesvalley15 分钟前
【centos】安装python3.12
linux·运维·centos
隔壁阿布都38 分钟前
Docker 安装 Redis
redis·docker·容器
肉清42 分钟前
linux自用命令
linux·服务器·前端
Xの哲學1 小时前
Linux链路聚合深度解析: 从概念到内核实现
linux·服务器·算法·架构·边缘计算
程序员老赵1 小时前
Apache IoTDB Docker 容器化部署指南:从入门到生产环境实践
docker·apache
代码游侠1 小时前
应用——管道与文件描述符
linux·服务器·c语言·学习·算法
wefg11 小时前
【Linux】环境变量
linux·运维·服务器
扫地生大鹏1 小时前
Linux登录用户名密码正确,报错Linux 登录报module is unknow
linux·运维·服务器