.net core docker容器編排部署(linux)

来源:https://www.cnblogs.com/zhanwei103/archive/2020/05/08/12849783.html
-Advertisement-
Play Games

環境準備 需要一個linux操作系統:我這裡用的是ubuntu 18.04,安裝步驟就不說了,網上很多教程,當然也可以私信我。 既然需要用到docker,那麼就安裝個docker,apt install docker ce。 查看版本,這樣docker就算是成功安裝好了。 載入基礎鏡像 為了到時候b ...


環境準備

需要一個linux操作系統:我這裡用的是ubuntu 18.04,安裝步驟就不說了,網上很多教程,當然也可以私信我。

既然需要用到docker,那麼就安裝個docker,apt install docker-ce。

root@pims_server:/# docker -v
Docker version 19.03.7, build 7141c199a2

查看版本,這樣docker就算是成功安裝好了。

載入基礎鏡像

為了到時候build鏡像的時候快一點,我們可以先準備下基礎基礎鏡像,我這裡用的是2.2版,只要runtime即可。

root@pims_server:~# docker pull microsoft/dotnet:2.2-aspnetcore-runtime
2.2-aspnetcore-runtime: Pulling from microsoft/dotnet
804555ee0376: Downloading [=======================>                           ]   10.8MB/22.52MB
970251047358: Download complete
f3d4c41a4fd1: Download complete
bd391c46585f: Downloading [==============>                                    ]  17.73MB/62.15MB

下載完成之後,執行docker images可以查看所有鏡像。

root@pims_server:~# docker images
REPOSITORY          TAG                      IMAGE ID            CREATED             SIZE
microsoft/dotnet    2.2-aspnetcore-runtime   e7e3b238011c        3 months ago        261MB

新建一個.netcore應用程式

這裡就不細講了,我提前準備好了一個項目,發佈之後,把publish文件夾拷貝到linux系統中,如下所示:

