.NET Core 3.1使用docker打包並部署


簡介

本文主要說明使用.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平台。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM