返回顶部
首页 > 资讯 > 后端开发 > ASP.NET >.Net项目在Docker容器中开发部署
  • 277
分享到

.Net项目在Docker容器中开发部署

2024-04-02 19:04:59 277人浏览 独家记忆
摘要

.net多年以前已经开始支持Docker,但由于国内.net现状,生产过程中几乎用不到docker支持,趁着有点时间捣鼓下。 先期工作 1、首先安装Docker Desktop 2、

.net多年以前已经开始支持Docker,但由于国内.net现状,生产过程中几乎用不到docker支持,趁着有点时间捣鼓下。

先期工作

1、首先安装Docker Desktop

2、安装Visual Studio

创建项目

使用VS分别创建一个ASP.net core apiWEBApplication1)与 ASP.net core 应用(WebApplication2)

如果项目已经存在,可以选中项目,右键点击->选择添加Docker支持。

在弹出对话框中选择linux

项目支持docker后,会在项目下生成一个Dockerfile文件(用来构建Docker镜像的构建文件)

内容如下:

#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.
#使用“小型”仅运行时基础映像开始一个阶段,将其称为“基础”,以供参考
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
# 在映像中创建 /app 目录 。
WORKDIR /app
# 公开端口 80 。
EXPOSE 80
#使用“大型”映像开始用于生成/发布的新阶段。将其称为“生成” ,以供参考。
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
#在映像中创建目录 /src 。
WORKDIR /src
#复制引用的 .csproj 项目文件,以便之后能够还原包 。
COPY ["WebApplication1/WebApplication1.csproj", "WebApplication1/"]
#还原项目和引用项目的包 。
RUN dotnet restore "WebApplication1/WebApplication1.csproj"
COPY . .
#将解决方案的所有目录树(.dockerignore 文件中包含的文件/目录除外)复制到映像中的 /src/项目 目录 。
WORKDIR "/src/WebApplication1"
#生成项目(和其他项目依赖项)并输出到映像中的 /app/build 目录 。
RUN dotnet build "WebApplication1.csproj" -c Release -o /app/build
 
#开始一个从“生成”继续的新阶段。将它称为“发布” 以进行引用。
FROM build AS publish
 
# 发布项目(和依赖项)并输出到映像中的 /app/publish 目录 。
RUN dotnet publish "WebApplication1.csproj" -c Release -o /app/publish
 
# 开始一个从“基础”继续的新阶段,并将其称为“最终”
FROM base AS final
#将当前目录更改为 /app
WORKDIR /app
 
#将 /app 目录从阶段“发布”复制到当前目录
COPY --from=publish /app/publish .
 
#定义启动容器时要运行的命令
ENTRYPOINT ["dotnet", "WebApplication1.dll"]

以上说明参考.net官方文档,机器翻译不是很友好,但结合命令应该能看懂。

单容器运行

1、VS启动docker调试:

2、使用命令生成与启动镜像

(1)编译镜像

docker build -f .\WebApplication1\Dockerfile -t webapi .
#此处注意Dockerfile文件所在的目录

(2)生成容器

docker run --name webapi -d -p 8060:80 api
 
--name 容器名
-d 后台运行
-p 端口映射

此时访问接口:localhost:8060

返回值:

[
    {
        "date": "2022-03-17T09:25:15.9478769+08:00",
        "temperatureC": -2,
        "temperatureF": 29,
        "summary": "Freezing"
    },
    {
        "date": "2022-03-18T09:25:15.9490679+08:00",
        "temperatureC": -7,
        "temperatureF": 20,
        "summary": "Bracing"
    },
    {
        "date": "2022-03-19T09:25:15.9490738+08:00",
        "temperatureC": 15,
        "temperatureF": 58,
        "summary": "Warm"
    },
    {
        "date": "2022-03-20T09:25:15.9490742+08:00",
        "temperatureC": 26,
        "temperatureF": 78,
        "summary": "Mild"
    },
    {
        "date": "2022-03-21T09:25:15.9490743+08:00",
        "temperatureC": -15,
        "temperatureF": 6,
        "summary": "Chilly"
    }
]

容器运行

1、右键点击WebApplication1应用,选择添加“容器业务流程协调程序支持”

选择:“Linux”。

添加完成后,解决方案中会自动生成:docker-compose项目,

主要包含:docker-compose.yml文件,.dockerignore文件。

  • .dockerignore 文件包含你不希望 Docker 在容器中包含的文件类型和扩展名。这些文件通常与开发环境和源代码管理相关联,并不属于正在开发的应用或服务。

  •  docker-compose.yml是docker-compose的配置文件,docker-compose是docker提供的一个命令行工具,可以用于定义和运行多容器组成的应用。

  docker-compose.yml中生成的内容:

version: '3.4'
 services:
   webapplication1:
    image: ${DOCKER_REGISTRY-}webapplication1
    build:
      context: .
      dockerfile: WebApplication1/Dockerfile

同样的操作为:WebApplication2添加“容器业务流程协调程序支持”

最终docker-compose.yml内容为:

version: '3.4'
 
services:
  webapplication2:
    image: ${DOCKER_REGISTRY-}webapplication2
    build:
      context: .
      dockerfile: WebApplication2/Dockerfile
 
  webapplication1:
    image: ${DOCKER_REGISTRY-}webapplication1
    build:
      context: .
      dockerfile: WebApplication1/Dockerfile

2、修改WebApplication2的HomeController:

public async Task<IActionResult> Index()
{
  ViewData["Message"] = "Hello from webfrontend";
 
  using (var client = new System.Net.Http.HttpClient())
  {
    var request = new System.Net.Http.HttpRequestMessage();
    request.RequestUri = new Uri("http://WebApplication1/WeatherForecast");
    var response = await client.SendAsync(request);
    ViewData["Message"] += " and " + await response.Content.ReadAsStringAsync();
  }
  return View();
}
//因为 docker compose 在其自己的网络中设置主机名,
//以便服务名作为主机名显示给其他服务,
//所以这里使用的是主机名请求。
request.RequestUri = new Uri("http://WebApplication1/WeatherForecast");

3、解决方案的启动项目设置为 docker-compose

4、管理Docker Compose启动项

配置完成后会将配置保存在docker-compose 项目中的launchSettings.JSON中:

{
  "profiles": {
    "Docker Compose": {
      "commandName": "DockerCompose",
      "composeLaunchAction": "LaunchBrowser",
      "composeLaunchServiceName": "webapplication2",
      "composeLaunchUrl": "{Scheme}://localhost:{ServicePort}",
      "commandVersion": "1.0",
      "serviceActions": {
        "webapplication1": "StartWithoutDebugging",
        "webapplication2": "StartDebugging"
      }
    }
  }
}

5、F5启动项目

常见问题

首次启动可能会出现错误:

“error CTC1023: Dockerfile“...\Dockerfile”的调试程序路径“C:\Users\Administrator\vsdbg\vs2017u5”无效。”

解决办法:手动下载.zip包,如果浏览器下载太慢,可以考虑使用下载工具

https://vsdebugger.Azureedge.net/vsdbg-17-0-10712-2/vsdbg-linux-x64.zip #其中17-0-10712-2(其中 17.0.10712.2 “.”替换成“-”)
https://vsdebugger.azureedge.net/vsdbg-17-0-10712-2/vsdbg-linux-musl-x64.zip #其中17-0-10712-2(其中 17.0.10712.2 “.”替换成“-”)
如果其他版本的,可以参考该方式,拼接URL下载

以上两个包下载完毕后,按照以下步骤操作

1、将vsdbg-linux-x64.zip 解压到 %USERPROFILE%\vsdbg\vs2017u5 目录  (vs2017)
2、%USERPROFILE%\vsdbg\vs2017u5 目录,添加两个文件
success_rid.txt 内容填写:linux-x64
success_version.txt 内容填写:17.0.10712.2


3、将vsdbg-linux-musl-x64.zip 解压到 %USERPROFILE%\\vsdbg\vs2017u5\linux-musl-x64 目录 (vs2017,其他版本参考相似路径)
4、%USERPROFILE%\vsdbg\vs2017u5\linux-musl-x64 目录,添加两个文件
success_rid.txt 内容填写:linux-musl-x64
success_version.txt 内容填写:17.0.10712.2

到此,项目算是跑起来了。

到此这篇关于.Net项目在Docker容器中开发部署的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: .Net项目在Docker容器中开发部署