root@pims_server:/mnt/share/schedule_web# ll
total 13794
drwxrwxrwx 1 root root   20480 Mar 23 08:49 ./
drwxrwxrwx 1 root root    4096 Mar 25 07:39 ../
-rwxrwxrwx 1 root root 2179584 May 28  2018 BouncyCastle.Crypto.dll*
drwxrwxrwx 1 root root    4096 Mar 23 08:49 Configs/
-rwxrwxrwx 1 root root     155 Mar 20 10:13 Dockerfile*
-rwxrwxrwx 1 root root  299008 Aug 10  2018 Google.Protobuf.dll*
-rwxrwxrwx 1 root root  221184 Mar  8  2017 log4net.dll*
-rwxrwxrwx 1 root root   20560 Oct 11 14:28 Microsoft.EntityFrameworkCore.Abstractions.dll*
-rwxrwxrwx 1 root root 1426512 Oct 11 14:26 Microsoft.EntityFrameworkCore.dll*
-rwxrwxrwx 1 root root  762744 Oct 11 14:24 Microsoft.EntityFrameworkCore.Relational.dll*
-rwxrwxrwx 1 root root  231800 Oct 11 14:28 Microsoft.EntityFrameworkCore.SqlServer.dll*
-rwxrwxrwx 1 root root  780288 Dec  3 01:13 MySql.Data.dll*
-rwxrwxrwx 1 root root   67584 Dec  3 01:13 MySql.Data.EntityFrameworkCore.dll*
-rwxrwxrwx 1 root root  693680 Nov  8 16:56 Newtonsoft.Json.dll*
-rwxrwxrwx 1 root root  263168 Dec  3 07:04 Oracle.EntityFrameworkCore.dll*
-rwxrwxrwx 1 root root 4656640 Dec  4 09:17 Oracle.ManagedDataAccess.dll*
-rwxrwxrwx 1 root root  256284 Mar 23 08:43 PimsSchedulingWebApi.deps.json*
-rwxrwxrwx 1 root root  153600 Mar 23 08:43 PimsSchedulingWebApi.dll*
-rwxrwxrwx 1 root root   58032 Mar 23 08:43 PimsSchedulingWebApi.pdb*
-rwxrwxrwx 1 root root     224 Mar 23 08:43 PimsSchedulingWebApi.runtimeconfig.json*
-rwxrwxrwx 1 root root  281600 Mar 23 09:05 PimsSchedulingWebApi.Views.dll*
-rwxrwxrwx 1 root root    7800 Mar 23 08:43 PimsSchedulingWebApi.Views.pdb*
-rwxrwxrwx 1 root root  176640 Dec 20 01:57 Remotion.Linq.dll*
-rwxrwxrwx 1 root root  424448 Oct 16  2017 Renci.SshNet.dll*
drwxrwxrwx 1 root root       0 Mar 23 08:49 runtimes/
drwxrwxrwx 1 root root       0 Mar 23 08:49 SqlScripts/
-rwxrwxrwx 1 root root   34816 Jul 14  2016 SshNet.Security.Cryptography.dll*
-rwxrwxrwx 1 root root  380848 Nov 20  2017 System.Configuration.ConfigurationManager.dll*
-rwxrwxrwx 1 root root   44080 Sep 18  2018 System.Diagnostics.DiagnosticSource.dll*
-rwxrwxrwx 1 root root  236320 Dec 20 01:57 System.Interactive.Async.dll*
-rwxrwxrwx 1 root root   51064 Sep 12  2019 System.Security.AccessControl.dll*
-rwxrwxrwx 1 root root   24880 Jul 19  2017 System.Security.Cryptography.ProtectedData.dll*
-rwxrwxrwx 1 root root   93048 Sep 12  2019 System.Security.Permissions.dll*
-rwxrwxrwx 1 root root   33656 Sep 12  2019 System.Security.Principal.Windows.dll*
-rwxrwxrwx 1 root root  118520 Jun 11  2016 System.Xml.XPath.XmlDocument.dll*
-rwxrwxrwx 1 root root   58880 Dec  3 01:01 Ubiety.Dns.Core.dll*
-rwxrwxrwx 1 root root     537 Mar 23 08:43 web.config*
drwxrwxrwx 1 root root       0 Mar 23 08:49 wwwroot/

至於如何拷貝到linux有很多種方法,有遠程工具可以直接通過xftp上傳,因為我是用的VirtualBox虛擬機,可以直接利用共用文件夾,掛載到linux上即可。
掛載共用文件夾命令:sudo mount -t vboxsf Shared /mnt/share
Shared是共用文件夾名稱,/mnt/share是要掛載到的目標路徑。

Dockerfile

我們可以看到這裡面就是項目生成的dll文件,還有一個Dockerfile文件,這是build鏡像是要用到的。

FROM microsoft/dotnet:2.2-aspnetcore-runtime
MAINTAINER zhanwei
COPY . /app
WORKDIR /app
EXPOSE 8000
ENTRYPOINT ["dotnet", "PimsSchedulingWebApi.dll"]

這就是我的Dockerfile,很簡單microsoft/dotnet:2.2-aspnetcore-runtime是基礎鏡像。
COPY:
複製指令,從上下文目錄中複製文件或者目錄到容器里指定路徑。

WORKDIR:
指定工作目錄。用 WORKDIR 指定的工作目錄,會在構建鏡像的每一層中都存在。(WORKDIR 指定的工作目錄,必須是提前創建好的)。
docker build 構建鏡像過程中的,每一個 RUN 命令都是新建的一層。只有通過 WORKDIR 創建的目錄才會一直存在。

EXPOSE:
僅僅只是聲明埠。
作用:
幫助鏡像使用者理解這個鏡像服務的守護埠,以方便配置映射。
在運行時使用隨機埠映射時,也就是 docker run -P 時,會自動隨機映射 EXPOSE 的埠。

