Docker容器中開始.NETCore之路

来源:https://www.cnblogs.com/CKExp/archive/2018/01/01/8159269.html
-Advertisement-
Play Games

一、引言 開始寫這篇博客前,已經嘗試練習過好多次Docker環境安裝,.Net Core環境安裝了,在這裡替騰訊雲做一個推廣,假如我們想學習、練手.net core 或是Docker卻苦於沒有開發環境,伺服器也不想買,那麼我們可以使用騰訊雲提供的開發者實驗,每個實驗項目每天可以免費使用一次,時常45 ...


一、引言

  開始寫這篇博客前,已經嘗試練習過好多次Docker環境安裝,.Net Core環境安裝了,在這裡替騰訊雲做一個推廣,假如我們想學習、練手.net core 或是Docker卻苦於沒有開發環境,伺服器也不想買,那麼我們可以使用騰訊雲提供的開發者實驗,每個實驗項目每天可以免費使用一次,時常45分鐘,學習技術單靠看幾篇文章、幾本書是完全不夠的,”實踐方能出真知“。

騰訊雲開發者實驗連接地址

 

二、環境介紹

  在練習平臺上的環境是CentOS7.3版 或許你會說我不懂Linux怎麼辦,沒關係,我也是小白,學點基本命令暫時能用起來就行了。畢竟我們不是專門在Linux下搞開發的。(Linux下專業人士見諒哈)。

  Docker容器,如果說Docker容器還不知道什麼概念的話,我推薦先暫停,先學習下Docker的基本概念,弄清楚Docker是什麼,總比越看越糊塗好.

  dotnet鏡像(也可以是aspnetcore鏡像這兩者的關係我將稍後解釋).

  OK,開始動手!

 

三、啟動實驗,安裝Docker

  

  我進入的搭建Docker環境,當然也可以從其他實驗中開始著手。從搭建Docker環境中進入我們可以看到要求的步驟,方便我們快速安裝,僅此而已。 

  1、先來安裝Docker環境

  yum install docker-io -y //CentOS已經將Docker軟體包放在了Extras軟體源中,直接利用即可
  docker -v //查看docker的版本 version
  systemctl start docker.service //開啟Docker服務
  systemctl enable docker.service //開機啟動Docker服務

  

  

  安裝Docker環境時需要等待一到兩分鐘........安裝完畢!

  接下來我們需要將Docker服務進行啟動

  

  到這裡Docker環境的安裝就已經結束了。

 

   當然我們還需要配置Docker,開始配置DockerHub:

  echo "OPTIONS='--registry-mirror=https://mirror.ccs.tencentyun.com'" >> /etc/sysconfig/docker
  systemctl daemon-reload //重新載入 systemd,掃描新的或有變動的單元
  systemctl restart docker.service //重啟docker服務

 

 

