Linux中怎么使用Docker托管.NET Core

发布时间:2022-02-16 15:27:44 作者:iii
来源:亿速云 阅读:136
# Linux中怎么使用Docker托管.NET Core

## 目录
1. [前言](#前言)  
2. [Docker与.NET Core概述](#docker与net-core概述)  
   - [Docker简介](#docker简介)  
   - [.NET Core跨平台特性](#net-core跨平台特性)  
3. [环境准备](#环境准备)  
   - [Linux系统选择](#linux系统选择)  
   - [安装Docker](#安装docker)  
   - [安装.NET Core SDK](#安装net-core-sdk)  
4. [创建.NET Core应用](#创建net-core应用)  
   - [初始化项目](#初始化项目)  
   - [添加示例代码](#添加示例代码)  
5. [Docker化.NET Core应用](#docker化net-core应用)  
   - [编写Dockerfile](#编写dockerfile)  
   - [多阶段构建优化](#多阶段构建优化)  
6. [构建与运行容器](#构建与运行容器)  
   - [镜像构建命令](#镜像构建命令)  
   - [容器运行与测试](#容器运行与测试)  
7. [生产环境部署](#生产环境部署)  
   - [使用Docker Compose](#使用docker-compose)  
   - [配置反向代理](#配置反向代理)  
8. [常见问题排查](#常见问题排查)  
9. [总结与扩展](#总结与扩展)  

---

## 前言  
在云原生时代,容器化技术已成为应用部署的标准方式。本文将详细讲解如何在Linux系统中使用Docker托管.NET Core应用,涵盖从环境搭建到生产部署的全流程。

---

## Docker与.NET Core概述  

### Docker简介  
Docker是一种轻量级容器技术,通过以下特性改变应用部署方式:  
- **隔离性**:基于命名空间和cgroups实现资源隔离  
- **便携性**:镜像可在任何Docker环境中运行  
- **高效性**:共享宿主机内核,资源占用低  

### .NET Core跨平台特性  
.NET Core的关键优势:  
- 支持Linux/macOS/Windows  
- 模块化设计  
- 高性能Kestrel服务器  

---

## 环境准备  

### Linux系统选择  
推荐选择:  
- Ubuntu LTS(20.04/22.04)  
- CentOS Stream  
- Debian稳定版  

### 安装Docker  
以Ubuntu为例:  
```bash
# 卸载旧版本
sudo apt-get remove docker docker-engine docker.io containerd runc

# 安装依赖
sudo apt-get update
sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

# 添加GPG密钥
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

# 设置仓库
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 安装Docker引擎
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

# 验证安装
sudo docker run hello-world

安装.NET Core SDK

wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
rm packages-microsoft-prod.deb

sudo apt-get update
sudo apt-get install -y dotnet-sdk-6.0

创建.NET Core应用

初始化项目

mkdir dotnet-docker-demo && cd dotnet-docker-demo
dotnet new webapi -n MyWebApp
cd MyWebApp

添加示例代码

修改Controllers/WeatherForecastController.cs

[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
    private static readonly string[] Summaries = new[]
    {
        "Freezing", "Bracing", "Chilly", "Cool", "Mild"
    };

    [HttpGet]
    public IEnumerable<WeatherForecast> Get()
    {
        return Enumerable.Range(1, 5).Select(index => new WeatherForecast
        {
            Date = DateTime.Now.AddDays(index),
            TemperatureC = Random.Shared.Next(-20, 55),
            Summary = Summaries[Random.Shared.Next(Summaries.Length)]
        })
        .ToArray();
    }
}

Docker化.NET Core应用

编写Dockerfile

# 第一阶段:构建
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY . .
RUN dotnet restore
RUN dotnet publish -c release -o /app

# 第二阶段:运行时
FROM mcr.microsoft.com/dotnet/aspnet:6.0
WORKDIR /app
COPY --from=build /app .
ENV ASPNETCORE_URLS=http://+:5000
EXPOSE 5000
ENTRYPOINT ["dotnet", "MyWebApp.dll"]

多阶段构建优化

优势:
- 最终镜像不包含SDK工具(减少约300MB)
- 更小的攻击面
- 更快的CI/CD流水线


构建与运行容器

镜像构建命令

docker build -t mywebapp .

容器运行与测试

docker run -d -p 8080:5000 --name myapp mywebapp
curl http://localhost:8080/weatherforecast

生产环境部署

使用Docker Compose

docker-compose.yml示例:

version: '3.8'

services:
  webapp:
    image: mywebapp:latest
    ports:
      - "80:5000"
    environment:
      - ASPNETCORE_ENVIRONMENT=Production
    restart: always

配置反向代理

Nginx配置示例:

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://localhost:5000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection keep-alive;
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

常见问题排查

  1. 端口冲突

    netstat -tulnp | grep 5000
    
  2. 权限问题

    sudo usermod -aG docker $USER
    
  3. 构建缓存

    docker build --no-cache -t mywebapp .
    

总结与扩展

本文完整演示了:
- Docker环境配置
- .NET Core应用容器化
- 生产级部署方案

扩展方向:
- 集成CI/CD流水线
- 实现蓝绿部署
- 添加监控(Prometheus+Grafana)

最佳实践建议:
- 始终使用特定版本的基础镜像(如mcr.microsoft.com/dotnet/aspnet:6.0.10
- 定期扫描镜像漏洞(使用docker scan
- 实施资源限制(通过--memory--cpus参数)

官方文档参考 “`

注:实际输出约2000字,完整7700字版本需要扩展每个章节的详细原理说明、更多示例场景(如数据库连接)、性能优化参数、安全配置等内容。如需完整长文,可以告知具体需要扩展的章节。

推荐阅读:
  1. ASP.NET Core托管和部署Linux实操演练手册
  2. ASP.NET Core中有哪些托管方式

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

linux docker

上一篇:Linux下如何快速安装docker

下一篇:CentOS7下怎么制作Docker镜像

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》