Docker的使用初探(二):Docker與.NET Core的結合

来源:https://www.cnblogs.com/LFeather/archive/2019/01/13/10264619.html
-Advertisement-
Play Games

Docker的使用初探(二):Docker與.NET Core的結合 [TOC] 在二者的結合上,微軟官方給予了很大的支持,從官方發佈的一些文章和VS 2017在建立.NET Core項目時自帶的Docker選項都可以看出來,這也與Core的跨平臺特性有很大的關係,而Docker正是可以選擇以Lin ...


目錄

Docker的使用初探(二):Docker與.NET Core的結合

在二者的結合上,微軟官方給予了很大的支持,從官方發佈的一些文章和VS 2017在建立.NET Core項目時自帶的Docker選項都可以看出來,這也與Core的跨平臺特性有很大的關係,而Docker正是可以選擇以Linux或Windows環境部署

添加Dockefile

上一篇文章介紹瞭如何拉取Core的官方鏡像,但是我們終究要將Docker應用到我們的開發環境中,如何將我們自己的項目生成為鏡像並部署到Docker上呢?第一步就添加Dockerfile這個文件,在VS2017中大致是三種方法,它們稍有區別,但最終也都是建立了一個Dockerfile文件

1. 在創建項目時添加

在新建Core項目時,勾選“啟用Docker支持”選項,新建的項目會自動添加dockerfile文件,文件的具體內容在下文進行分析

2. 手動添加

已經在使用的項目可以通過“右鍵-添加-Docker支持”,這樣也可以新建Dockerfile文件

3. 容器業務流程協調控製程序支持

這種方法相對於前兩種比較特殊,它不再是單單增加一個Dockerfile文件,而是如名稱一般是一整條生產鏈,用於配合持續集成工具的開發-調試-生成-發佈一條龍服務。添加的方式與第二種相同,右鍵項目添加就能看到這個拗口的名字

使用這種方式除了生成Dockerfile文件還會在解決方案中添加一個名為Docker Compose的業務流程協調程式,在新建時可以選擇,但是預設自帶的只有這個。裡面包含兩個文件,一個是 .dockerignore 這個和git類似,裡面記錄的文件不會被打包成鏡像發佈,另一個是 docker-compose.yml ,用於配置這個業務流程的信息,如鏡像名稱和Dockerfile文件的路徑等

Dockefile語法

大概是有以下這些,挑幾個用到的說一下

FROM
MAINTAINER
RUN
CMD
EXPOSE
ENV
ADD
COPY
ENTRYPOINT
VOLUME
USER
WORKDIR
ONBUILD
  • FROM

FROM <image>

說明使用的鏡像,如果本地沒有會自動拉取對應名稱的鏡像,沒有指定標簽的情況預設就是latest

FORM指令是Dockerfile文件的第一行,但可以不唯一,根據需要可以有多個

以預設的Core項目為例,這裡拉取的就是Core的官方鏡像,上篇文章也有用到,分別是運行時和SDK

  • WORKDIR

WORKDIR <工作目錄路徑>

顯而易見就是鏡像被安裝的路徑,如果路徑不存在,Docker會自動創建

  • COPY

COPY <源路徑> <目標路徑>

將文件和目錄複製到容器的文件系統。文件和目錄需位於相對於 Dockerfile 的路徑中。

  • RUN

RUN <Shell/exec>

在當前鏡像上要執行的命令,可以使用shell或者exec的格式

  • EXPOSE

EXPOSE <埠>

服務端容器對外映射的本地埠

  • ENTRYPOINT

使用格式 RUN 一樣,但是這個命令是在容器啟動後執行的命令,不會被 RUN 命令覆蓋,一個Dockerfile裡面只能有一個,如果有多個則只執行最後一條

其餘的指令還沒怎麼用到,用法還不太清楚

Docker項目調試

我們在前面提到了三種創建Dockerfile文件的方法,實際上是兩種情況,針對這兩種情況,打包鏡像的方法也不同

僅添加文件的方式

使用 docker build -t <name> <path> 指令。這種情況更加泛用,無論是不是用VS創建的都可以使用這種指令打包鏡像

進入Dockerfile文件所在的路徑後執行命令即可

為了演示,我先刪除的core的官方sdk,由於在Dockerfile裡面我們寫入了使用了 FROM 命令,所以執行命令後我們發現Docker自動下載了鏡像,並且打包了我們的項目,但是最後有一句 image operating system "windows" cannot be used on this platform ,因為我這邊Docker使用的是Linux模式,這裡我們構建的是Windows的容器鏡像,所以需要切換一下,系統右下角托盤圖標右鍵“switch to ...”,

