[筆記]使用Docker部署.NET Core應用程式

来源:https://www.cnblogs.com/ZaraNet/archive/2020/01/04/12147302.html
-Advertisement-
Play Games

大概快有一年的時間沒有碰過docker了,理由很簡單,基本上都是在IIS上部署,看到很多大佬都開始Devops持續化集成了,還有就是用Linux守護進程很噁心,哈哈,但相對來說成本會更高,但對於大型團隊來說還是不錯的,這不?不想被大伙甩下,哈哈,趕緊撈回來點丟下的知識,這篇文章就算是對我自己的筆記吧 ...


  大概快有一年的時間沒有碰過docker了,理由很簡單,基本上都是在IIS上部署,看到很多大佬都開始Devops持續化集成了,還有就是用Linux守護進程很噁心,哈哈,但相對來說成本會更高,但對於大型團隊來說還是不錯的,這不?不想被大伙甩下,哈哈,趕緊撈回來點丟下的知識,這篇文章就算是對我自己的筆記吧...Docker 中 有EE 和 CE 兩個版本,其中EE是開源的,CE是閉源的。

在Linux中安裝Docker容器

首先我們需要檢查Linux內核是否大於3.1.0,通過該命令查看。

[root@iZenarrdqnvpc4Z ~]# uname -r
3.10.0-1062.1.2.el7.x86_64

隨後我們安裝docker必要的一些必要的工具,可以提前安裝。

yum install -y yum-utils device-mapper-persistent-data lvm2

現在可以直接裝Docker了,使用命令如下

sudo wget -qO- https://get.docker.com | sh

隨後檢查docker版本,看看是否安裝成功?

[root@iZenarrdqnvpc4Z ~]# docker version
Client: Docker Engine - Community
 Version:           19.03.5
 API version:       1.40
 Go version:        go1.12.12
 Git commit:        633a0ea
 Built:             Wed Nov 13 07:25:41 2019
 OS/Arch:           linux/amd64
 Experimental:      false
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

現在想要使用docker image 以及 docker ps 等命令還不可以,因為你還沒有start docker 服務。使用這倆命令來開啟與關閉docker服務。

start docker.service  //開啟
stop docker.service   //關閉

由於我是用的阿裡伺服器,它給我提供了鏡像加速器,這主要是為了提高拉取docker hub的速度,可以在https://cr.console.aliyun.com/cn-huhehaote/instances/mirrors 中看見,我的內容如下,完事之後就可以享受加速了。

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://baqadmms.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

在.NET Core工程中編寫Dockerfile文件。

#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.
#應用基礎鏡像
FROM mcr.microsoft.com/dotnet/core/aspnet:3.0-buster-slim AS base
#工作目錄
WORKDIR /app
#將整個publish文件 放到該文件下生產
COPY . /app
#指定對外埠
EXPOSE 5003
#啟動命令
ENTRYPOINT ["dotnet", "Jwt_Policy_Demo.dll"]

因為我的應用程式是單一部署,所以不存在動態埠  所以我這邊直接useUrls了。

public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                    webBuilder.UseUrls("http://*:5003");
                });

現在通過dotnet命令發佈項目,一定記得把Dockerfile文件屬性改為輸出到輸出目錄哦~,隨後你可以現在Windows中進行測試了,例如dotnet xxx.dll命令。

隨後通過FileZilla上傳到Linux目錄中Publish文件夾中,當然這也是我自己的愛好,因為它的命名很符合現在的場景。

就這樣我們去構建build,通過linux命令cd到發佈文件夾中,然後通過build命令構建鏡像,我們發現剛剛的DockerFile的命令,一步一步都執行成功了。

[root@iZenarrdqnvpc4Z JwtWeb]# docker build -t jwtdemo .
Sending build context to Docker daemon   22.9MB
Step 1/5 : FROM mcr.microsoft.com/dotnet/core/aspnet:3.0-buster-slim AS base
3.0-buster-slim: Pulling from dotnet/core/aspnet
8ec398bc0356: Pull complete 
9584d2ef7ebe: Pull complete 
62b61706cd9b: Pull complete 
676f1d13ec65: Pull complete 
35ddfe9ef309: Pull complete 
Digest: sha256:de2b03f916d1f3a72d342825c3ec4414d0190862b20d2af295320334f17a1480
Status: Downloaded newer image for mcr.microsoft.com/dotnet/core/aspnet:3.0-buster-slim
 ---> c7e868fda63d
Step 2/5 : WORKDIR /app
 ---> Running in 385a30e2b223
Removing intermediate container 385a30e2b223
 ---> b95c2a722df5
Step 3/5 : COPY . /app
 ---> 48edf64106cd
Step 4/5 : EXPOSE 5003
 ---> Running in d4bf7b3b7122
Removing intermediate container d4bf7b3b7122
 ---> 752724a940e8
Step 5/5 : ENTRYPOINT ["dotnet", "Jwt_Policy_Demo.dll"]
 ---> Running in 9c0c2c190da3
Removing intermediate container 9c0c2c190da3
 ---> 4045861329a7
Successfully built 4045861329a7
Successfully tagged jwtdemo:latest

隨後通過docker images 查看生成鏡像是否成功,ok沒問題,現在就可以run了...

[root@iZenarrdqnvpc4Z JwtWeb]# docker images
REPOSITORY                             TAG                 IMAGE ID            CREATED             SIZE
jwtdemo                                latest              4045861329a7        2 minutes ago       230MB
mcr.microsoft.com/dotnet/core/aspnet   3.0-buster-slim     c7e868fda63d        7 days ago          207MB

在docker run 中指定外部和docker內部中的映射規則  --name 是容器的名稱,而最後面的是使用的所使用的鏡像。

[root@iZenarrdqnvpc4Z JwtWeb]# docker run --name jwtweb -d -p 8000:5003 jwtdemo
36c4d4f8218adeeafa737f51f0975dfe8d6aa6d17435cefc355749a59c6298a2
[root@iZenarrdqnvpc4Z JwtWeb]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
36c4d4f8218a        jwtdemo             "dotnet Jwt_Policy_D…"   7 seconds ago       Up 6 seconds        0.0.0.0:8000->5003/tcp   jwtweb

非常簡單,我剛剛發佈的網站地址如下:傳送門 ..

超超超超超級簡單的dockerfile github地址在:傳送門 ..

另外

如果不通過UseUrls來進行啟動的話,那麼可以該下dockerfile的ENTRYPOINT 如下

ENTRYPOINT ["dotnet", "Jwt_Policy_Demo.dll","urls=http://*:5003"]

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

-Advertisement-
Play Games
更多相關文章
  • 為什麼Python使用縮進來分組語句? 為什麼簡單的算術運算得到奇怪的結果? 為什麼浮點計算不准確? 為什麼Python字元串是不可變的? 為什麼必須在方法定義和調用中顯式使用“self”? 為什麼不能在表達式中賦值? 為什麼Python對某些功能(例如list.index())使用方法來實現,而其 ...
  • 一、前言 只是講asp.net core 3.x通用主機的大致原理,這些東西是通過查看源碼以及自己根據經驗總結得來的,在文章中不會深入源碼,因為個人覺得懂原理就曉得擴展點,後期碰到有需求的時候再仔細去研究源碼也不遲。閱讀前你應該先去瞭解下(推薦博客園老A的博客): asp.net core中的依賴註 ...
  • 建造者模式(Builder)——從組裝電腦開始 建造者模式概括起來就是將不同獨立的組件按照一定的條件組合起來構成一個相對業務完整的對象。調用者無需知道構造的過程。 我們從組裝電腦開始 讓我們從買組裝電腦開始吧。 首先要買一個電腦,一般都有兩個選擇 —— 品牌電腦和組裝電腦,一般人為了省事和放心都會選 ...
  • 首先說說它的機制 處理HTTP請求並生成響應是一個很長的過程。路由只是這個過程的第一步。路由過程的最終結果是一個控制器。它將處理沒有映射到物理靜態文件的請求。 如下圖 操作調用程式,是核心,主要負責協調所有必要的步驟來處理請求,操作調用程式接受控制器工廠和控制器上下文,後者是一個容器對象,包含了路由 ...
  • 什麼樣的HTTP方法是安全的? 什麼樣的HTTP方法是安全的? 如果一個方法不會改變資源的表述,那麼這個方法就被認為是安全的。 如果一個方法不會改變資源的表述,那麼這個方法就被認為是安全的。 例如 HTTP GET 和 HTTP HEAD 就被認為是安全的,但需要註意的是,這並不意味著執行GET請求 ...
  • 向Web API傳遞參數 數據可以通過多種方式來傳給API。 數據可以通過多種方式來傳給API。 Binding Source Attributes 會告訴 Model 的綁定引擎從哪裡找到綁定源。 Binding Source Attributes 會告訴 Model 的綁定引擎從哪裡找到綁定源。 ...
  • 示常式序是同步套接字程式,功能很簡單,只是客戶端發給伺服器一條信息,伺服器向客戶端返回一條信息,是一個簡單示例,也是一個最基本的socket編程流程。 簡單步驟說明: 1.用指定的port, ip 建立一個EndPoint對象 2.建立一個Socket對象; 3.用Socket對象的Bind()方法 ...
  • 一.反射介紹 反射是.NET中的重要機制,通過反射,可以在運行時獲得程式或程式集中每一個類型(包括類、結構、委托、介面和枚舉等)的成員和成員的信息。 有了反射,即可對每一個類型瞭如指掌。另外我還可以直接創建對象,即使這個對象的類型在編譯時還不知道。 二.反射的用途 1.使用Assembly定義和載入 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...