简介

本文主要说明使用.NET Core 3.1搭建的站点如何使用docker打包并运行容器供外网访问。

环境介绍

开发环境

Windows 10

Visual Studio 2019

.NET Core 3.1

部署环境

CentOS 8

Docker 1.19.03

编写Dockerfile文件

将编写好的.NET Core项目发布至指定文件夹,在发布文件夹下添加名为Dokcerfile文件,需要注意此文件没有后缀,同时需要注意文件名的大小写,如下图所示:

对应的Dockerfile文件如下所示:

#引入镜像,低版本 docker 去掉  AS base
#换成别人做的阿里镜像
#FROM registry.cn-hangzhou.aliyuncs.com/newbe36524
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base #配置工作目录 相当于cd
WORKDIR /app #暴露容器端口,此端口与程序运行路径一致,可
EXPOSE 5000 #复制文件到工作目录
COPY . . #ENV :配置系统环境变量,比如程序环境环境等在这里配置(开发、预发、线上环境)
#这里是配置程序运行端口,如果程序不使用默认的80端口这里一定要设置(程序运行端口)
ENV ASPNETCORE_URLS http://+:5000 #设置时间为中国上海,默认为UTC时间
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone #启动程序
ENTRYPOINT ["dotnet", "DotNetCore.API.dll"]

生成Docker镜像

Dockerfile文件编写完成后,上传至CentOS目录下,如下所示:

[root@localhost web]# ll
total 376
-rw-r--r--. 1 root root 162 Aug 25 13:56 appsettings.Development.json
-rw-r--r--. 1 root root 192 Aug 25 13:56 appsettings.json
-rw-r--r--. 1 root root 850 Aug 27 00:55 Dockerfile
-rw-r--r--. 1 root root 106577 Aug 27 2020 DotNetCore.API.deps.json
-rw-r--r--. 1 root root 8192 Aug 27 2020 DotNetCore.API.dll
-rw-r--r--. 1 root root 174592 Aug 27 2020 DotNetCore.API.exe
-rw-r--r--. 1 root root 19480 Aug 27 2020 DotNetCore.API.pdb
-rw-r--r--. 1 root root 224 Aug 25 14:04 DotNetCore.API.runtimeconfig.json
-rw-r--r--. 1 root root 25088 Aug 27 2020 DotNetCore.API.Views.dll
-rw-r--r--. 1 root root 20032 Aug 27 2020 DotNetCore.API.Views.pdb
-rw-r--r--. 1 root root 558 Aug 27 2020 web.config
drwxr-xr-x. 5 root root 57 Aug 25 14:04 wwwroot

在此目录下执行构建docker镜像命令。

# 构建docker image
docker build -t apitest:v1 . # 执行结果
Sending build context to Docker daemon 4.755MB
Step 1/8 : FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
3.1-buster-slim: Pulling from dotnet/core/aspnet
bf5952930446: Pull complete
95f9f5484a21: Pull complete
ebc43d54b0d9: Pull complete
eb8b3fc30ae1: Pull complete
c42d79623507: Pull complete
Digest: sha256:3209fc5e97bcc9d4137d603baf7971475435a3760fbcbba13a4a13ecb973bdb8
Status: Downloaded newer image for mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim
---> bdca989bc8d3
Step 2/8 : WORKDIR /app
---> Running in e1bc2cdcce7e
Removing intermediate container e1bc2cdcce7e
---> d115392570f1
Step 3/8 : EXPOSE 8001
---> Running in 7329d738bc32
Removing intermediate container 7329d738bc32
---> facb418c8e93
Step 4/8 : COPY . .
---> db32752819a7
Step 5/8 : ENV ASPNETCORE_URLS http://+:5000
---> Running in aa6129a3c24d
Removing intermediate container aa6129a3c24d
---> 26dbc37969a1
Step 6/8 : ENV TZ=Asia/Shanghai
---> Running in 5972afb49e7b
Removing intermediate container 5972afb49e7b
---> 8ba512fe33ac
Step 7/8 : RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
---> Running in 7af56acee843
Removing intermediate container 7af56acee843
---> 6063c7efb5e3
Step 8/8 : ENTRYPOINT ["dotnet", "DotNetCore.API.dll"]
---> Running in a5747e363825
Removing intermediate container a5747e363825
---> 490d51c5dfb0
Successfully built 490d51c5dfb0
Successfully tagged apitest:v1