為了體現Dockerfile指令的效果,我們刪除之前創建的鏡像再執行一次Build指令,這次Docker沒有下載Core的sdk,因為之前已經下載過了。不過我在這裡遇到了網路問題,發現之前的鏡像拉取也失敗了,所以換了一個鏡像加速地址,然後簡化了一下dockerfile文件,然後重覆上面的操作就行了

FROM microsoft/dotnet:2.1-aspnetcore-runtime
WORKDIR /app
COPY . .
EXPOSE 80
ENTRYPOINT ["dotnet", "CoreDockerDemo1.dll"]

可以看到dockerfile裡面的指令被依次執行,完成之後我們使用 docker image ls 就可以看到我們構建的鏡像了,之後用上面的方法可以創建Docker即可

容器業務流程協調控製程序支持

使用這種方式就不需要自己手動構建了,只要在VS里的調試按鈕點一下即可。由於我們前面添加過這套協調控製程序,所以現在這個項目里可以直接選擇docker進行調試

在這之前要對 docker-compose.yml 文件進行配置,基本上與dockerfile類似,而且更加直觀,對應輸入名稱等就好了

我在第一次生成時出現了“未啟用捲共用”的錯誤,這裡我們需要在Docker的設置中的Shared Drives標簽中把程式生成構建的磁碟選中,然後點擊“Apply”按鈕應用設置,然後docker會自動重啟

設置完成後再點擊VS中的運行,web應用就會自動編譯生成並創建鏡像和容器,然後啟動網站。第一次啟動時可能會詢問是否授權SSL證書,進行授權即可


基本上有了這些,就可以利用Docker給開發工作帶來一些便捷,如果後面還要繼續深入的話,就是將Docker與持續集成結合起來應用到網站伺服器環境上


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

-Advertisement-
Play Games
更多相關文章
  • 這篇筆記依然是在做《Python語言程式設計》第5章迴圈的習題。其中有兩類問題需要記錄下來。 第一是如何畫圍棋棋盤。圍棋棋盤共有19縱19橫。其中,位於(0,0)的星位叫天元,其餘8個星位坐標分別是:(-6,6),(0,6),(6,6),(-6,0),(6,0),(-6,-6),(0,-6),(6, ...
  • 稍微關心編程語言的使用趨勢的人都知道,最近幾年,國內最火的兩種語言非 Python 與 Go 莫屬,於是,隔三差五就會有人問:這兩種語言誰更厲害/好找工作/高工資…… 對於編程語言的爭論,就是猿界的生理周期,每個月都要鬧上一回。到了年末,各類榜單也是特別抓人眼球,鬧得更凶。 其實,它們各有對方所無法 ...
  • 一、SSM搭建 1、使用的工具: myeclipse+jdk8+maven+MySQL+Tomcat8.5 2、配製文件截: 二、配置文件 1、web.xml 1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app xmlns:xsi="http:// ...
  • 轉載自CSDN的文章 https://blog.csdn.net/gongpulin/article/details/80972806 國內的go get問題的解決 轉載自CSDN的文章 https://blog.csdn.net/gongpulin/article/details/80972806 ...
  • 本文介紹如何自定義迭代器,涉及到類的運算符重載,包括 的索引迭代,以及 、`__next__ __contains__`,如果不瞭解這些知識可跳過本文。 索引迭代方式 索引取值和分片取值 元組、列表、字典、集合、字元串都支持索引取值操作和分片操作。 分片操作實際上將一個slice對象當作索引位傳遞給 ...
  • 1 public static MvcHtmlString PageControl(this HtmlHelper html, PageData page) 2 { 3 if (page == null || page.totalpage == 0) 4 return MvcHtmlString.C... ...
  • class Program { static void Main(string[] args) { Console.WriteLine("please input a number:"); int n =int.Parse ( Console.ReadLine()); int [,] c=new i ...
  • Vue + WebApi 小項目:構造自己的線上 Markdown 筆記本應用 目錄 概要 知識點 完整示例圖 代碼與資源文件 流程步驟 概要 基於 MVP 最小可行性產品設計理念,我們先完成一個可以使用,並具備基本功能的 Markdown 筆記本應用,再進行逐步完善。 知識點 本文會指導初學者如何 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...