ENTRYPOINT:
類似於 CMD 指令,但其不會被 docker run 的命令行參數指定的指令所覆蓋,而且這些命令行參數會被當作參數送給 指令指定的程式。但是, 如果運行 docker run 時使用了 --entrypoint 選項,此選項的參數可當作要運行的程式覆蓋 ENTRYPOINT 指令指定的程式。
優點:在執行 docker run 的時候可以指定 ENTRYPOINT 運行所需的參數。
註意:如果 Dockerfile 中如果存在多個 ENTRYPOINT 指令,僅最後一個生效。

Build鏡像

都準備好了之後,執行docker build命令,註意最後有一個.,少了這個點是執行不成功的。

root@pims_server:/mnt/share/schedule_web# sudo docker build -t schedule_web:1.0 .
Sending build context to Docker daemon  19.02MB
Step 1/6 : FROM microsoft/dotnet:2.2-aspnetcore-runtime
 ---> e7e3b238011c
Step 2/6 : MAINTAINER zhanwei
 ---> Running in a42940177b66
Removing intermediate container a42940177b66
 ---> b9eb0d8cd441
Step 3/6 : COPY . /app
 ---> 810d14b5a4a0
Step 4/6 : WORKDIR /app
 ---> Running in 97360f19bf80
Removing intermediate container 97360f19bf80
 ---> 092ed5dc0364
Step 5/6 : EXPOSE 8000
 ---> Running in 46593eb29da3
Removing intermediate container 46593eb29da3
 ---> 397cf3432ae2
Step 6/6 : ENTRYPOINT ["dotnet", "PimsSchedulingWebApi.dll"]
 ---> Running in add035b834d4
Removing intermediate container add035b834d4
 ---> 40b10808fc7c
Successfully built 40b10808fc7c
Successfully tagged schedule_web:1.0
root@pims_server:/mnt/share/schedule_web#

好的,成功了,現在查看一下images,可以看到剛剛構建的鏡像了

root@pims_server:/mnt/share/schedule_web# docker images
REPOSITORY          TAG                      IMAGE ID            CREATED             SIZE
schedule_web        1.0                      40b10808fc7c        25 seconds ago      279MB
microsoft/dotnet    2.2-aspnetcore-runtime   e7e3b238011c        3 months ago        261MB

創建容器並啟動容器,-p映射埠,5000是容器內部埠,8000是本機對外開放埠。

root@pims_server:docker run -it -p 8000:5000 schedule_web:1.0

容器編排docker-compose

當我們有多個服務要部署時,可以用容器編排,可以同時啟動多個容器。
比如現在有一個後臺定時服務、一個前端服務。那麼為了方便我只有通過compose up命令就可以了。

root@pims_server:/# docker images
REPOSITORY          TAG                      IMAGE ID            CREATED              SIZE
schedule_server     1.0                      163b44854f0d        About a minute ago   279MB
schedule_web        1.0                      40b10808fc7c        4 minutes ago        279MB
microsoft/dotnet    2.2-aspnetcore-runtime   e7e3b238011c        3 months ago         261MB

查看docker-compose版本,順便檢查下伺服器是否安裝。

root@pims_server:/home/zhanwei# docker-compose --version
docker-compose version 1.23.2, build unknown
root@pims_server:/home/zhanwei#

docker-compose.yml文件

version: '3'
services:
  #啟動註冊中心eureka-server集群 集中管理/服務註冊/服務發現
  schedule_web:
    container_name: schedule_web
    image: schedule_web:1.0
    ports:
      - "8000:5000"
    environment:
      appId: testid
      appSecret: testsecret
      baseUrl: http://192.168.12.48:8080/api/openapi/orgs/v1/
      db_server: 10.30.52.20
      db_port: 3306
      db_type: mysql
      db_user: root
      db_pwd: 123456
      db_name: schedule_8000
  schedule_server:
    container_name: schedule_server
    image: schedule_server:1.0
    environment:
      db_server: 127.0.0.1
      db_port: 3306
      db_type: mysql
      db_user: root
      db_pwd: 123456
      db_name: schedule_8000