本文链接: https://lsjlt.com/news/145513.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • .Net项目在Docker容器中开发部署
    .NET多年以前已经开始支持Docker,但由于国内.net现状,生产过程中几乎用不到docker支持,趁着有点时间捣鼓下。 先期工作 1、首先安装Docker Desktop 2、...
    99+
    2024-04-02
  • 如何在docker容器中部署Web项目
    小编给大家分享一下如何在docker容器中部署Web项目,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!系统选用Centos或者Ubuntu都可以。 大致...
    99+
    2023-06-04
  • .Net Core部署Docker容器
    阅读本文需要一定的docker基础知识。 前置工作 首先新建一个core项目,需要注意的是在这个界面最好勾选一下docker支持: 项目创建完成以后,你会在目录中发现Dockerf...
    99+
    2024-04-02
  • SpringBoot项目docker容器部署实现
    目录一、修改docker.service,使其暴露2375端口二、netstat -tulp查看端口情况三、添加依赖四、在idea中 Settings->Docker配置远程d...
    99+
    2024-04-02
  • 如何在docker中部署crownblog项目
    本篇文章为大家展示了如何在docker中部署crownblog项目,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。前端项目打包找到.env.production 修改为自己的ip或者域名地址执行命令n...
    99+
    2023-06-15
  • 在Docker容器中部署MSSQL
    部署MSSQL需要2G内存 1.下载镜像 docker pull microsoft/mssql-server-linux 使用该命令就可以把数据库的docker镜像下载下来。 2....
    99+
    2024-04-02
  • docker部署开源项目renrne-fast
    要使用Docker部署开源项目renrne-fast,可以按照以下步骤进行操作:1. 首先,确保系统已经安装了Docker和Dock...
    99+
    2023-09-23
    docker
  • 使用Portainer部署Docker容器的项目实践
    目录一、背景二、操作步骤三、安装Portiner3.1 docker部署3.2 节点初始化3.3 功能初探四、管理节点4.1 开始添加节点4.2 开放API控制4.3 验证端口状态4...
    99+
    2024-04-02
  • SpringBoot项目docker容器部署的示例分析
    这篇文章主要介绍了SpringBoot项目docker容器部署的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、修改docker.service,使其暴露2375端...
    99+
    2023-06-29
  • docker中如何部署django项目
    要在Docker中部署Django项目,可以按照以下步骤进行操作: 创建Django项目:首先在本地创建一个Django项目,可...
    99+
    2024-04-02
  • 在Docker容器中怎么部署MSSQL
    今天小编给大家分享一下在Docker容器中怎么部署MSSQL的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。部署MSSQL需要...
    99+
    2023-06-29
  • 何在tomcat容器中部署一个spring boot项目
    本篇文章给大家分享的是有关何在tomcat容器中部署一个spring boot项目,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。把spring-boot项目按照平常的web项目...
    99+
    2023-05-31
    springboot omc tomcat
  • 使用Docker部署打包发布springboot项目
    目录前言第一:环境第二:开始描述从搞项目到docker发布:第四:各种错误教训集合。前言 从安装docker到多种方式打包发布,编译,镜像,容器等问题,遇到种种问题,终于不负所望,一...
    99+
    2024-04-02
  • 如何在docker容器中部署应用
    本篇内容介绍了“如何在docker容器中部署应用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一个简单的Hello World应用。1 Ma...
    99+
    2023-06-02
  • 将 .net core 项目部署到 Linux服务器
    目录 1、前言 2、安装 .NET SDK 或 .NET 运行时 3、创建数据库 4、发布项目到Linux环境 5、配置Nigix 6、Nginx配置Https 7、安装Supervisor 1、前言 部署服务器:阿里云的CentOS ...
    99+
    2023-09-07
    服务器 linux .netcore
  • docker容器化部署nginx php项目(步骤清晰简洁)
    先学些原理 1 先简单解释下原理,nginx 是一个 web 服务器,它只能处理静态文件,无法处理 PHP Python 等具体程序语言的请求。所以,原理是这样,用户统一先请求到 nginx,ngin...
    99+
    2023-09-02
    nginx php docker
  • Docker部署Go项目发布镜像到仓库
    目录正文一、安装 Docker二、使用 Docker 部署 Go 项目三、上传镜像到镜像仓库正文 大家都知道Go编译后是可执行的二进制文件,一般我们的项目会部署在Linux中,Do...
    99+
    2023-03-07
    Docker部署Go发布镜像 Docker部署Go
  • idea中如何将springboot项目部署到docker
    这篇“idea中如何将springboot项目部署到docker”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“idea中如何...
    99+
    2023-06-08
  • 如何使用Docker部署打包发布springboot项目
    这篇文章将为大家详细讲解有关如何使用Docker部署打包发布springboot项目,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。前言从安装docker到多种方式打包发布,编译,镜像,容器等问题,遇到种种...
    99+
    2023-06-29
  • 在Docker容器中部署Django的时区问题
    目录Django 中与时区有关的配置USE_TZ=TrueUSE_TZ=FalseLinux 容器中时区的设置进入 Django 环境查看时间和时区修改 Linux 容器时区进入 D...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作