四、安裝.NETCore環境

  接下來我們將有兩種方式來安裝我們的.net core環境

  方式一:在Docker容器中獲取dotnet鏡像

  docker pull microsoft/dotnet //安裝.net core鏡像

 

  

   這種方式提供給了我們.net core的整套模板,編譯工具,RunTime等等,一應俱全。

  我們可以通過docker命令查看我們已經擁有的鏡像,註意 這需要在Linux主機下查看,別跑到容器中去了

  docker images // 查看當前已有的docker鏡像文件

 

  

   當前命令下我們可以看到dotnet鏡像已經被我們拉取下來了。OK

  繼續,我們開始新建並運行一個以dotnet鏡像的容器

  docker run -it microsoft/dotnet //啟動一個dotnet鏡像

 

   

  看到root後面變化了沒,這說明我們已經進入了一個容器,Docker當新建一個容器後,會給這個容器分配一個id,也就是我們所看見的那串字元串了。

   繼續,通過命令新建一個web應用

  dotnet new mvc -n MyFirstDocker.Web //創建項目名為MyFirstDocker.Web的ASP.NET Core MVC項目

  

  我們可以通過ls命令看到當前容器中的所有文件夾信息,MyFirstDocker.Web項目已經創建好了

  

  在MyFirstDocker文件夾內,有很多我們熟悉的東西

   

  接下來,通過命令啟動項目

  dotnet run //啟動項目

  

   OK,大功告成,項目啟動,由於實驗環境沒得瀏覽器,我們只能看看 哈哈 貌似是有一種方式可以看到頁面 但我還沒學會 見諒哈

 

   通過命令exit退出當前容器,查看當前主機上已有的容器實例

  docker ps -a // 查看當前的已存在的容器實例 (不考慮狀態)

 

 

  在這裡我們開始要考慮長遠計划了,假如我需要將新的文件加入進來,我可以採取什麼方式,在容器中安裝一個git,pull新文件,或許可以,但是如果說這台主機上有十個容器,都運行著服務,莫非我還得十個容器全部安裝git,基於這個考慮,可以嘗試用下這種操作了。

  我在Linux主機中安裝.NET Core SDK

  首先開始配置安裝包的來源

  sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
  sudo sh -c 'echo -e "[packages-microsoft-com-prod]
  name=packages-microsoft-com-prod 
  baseurl= https://packages.microsoft.com/yumrepos/microsoft-rhel7.3-prod
  enabled=1
  gpgcheck=1
  gpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/dotnetdev.repo'

  

  接下來開始安裝.net-sdk,版本2.0.3,這個過程耗時比較長,需要耐心等待

  sudo yum update
  sudo yum -y install libunwind libicu
  sudo yum install dotnet-sdk-2.1.3

   好了,開始接下來的操作了

  cd /home 
  mkdir aspnetcoreapp
  cd aspnetcoreapp
  dotnet new web
  dotnet restore
  dotnet run

   

  通過直接啟動,也是可以直接運行起來的,但是肯定是不推薦的啦,畢竟Docker這麼好用  哈哈

  

  接下來讓Linux主機上的文件可以共用文件到Docker容器中,這樣一來我們可以直接在Docker中使用Linux主機文件,然後運行起來,當有文件改動,只需要更新Linux主機上的文件即可。這裡會遇到一個問題,就是明明已經用了共用目錄的命令,但是Docker容器中並沒有那些文件,這是由於selinux的原因,我的解決方案就是在 -v加上一個--privileged=true,當然這個方案也是靠度娘得知的。

  當前Docker容器中已經有了共用目錄下的文件,可能會需要dotnet restore然後可以用dotnet run進行啟動

   

 

  方式二:在Docker容器中獲取aspnetcore鏡像

  docker pull microsoft/aspnetcore //安裝asp.net core鏡像

 

  

  查看當前已經有的鏡像,成功安裝了aspnetcore鏡像

  

  同樣和前面的操作一樣,我們根據該鏡像新建一個容器

  docker run -it microsoft/aspnetcore //運行一個以aspnetcore為鏡像的容器 

  同樣新建一個應用,但是會發現這個應用不能成功,提示我們沒有SDK

  dotnet new mvc -n HelloDocker.Web //創建項目名為HelloDocker.Web的ASP.NET Core MVC項目

  

   

  在這裡我要解釋下dotnet鏡像aspnetcore鏡像什麼關係:

   在dockerhub官網中有著dotnet和aspnetcore的鏡像,dotnet可以看作是集大成者,包含了.netcore控制台aspnetcore的所有,而aspnetcore是以dotnet鏡像為基礎,在aspnetcore中只包含了RunTime和構建當前項目為鏡像的工具,這也就意味著如果我們要直接使用aspnetcore為鏡像,我們的項目是要已經編譯好了的,才可以直接使用這個鏡像。

  而當你使用dotnet鏡像時,包含了編譯工具,Runtime,一切的一切,這也激素dotnet鏡像比aspnetcore鏡像大這麼多的原因了。

  

   可以利用方式一最後在Linux下編譯好的項目,同樣用共用目錄的方式共用到有aspnetcore鏡像的Docker容器中,這樣我們就可以直接跑起來了。由於時間關係沒有嘗試,下次會嘗試一下。

  這樣做的好處是在開發環境中編譯好的項目我們可以直接拿來用,Docker容器中只需要運行時環境就可以了。

 

 

 五、DockerFile文件的作用

  dockerFile可是好東西,好比如說拿著武功秘籍,一招一式照著做。

  一般是在項目中建好一個dockerfile文件,然後在其中寫上我們的要求

  FROM microsoft/dotnet:latest
  WORKDIR /app
  COPY .