執行命令docker-compose up -d,我們看下結果:

root@pims_server:/home/zhanwei# docker-compose up -d
Creating schedule_web    ... done
Creating schedule_server ... done
root@pims_server:/home/zhanwei#

已經啟動完成了。。。

docker-compose命令解析:
up:
啟動所有在Compose問中定義的容器,並且把它們的日誌信息彙集在一起。通常會添加-d參數(在up後面),讓容器在後臺執行
start:啟動指定的已經存在的容器。
build:重新建造由Dockerfile構建的鏡像。
ps:獲取由Compose管理的容器的狀態信息。
run:啟動一個容器,並允許一個一次性的命令。被連接的容器會同時啟動,除非用了 --no-deps參數。
logs:彙集由Compose管理的容器的日誌,並以彩色輸出。
stop:停止容器,但不會刪除它們。
rm:刪除已停止的容器。不要忘記使用-v參數來刪除任何由Docker管理的數據捲。

查看一下容器

root@pims_server:/# docker ps
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS              PORTS                              NAMES
77677298c7f9        schedule_server:1.0   "dotnet PimsScheduli…"   25 minutes ago      Up 25 minutes                                          schedule_server
bc5502237d9e        schedule_web:1.0      "dotnet PimsScheduli…"   25 minutes ago      Up 25 minutes       8000/tcp, 0.0.0.0:8001->5000/tcp   schedule_web

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 需求:錄入表達式計算出值 .net 後臺:DataTable有個函數:Compute 具體用法可自行百度 案例:錄入表達式 1 1/2 獲取百分比值 string value=(Convert.ToDouble(dt.Compute(dt.Rows[i][0].ToString(),"false") ...
  • CAP源碼追蹤(一)消息是如何執行的,執行後又是如何執行回調的 場景 .NET Core 3.1 nuget包:DotNetCore.CAP.RabbitMQ 3.0.2 前言 以對話為引,梳理我們的問題: 小明 聰明絕頂的程式猿,小紅 絕美程式媛 小紅:小明,在CAP中,我們通過 CapSubsc ...
  • 適用:.net framework 2.0+ winform項目 效果: 倉庫:https://github.com/ahdung/SystemMenuUtil -文畢- ...
  • 一、為什麼使用Autofac? Autofac是.NET領域最為流行的IoC框架之一,傳說是速度最快的一個。 1.1、性能 有人專門做了測試: 1.2、優點 1)與C#語言聯繫很緊密。C#里的很多編程方式都可以為Autofac使用,例如可以使用Lambda表達式註冊組件。 2)較低的學習曲線。學習它 ...
  • 背景:項目需要用到上傳視頻功能,由於視頻有知識產權,要求必須上傳到自己的伺服器上不允許用第三方視頻網站介面上傳,於是一開始開始用的是input type=file去上傳,小的視頻上傳沒有問題,上傳將近300M的視頻最後顯示上傳失敗,一開始沒有找到原因,修改了web.config 的<httpRunt ...
  • 《ASP.NET MVC 5 高級編程》 [作者] (美) Jon Galloway (美) Brad Wilson (美) K. Scott Allen (美) David Matson[譯者] (中) 孫遠帥[出版] 清華大學出版社[版次] 2015年02月 第1版[印次] 2015年02月 第 ...
  • 框架結構 實體層: Typecho.Enties 倉儲層: Typecho.IRepository IconcardContext.cs IRepositoryFactory.cs IRepositorys.cs Typecho.Repository RepositoryFactory.cs Rep ...
  • 0. 前言 不知道有沒有動手能力強的小伙伴照著上一篇的內容寫過程式呢?如果有的話,應該會在使用的時候發現以下幾個問題: 1. 每次啟動都需要經過漫長的時間去遍歷磁碟里的文件目錄 2. 因為數據是用的字典保存的,所以會消耗大量的記憶體空間 3. 不能多次查詢 現在我們就針對這些問題,讓我們的小工具實用起 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...