Docker中部署.NET CORE應用(控制檯應用程式篇)
Docker中部署.NET Core應用(控制檯篇)
在本教程中,你將瞭解:
- 建立併發布簡單的 .NET Core 控制檯應用
- 建立並配置用於 .NET Core 的 Dockerfile
- 生成 Docker 映像
- 建立、執行、刪除 Docker 容器
一、環境準備
1、百度雲伺服器
-
CPU:1核。
-
記憶體:2GB。
-
頻寬:1M。
-
作業系統:CentOS/8.2 x86_64(64bit)
2、安裝以下必備元件
- .NET Core 3.1 SDK
如果已安裝 .NET Core,請使用dotnet --info
命令來確定使用的是哪個 SDK。 - Docker 社群版
3、安裝Docker
可參考這篇文章:https://blog.csdn.net/qq_40600379/article/details/108939632
4、安裝.NET Core3.1SDK
可參考這篇文章:https://blog.csdn.net/qq_40600379/article/details/109107818
二、建立 .Net Core 應用
1、建立專案資料夾
(1)首先使用命令"cd /"進入到CentOS的根目錄。
(2)使用 mkdir netcore-project 命令建立一個名為"netcore-project"的資料夾。
(3)使用 cd /netcore-project命令進入(2)中建立的資料夾。
(4)使用 20201014netcore-docker 命令建立一個名為"20201014netcore-docker"的資料夾。
cd /
mkdir netcore-project
cd /netcore-project
mkdir 20201014netcore-docker
(5)使用"pwd"命令檢視當前資料夾的路徑
[root@instance-12a4py32 App]# pwd
/netcore-project/20201014netcore-docker/App
2、使用.NET Core命令建立控制檯專案
(1)在命令列中輸入下面命令,表示建立一個名為"NetCore.Docker"的控制檯應用程式,並放在App資料夾中。
dotnet new console -o App -n NetCore.Docker
(2)資料夾樹將如下所示:
20201014netcore-docker
└──App
├──NetCore.Docker.csproj
├──Program.cs
└──obj
├──NetCore.Docker.csproj.nuget.dgspec.json
├──NetCore.Docker.csproj.nuget.g.props
├──NetCore.Docker.csproj.nuget.g.targets
├──project.assets.json
└──project.nuget.cache
(3) 使用 "cd /App"命令進入"App"目錄(因為含有Main函式的.cs檔案在這個目錄中),再使用 dotnet run
命令啟動應用,並在命令下方列印 Hello World!
:
cd /App
dotnet run
Hello World!
(4) 使用Vim文字編輯器開啟“Program.cs” 檔案,可看到.cs中的檔案程式碼如下所示:
using System;
namespace NetCore.Docker
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
}
}
}
(5)將此檔案替換為以下每秒計數一次的程式碼(注:在vim編輯器中點選鍵盤的"i"就進入編輯模式,點選"esc"退出編輯模式,輸入":wq"表示儲存並退出
):
using System;
using System.Threading.Tasks;
namespace NetCore.Docker
{
class Program
{
static async Task Main(string[] args)
{
var counter = 0;
var max = args.Length != 0 ? Convert.ToInt32(args[0]) : -1;
while (max == -1 || counter < max)
{
Console.WriteLine($"Counter: {++counter}");
await Task.Delay(1000);
}
}
}
}
(6)儲存此檔案,並使用 dotnet run
再次測試程式。 注意,此應用無限期執行。 敲擊鍵盤的"Ctrl+C "可以停止執行。 下面是一個示例輸出:
dotnet run
Counter: 1
Counter: 2
Counter: 3
Counter: 4
^C
三、釋出 .Net Core 應用
(1)在將 .NET Core 應用新增到 Docker 映像之前,必須先發布該應用,請執行以下命令:
dotnet publish -c Release
(2)此命令將應用編譯到“釋出”資料夾中 ,切換工作路徑到釋出資料夾, 路徑應為 .\App\bin\Release\netcoreapp3.1\publish\
[root@instance-12a4py32 20201014netcore-docker]# cd App/bin/Release/netcoreapp3.1
(3)使用命令 ls
檢視當前目錄列表,並驗證 NetCore.Docker.dll 檔案是否已建立 。
[root@instance-12a4py32 netcoreapp3.1]# ls
NetCore.Docker NetCore.Docker.deps.json NetCore.Docker.dll NetCore.Docker.pdb NetCore.Docker.runtimeconfig.dev.json NetCore.Docker.runtimeconfig.json publish
四、建立 Dockerfile
1、建立Dockerfile檔案
(1)在包含 .csproj 的目錄中建立名為“Dockerfile”的檔案,並在Vim文字編輯器中將其開啟 。
(2)FROM
關鍵字表示限定的 Docker 容器映像名稱(文字中第一段必須是以FROM開頭)。
(3)Microsoft 容器登錄檔(MCR,mcr.microsoft.com)是 Docker Hub 的聯合,可託管可公開訪問的容器。
(4) dotnet/core
段是容器儲存庫,其中 aspnet
段是容器映像名稱。 該映像使用 3.1
進行標記,它用於版本控制。 因此,mcr.microsoft.com/dotnet/core/aspnet:3.1
是 .NET Core 3.1 執行時。 請確保拉取的執行時版本與 SDK 面向的執行時一致。
(5)在編輯器中輸入如下程式碼:
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1
(6)此時目錄結構如下:
docker-working
└──App
├──Dockerfile
├──NetCore.Docker.csproj
├──Program.cs
├──bin
│ └──Release
│ └──netcoreapp3.1
│ └──publish
│ ├──NetCore.Docker.deps.json
│ ├──NetCore.Docker.exe
│ ├──NetCore.Docker.dll
│ ├──NetCore.Docker.pdb
│ └──NetCore.Docker.runtimeconfig.json
└──obj
└──...
2、建立容器映像
(1)docker build
命令使用 Dockerfile 檔案來建立容器映像。 此檔案是名為“Dockerfile” 的文字檔案,它沒有副檔名。
(2)Docker 會處理 Dockerfile 中的每一行。
(3) docker build
命令中的 .
指示 Docker 在當前資料夾中查詢 Dockerfile 。 此命令生成映像,並建立指向相應映像的本地儲存庫“counter-image” 。
(4)在終端中執行以下命令(注:可能會比較久,因為要拉取國外映象):
docker build -t counter-image -f Dockerfile .
(5)在此命令完成後,執行 docker images
以列出已安裝的映像:
(6)從上圖可看到,兩個映像共用相同的“IMAGE ID” 值。 原因是文字中只有一條命令,且該命令是基於"mcr.microsoft.com/dotnet/core/aspnet:3.1"生成新的。
3、建立“IMAGE ID” 值不同的容器映像
(1)COPY
命令指示 Docker 將計算機上的指定資料夾複製到容器中的資料夾。 在此示例中,“publish”資料夾被複制到容器中的“App”資料夾 。
(2)WORKDIR
命令將容器內的當前目錄更改為“App” 。
(3)命令 ENTRYPOINT
指示 Docker 將容器配置為可執行檔案執行。 在容器啟動時,ENTRYPOINT
命令執行。 當此命令結束時,容器也會自動停止。
(4)在 Dockerfile 中新增如下三個命令:
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1
COPY bin/Release/netcoreapp3.1/publish/ App/
WORKDIR /App
ENTRYPOINT ["dotnet", "NetCore.Docker.dll"]
(5)在終端中,執行 docker build -t counter-image -f Dockerfile .
;在此命令完成後,執行 docker images
。
五、建立容器
1、建立容器
(1)在第四步中,我們已經建立好了映像,接下來使用如下命令建立容器:
(2)下面的命令表示在counter-image映像(映象)基礎上建立一個名為"core-counter-container"容器。
(3)下面很長一串字串表示的是容器的ID。
[root@instance-12a4py32 App]# docker create --name core-counter-container counter-image
57f4babc5dd967fe16c4d1671b18fd412df8e4cf3b162f7707b2ce1c928a23e5
(4)使用 docker ps -a
命令檢視當前系統中所有容器的列表:
[root@instance-12a4py32 App]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
57f4babc5dd9 counter-image "dotnet NetCore.Dock…" 39 seconds ago Created core-counter-container
9480e7f28609 hello-world "/hello" 22 hours ago Exited (0) 22 hours ago admiring_swartz
2、管理容器
(1)在上一步中,我們建立了一個名為 core-counter-container
容器。 下面的示例使用 docker start
命令來啟動容器,然後使用 docker ps
命令僅顯示正在執行的容器:
[root@instance-12a4py32 App]# docker start core-counter-container
core-counter-container
[root@instance-12a4py32 App]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
57f4babc5dd9 counter-image "dotnet NetCore.Dock…" 2 minutes ago Up 9 seconds core-counter-container
9480e7f28609 hello-world "/hello" 22 hours ago Exited (0) 22 hours ago admiring_swartz
[root@instance-12a4py32 App]# docker stop core-counter-container
(2)使用docker stop
命令停止容器。 下面的示例使用 docker stop
命令來停止容器,然後使用 docker ps
命令來顯示未在執行的容器:
控制檯複製
[root@instance-12a4py32 App]# docker stop core-counter-container
core-counter-container
[root@instance-12a4py32 App]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
57f4babc5dd9 counter-image "dotnet NetCore.Dock…" 4 minutes ago Exited (143) 10 seconds ago core-counter-container
9480e7f28609 hello-world "/hello" 23 hours ago Exited (0) 23 hours ago admiring_swartz
(3)兩個命令的對比如下圖:
3、連線到容器
(1)在容器執行後,可以連線到它來檢視輸出。 使用 docker start
和 docker attach
命令,啟動容器並檢視輸出流。
(2)在此示例中,Ctrl+C 擊鍵用於從正在執行的容器中分離出來。 除非另行指定,否則此擊鍵將結束容器中的程式,這會停止容器。 --sig-proxy=false
引數可確保 Ctrl+C 不會停止容器中的程式。
(3)從容器中分離出來後重新連線,以驗證它是否仍在執行和計數。
(4)下面出現"^c"是因為敲擊了鍵盤的"ctrl+c"。
[root@instance-12a4py32 App]# docker start core-counter-container
core-counter-container
[root@instance-12a4py32 App]# docker attach --sig-proxy=false core-counter-container
Counter: 31
Counter: 32
Counter: 33
Counter: 34
Counter: 35
Counter: 36
Counter: 37
Counter: 38
Counter: 39
Counter: 40
Counter: 41
Counter: 42
Counter: 43
Counter: 44
^C
[root@instance-12a4py32 App]# docker attach --sig-proxy=false core-counter-container
Counter: 81
Counter: 82
Counter: 83
Counter: 84
Counter: 85
Counter: 86
Counter: 87
^C
4、刪除容器
(1) 首先停止正在執行的容器。
(2)使用新命令刪除前面建立的"core-counter-container"容器。
docker stop core-counter-container
(3)下面"docker ps -a"列出所有容器,可看大列表中存在名為"core-counter-container" 的容器。
(4)使用 docker rm
命令來刪除容器,即輸入"docker rm core-counter-container"命令執行刪除操作。
(5)再次使用"docker ps -a"列出所有容器,發現已經沒有了名為"core-counter-container" 的容器。
[root@instance-12a4py32 App]# docker stop core-counter-container
core-counter-container
[root@instance-12a4py32 App]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
57f4babc5dd9 counter-image "dotnet NetCore.Dock…" 8 minutes ago Exited (143) 10 seconds ago core-counter-container
9480e7f28609 hello-world "/hello" 23 hours ago Exited (0) 23 hours ago admiring_swartz
[root@instance-12a4py32 App]# docker rm core-counter-container
core-counter-container
[root@instance-12a4py32 App]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9480e7f28609 hello-world "/hello" 23 hours ago Exited (0) 23 hours ago admiring_swartz
六、重要命令
Docker 包含許多不同的命令,可用於建立、管理以及與容器和映像進行互動。 下面這些 Docker 命令對於管理容器來說至關重要:
七、清理資源
在本教程中,建立了容器和映像。 如果需要,請刪除這些資源。 以下命令可用於
(1)列出所有容器
docker ps -a
(2)停止正在執行的容器。
docker stop counter-image-container
(3)刪除容器
docker rm counter-image-container
(4)使用 docker images
命令來列出已安裝的映像。
(5)刪除計算機上不再需要用到的映像。 依次刪除 Dockerfile 建立的映像,以及 Dockerfile 所依據的 .NET Core 映像。 可以使用 IMAGE ID 或 REPOSITORY:TAG 格式字串。
rm Dockerfile //刪除Dockerfile檔案,注意需要回到存放該檔案的目錄
docker rmi counter-image:latest //刪除counter-image映象
docker rmi mcr.microsoft.com/dotnet/core/aspnet:3.1
參考微軟官方文件:https://docs.microsoft.com/zh-cn/dotnet/core/docker/build-container?tabs=linux#create-the-dockerfilehttps://docs.microsoft.com/zh-cn/dotnet/core/install/linux-centos
如果覺得有用,請點個贊哈!
如果疑問或者建議,可以留言或私信我!
相關文章
- Azure Cosmos DB (五) .Net Core 控制檯應用
- Linux Docker 部署 ASP.NET Core應用LinuxDockerASP.NET
- Docker容器中執行.Net Core應用程式Docker
- 【.NET】控制檯應用程式的各種互動玩法
- .NET Core容器化之多容器應用部署(Docker-Compose)Docker
- .NET Core(.NET 6)控制檯應用程式與MongoDB Atlas入門實戰示例教程詳解MongoDB
- 快速搞懂.NET 5/.NET Core應用程式的釋出部署
- .Net core 中 AutoMapper的應用APP
- Docker容器中執行.net framework控制檯程式DockerFramework
- 控制檯程式使用ABP框架應用層服務框架
- 聊聊.net應用程式的Docker映象Docker
- Docker部署Angular應用DockerAngular
- .NET CORE與Spring Boot編寫控制檯程式應有的優雅姿勢Spring Boot
- ASP.NET Core 應用程式狀態ASP.NET
- 一個庫幫你輕鬆的建立漂亮的.NET控制檯應用程式
- Docker_Docker應用部署4Docker
- asp.net core 應用docke部署到centos7ASP.NETCentOS
- 如何使用 HttpReports 監控 .NET Core 應用程式HTTP
- Docker常用的應用部署Docker
- 使用 Docker 部署 Node 應用Docker
- 手把手docker部署java應用(初級篇)DockerJava
- .net core 控制檯程式使用依賴注入(Autofac)依賴注入
- 使用gitlab自帶的ci/cd實現.net core應用程式的部署Gitlab
- 重新整理 .net core 實踐篇————配置應用[一]
- .net core EF Core 檢視的應用
- 在Docker容器中執行ASP.NET MVC應用程式DockerASP.NETMVC
- ASP.NET Core應用程式8:標籤助手ASP.NET
- 如何使用 VS Code 開發.NET Core應用程式
- 如何使用 docker 部署前端應用Docker前端
- Docker容器化部署Python應用DockerPython
- wildfly 21中應用程式的部署
- gRPC在 ASP.NET Core 中應用學習RPCASP.NET
- Asp.net core中RedisMQ的簡單應用ASP.NETRedisMQ
- 在 .NET Core 中應用六邊形架構架構
- .NET Core實用技巧(一)如何將EF Core生成的SQL語句顯示在控制檯中SQL
- 使用 OpenTelemetry 構建 .NET 應用可觀測性(4):ASP.NET Core 應用中整合 OTelASP.NET
- 開源專案分享:ChatGPT 控制檯聊天應用ChatGPT
- 使用CoreRT將.NET Core釋出為Native應用程式