/app   RUN dotnet restore   EXPOSE 5000   ENV ASPNETCORE_URLS http://*:5000   ENTRYPOINT ["dotnet","run"]

 

   通過命令將dockerfile文件運行,將整個項目打包成鏡像,我們可以使用docker images可以看到這個生成的新鏡像

  docker build -t mydockerimage .

 

   如果我們需要使用這個鏡像,我們可以直接在創建容器時指定這個鏡像,生成之後的環境和你打包的鏡像是一樣的

   最後感謝博友的文章參考,半隻不解的時候正好看到這篇文章,很順利的解決了一個問題。

  @聖傑 http://www.cnblogs.com/sheng-jie/p/8107877.html

 

  新年之際,在此祝願大家  新年吉祥 大吉大利。

 

2018-1-1,望技術有成後能回來看見自己的腳步

 


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

-Advertisement-
Play Games
更多相關文章
  • 再有兩天就進入2018了,想想還是要準備一下明年的工作方向。回想當初開始學習函數式編程時的主要目的是想設計一套標準API給那些習慣了OOP方式開發商業應用軟體的程式員們,使他們能用一種接近傳統資料庫軟體編程的方式來實現多線程,並行運算,分散式的數據處理應用程式,前提是這種編程方式不需要對函數式編程語 ...
  • 一、Spring簡介 Spring MVC是當前最優秀的 MVC 框架,自從Spring 2.5 版本發佈後,由於支持註解配置,易用性有了大幅度的提高。Spring 3.0 更加完善,實現了對 Struts 2 的超越。現在越來越多的開發團隊選擇了Spring MVC。 1)Spring3 MVC使 ...
  • 除之前的Spring相關包,還有structs2包外,還需要Hibernate的相關包 首先,Spring整合其他持久化層框架的JAR包 spring-orm-4.2.4.RELEASE.jar (整合Hibernate的) 這個JAR包在Spring框架中包含 Hibernate 需要的JAR包 ...
  • 為什麼需要泛型? 試想你需要一個簡單的容器類,或者說句柄類,比如要存放一個蘋果的籃子,那你可以這樣簡單的實現: 這樣一個簡單的籃子就實現了,但問題是它只能存放蘋果,之後又出現了另外的一大堆水果類,那你就不得不為這些水果類分別實現容器: 然後你發現你其實在做大量的重覆勞動。所以你幻想你的語言編譯器要是 ...
  • 1 兩種文本編輯器:Sublime Text 、 Notepad++ 執行python文件,在命令行中,切換到該Python文件所在的目錄下,然後輸入 Python ###.py命令就可以了。 2 Python的交互模式和直接運行.py文件有什麼區別呢? 直接輸入python進入交互模式,相當於啟動 ...
  • 本文主要介紹Spring中, 1 Spring JDBC 2 使用註解方式管理事務的傳播行為 3 採用XML 方式配置事務 4 SH 整合 5 SSH 整合 一、Spring JDBC 1) 導包 , 使用myeclipse2014, 添加與持久化相關的包 2) 引入名稱空間等 3) 配置數據源 4 ...
  • 描述 本片文章內容屬於ASP.NET MVC系列視圖篇,主要講解View,大致內容如下: 1.Views文件夾講解 2.View種類 3.Razor語法 4.對視圖的基本操作 一 Views文件夾 (一) Views文件夾下常用文件種類 分析: 1.ASP.NET MVC頁面基本被放在Views文件 ...
  • 前言 學習這件事情是一個習慣,不能停。。。另外這篇已經看過兩個月過去,但覺得有些事情不總結跟沒做沒啥區別,遂記下此文 1.CLR線程池基礎 2.ThreadPool的簡單使用練習 3.執行上下文 4.協作式取消和超時,System.Threading.CancellationTokenSource的 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...