此时,Docker镜像已经构建完成,可以查看下构建结果。

# 查看构建后的docker image
docker images # 执行结果
REPOSITORY TAG IMAGE ID CREATED SIZE
apitest v1 490d51c5dfb0 9 seconds ago 212MB
mcr.microsoft.com/dotnet/core/aspnet 3.1-buster-slim bdca989bc8d3 2 weeks ago 207MB

运行容器

执行下面命令运行生成的容器,需要注意一下几点:

  • 挂载目录,映射容器内目录到宿主机,如文件下载、上传等
  • 端口,宿主机与容器内端口号映射,容器内端口号要保证与Dockerfile文件内一致
  • 自动重启,设置restart属性为always,防止宿主机或者docker重启后容器停止
# 启动容器
docker run -d -p 8001:5000 --restart=always --name api.test api.test:v1 # 查看已经启动的容器
docker ps 或者 docker container ls # 执行结果
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
306917290c1c api.test:v1 "dotnet DotNetCore.A…" 6 seconds ago Up 4 seconds 0.0.0.0:8001->5000/tcp api.test

访问接口

在网内其他终端或者宿主机访问http://192.168.43.131:8001/api/test/getstr即可查看运行效果,运行效果如下:

结语

此时,已将基于.NET Core 3.1的Web API站点打包、部署至Linux平台。

.NET Core 3.1使用docker打包并部署的更多相关文章

  1. 使用.NET 6开发TodoList应用(30)——实现Docker打包和部署

    系列导航及源代码 使用.NET 6开发TodoList应用文章索引 需求 .NET 6 Web API应用使用最多的场景是作为后端微服务应用,在实际的项目中,我们一般都是通过将应用程序打包成docke ...

  2. ASP.NET Core 实战:使用 Docker 容器化部署 ASP.NET Core + MySQL + Nginx

    一.前言 在之前的文章(ASP.NET Core 实战:Linux 小白的 .NET Core 部署之路)中,我介绍了如何在 Linux 环境中安装 .NET Core SDK / .NET Core ...

  3. docker打包项目部署

    1.首先在本地安装docker,步骤可参考https://www.cnblogs.com/conswin/p/11055853.html 2.在对应项目目录下增加Dockerfile文件,其内容可参考 ...

  4. .net core 微服务架构-docker的部署-包括网关服务(Ocelot)+认证服务(IdentityServer4)+应用服务(asp.net core web api)

    本文主要介绍通过Docker来部署通过.Net Core开发的微服务架构,部署的微服务主要包括统一网关(使用Ocelot开发).统一认证(IdentityServer4).应用服务(asp.net c ...

  5. .NET Core 微服务架构-Docker部署

    本文主要介绍通过Docker来部署通过.NET Core开发的微服务架构,部署的微服务主要包括统一网关(使用Ocelot开发).统一认证(IdentityServer4).应用服务(ASP.NET C ...

  6. Linux下自动化部署ASP.NET CORE 3.1(Docker+Jenkins+Nginx)

    1.先配置好Docker阿里云加速,可以使用阿里云容器服务 (可自己在阿里云申请,要不然安装东西直接很慢)注意:https://XXXX.mirror.aliyuncs.com为阿里云加速服务分配地址 ...

  7. Docker 打包 部署

    Docker 打包 部署 一贯的开场白,大家好: 开始学习Spring Boot ,同时也再学习 Maven 自动化构建.  项目的部署环境是 Linux 服务器,Docker容器. 之所以写这篇博客 ...

  8. Gitlab CI 自动部署 asp.net core web api 到Docker容器

    为什么要写这个? 在一个系统长大的过程中会经历不断重构升级来满足商业的需求,而一个严谨的商业系统需要高效.稳定.可扩展,有时候还不得不考虑成本的问题.我希望能找到比较完整的开源解决方案来解决持续集成. ...

  9. Ubuntu 16.04+.Net Core+Docker+Uginx安装部署

    前言 最近公司的项目打算移植到.Net Core平台,所以调研了一下.Net Core在Linux下的安装部署.本篇文章会一步步的描述从安装到配置到部署的全部过程.在文章的结构和内容里,笔者借鉴了很多 ...

  10. .NET Core微服务之基于Jenkins+Docker实现持续部署(Part 1)

    Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.CI, CD 与Jenkins 互联网软件的开发和发布,已经形成了一套标准流程,最重要的组成部分就是持续集成(Continuous i ...

随机推荐

  1. Solon2 的通讯服务线程配置

    Solon 框架,关于通讯服务的所有配置 #服务端口(默认为8080) server.port: 8080 #服务主机(ip) server.host: "0.0.0.0" #服务 ...

  2. 部署:mysql搭建多主一从源复制环境

    问题描述:搭建过一主多从的环境,由于数据库数据一致性要求高,有些情景会搭建一主多从的架构,搭建多主一从的模式,相对来说适合数据整合,将多个业务的库整合到一起,方便做查询,也可以当做一个监控其他主库数据 ...

  3. 研发运维双管齐下!Seal AppManager的正确打开方式

    新一代应用统一部署管理平台 Seal AppManager 采用平台工程的理念,通过降低基础设施操作的复杂度为研发和运维团队提供易用.一致的应用管理和部署体验.Seal AppManager 帮助研发 ...

  4. 【Java SE】网络编程

    1. 网络编程概述 网络编程的目的:直接或者间接地通过网络协议与其他计算机实现数据交换,进行通讯. 网络编程两个主要的问题: ①如何精准地定位网络上的一台或多台主机,并定位主机上的特定应用 ②找到主机 ...

  5. C# 获取系统已安装的.NET版本

    获取系统已安装的.NET版本,来确定当前应用可运行的环境. 微软已经有相应的完整文档,请参考:确定已安装的 .NET Framework 版本 - .NET Framework | Microsoft ...

  6. RocketMQ的简单使用

    大家好,我是Leo!今天来和大家分享RocketMQ的一些用法. 领域模型介绍 Producer: 用于生产消息的运行实体. Topic: 主题,用于消息传输和存储的分组容器. MessageQueu ...

  7. Spring 之bean的生命周期

    文章目录 IOC Bean的生命周期 运行结果 实例演示 实体类 实例化前后置代码 初始化的前后置代码 application.xml 总结 今天我们来聊一下Spring Bean的生命周期,这是一个 ...

  8. Windows屏幕解锁服务原理及实现(1)

    https://github.com/zk2013/windows_remote_lock_unlock_screen 将生成的DLL注册至注册表 HKEY_LOCAL_MACHINE\SOFTWAR ...

  9. 2021-08-09:给定一个有正、有负、有0的数组arr,给定一个整数k,返回arr的子集是否能累加出k。1)正常怎么做?2)如果arr中的数值很大,但是arr的长度不大,怎么做?

    2021-08-09:给定一个有正.有负.有0的数组arr,给定一个整数k,返回arr的子集是否能累加出k.1)正常怎么做?2)如果arr中的数值很大,但是arr的长度不大,怎么做? 福大大 答案20 ...

  10. SpringBoot 使用 Sa-Token 完成注解鉴权功能

    注解鉴权 -- 优雅的将鉴权与业务代码分离.本篇我们将介绍在 Sa-Token 中如何通过注解完成权限校验. Sa-Token 是一个轻量级 java 权限认证框架,主要解决登录认证.权限认证.单点登 ...