.NET 6 从0到1使用Docker部署至Linux环境超详细教程

  • Post category:Linux

感谢您对本网站的关注。以下是“.NET 6 从0到1使用Docker部署至Linux环境超详细教程”的完整攻略。

前置准备

在进行本教程之前,您需要做好以下准备工作:

  • 一台Linux服务器,并且已经安装了Docker和Docker Compose
  • 一份基于.NET6的Web应用程序代码
  • 一个Docker Hub账号(用于保存我们的Docker镜像)

创建Dockerfile

首先需要创建一个Dockerfile,告诉Docker如何构建我们的应用程序镜像。通过以下命令创建Dockerfile:

FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build-env
WORKDIR /app

COPY *.csproj ./
RUN dotnet restore

COPY . ./
RUN dotnet publish -c Release -o out

FROM mcr.microsoft.com/dotnet/aspnet:6.0
WORKDIR /app
COPY --from=build-env /app/out .

ENTRYPOINT ["dotnet", "your-app-name.dll"]

在上述命令中,FROM指令指定我们需要从哪个Docker基础镜像开始构建,WORKDIR指令指定我们在容器内的工作目录,COPY指令用于将我们的应用程序代码复制到容器内部。RUN指令执行dotnet restore和dotnet publish命令,分别用于还原和构建我们的应用程序代码。最后,我们指定我们的应用程序入口点。

创建docker-compose.yml文件

接下来创建一个docker-compose.yml文件,用于定义我们的Docker容器。通过以下命令进行创建:

version: "3.9"
services:
  app:
    build: .
    ports:
      - "5000:80"
    restart: always

在上述命令中,我们定义了一个名为“app”的服务。build使用本地的Dockerfile进行构建。ports定义容器内部暴露的端口,我们将端口5000映射到主机的80端口。restart指令告诉Docker容器如果在崩溃后需要重新启动。

构建和推送Docker镜像

接下来,需要使用Docker CLI进行构建和推送我们的Docker镜像。通过以下命令进行操作:

docker login
docker-compose build
docker-compose push

在上述命令中,docker login命令允许我们登录我们的Docker Hub账号。docker-compose build命令将根据我们的docker-compose.yml文件构建Docker镜像。最后,docker-compose push将我们的镜像推送到Docker Hub上。

在远程服务器上部署

最后,在远程服务器上运行以下Docker命令来部署我们的应用程序:

docker login
docker-compose pull
docker-compose up -d

在上述命令中,docker login命令允许我们登录Docker Hub账号。docker-compose pull命令从Docker Hub下载我们的镜像版本。docker-compose up命令根据我们的docker-compose.yml文件中的规则启动容器,并使用-d参数指定它们在后台运行。

接下来,我们就可以通过访问服务器的IP地址或域名来访问我们的应用程序了。

示例说明

以下是两个示例说明:

示例一

我们的应用程序代码在本地D:/testapp目录下,应用程序名称为testapp。在本地电脑上,在命令行中切换到该目录,运行以下命令:

docker build -t your-username/testapp .
docker push your-username/testapp

运行第一行命令时,Docker会自动识别并读取我们的Dockerfile,并使用其中的指令来构建应用程序的Docker镜像。运行第二行命令时,Docker会将镜像上传至我们的Docker Hub账号。

接下来,在远程服务器上,切换到一个目录,并创建docker-compose.yml文件。在该文件中输入以下内容:

version: "3.9"
services:
  app:
    image: your-username/testapp
    ports:
      - "5000:80"
    restart: always

接着,运行以下Docker命令:

docker-compose pull
docker-compose up -d

在此过程中,Docker会使用我们在Docker Hub上推送的镜像版本来运行我们的应用程序。我们可以访问服务器地址的80端口来查看是否已经成功部署。

示例二

我们的应用程序代码托管在GitHub上。同时,我们也想在GitHub Actions中进行自动化构建、推送和部署操作。以下是一些相关配置文件的示例:

  • Dockerfile
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build-env
WORKDIR /app

COPY *.csproj ./
RUN dotnet restore

COPY . ./
RUN dotnet publish -c Release -o out

FROM mcr.microsoft.com/dotnet/aspnet:6.0
WORKDIR /app
COPY --from=build-env /app/out .

ENTRYPOINT ["dotnet", "your-app-name.dll"]
  • docker-compose.yml
version: "3.9"
services:
  app:
    image: your-username/testapp
    ports:
      - "5000:80"
    restart: always
  • GitHub Actions配置文件(.github/workflows/build-docker.yml)
name: Build and Push Docker Image

on:
  push:
    branches: main

jobs:
  build-and-push:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Login to Docker Hub
        uses: docker/login-action@v1
        with:
          username: ${{ secrets.DOCKER_USERNAME }}
          password: ${{ secrets.DOCKER_PASSWORD }}
      - name: Build and Publish Docker Image
        uses: docker/build-push-action@v2
        with:
          context: .
          push: true
          tags: your-username/testapp:latest   

这个示例中,我们使用GitHub Actions来构建和推送Docker镜像。当我们在GitHub上提交代码时,GitHub Actions会自动构建我们的Docker镜像并将其推送到Docker Hub上。然后,在我们的远程服务器上,我们只需要创建一个docker-compose.yml文件,并使用docker-compose pull和docker-compose up命令来引用我们在Docker Hub上推送的镜像版本。

结论

通过本教程,您已经学会了如何从零开始使用Docker部署.NET 6应用程序到Linux服务器,并进行了两个范例说明。祝您愉快地部署应用程序!