Docker容器中開始.NETCore之路

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


二、環境介紹

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

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

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

  OK,開始動手!

?

三、啟動實驗,安裝Docker

  640?wx_fmt=png&wxfrom=5&wx_lazy=1

  我進入的搭建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服務
  0?wx_fmt=png

  0?wx_fmt=png

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

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

  0?wx_fmt=png

  到這里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鏡像

  0?wx_fmt=png

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

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

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

  0?wx_fmt=png

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


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

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

   0?wx_fmt=png

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

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

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

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

  0?wx_fmt=png

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

   0?wx_fmt=png

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

  dotnet run //啟動項目
  0?wx_fmt=png

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

?

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

  docker ps -a // 查看當前的已存在的容器實例 (不考慮狀態)
 在這里我們開始要考慮長遠計劃了,假如我需要將新的文件加入進來,我可以采取什么方式,在容器中安裝一個git,pull新文件,或許可以,但是如果說這臺主機上有十個容器,都運行著服務,莫非我還得十個容器全部安裝git,基于這個考慮,可以嘗試用下這種操作了。

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

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


sudo rpm --import https://www.tygj178.com packages.microsoft.com/keys/microsoft.asc

  sudo sh -c 'echo -e "[packages-microsoft-com-prod]

  name=packages-microsoft-com-prod

  baseurl= https://www.xucaizxyl.com 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'

 0?wx_fmt=png

  接下來開始安裝.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
  0?wx_fmt=png

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

  0?wx_fmt=png

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

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

  0?wx_fmt=png

?

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

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

  0?wx_fmt=png

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

  0?wx_fmt=png

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

  docker run -it microsoft/aspnetcore //運行一個以aspnetcore為鏡像的容器
  同樣新建一個應用,但是會發現這個應用不能成功,提示我們沒有SDK

  dotnet new mvc -n HelloDocker.Web /www.douniu828.com/創建項目名為HelloDocker.Web的ASP.NET Core MVC項目
  0?wx_fmt=png

  

  在這里我要解釋下dotnet鏡像和aspnetcore鏡像是什么關系:

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

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

  0?wx_fmt=png

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

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

?

五、DockerFile文件的作用

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

  一般是在項目中建好一個www.huayyule.com dockerfile文件,然后在其中寫上我們的要求

FROM microsoft/dotnet:latest

  WORKDIR www.thd580.com /app

  COPY . /app

  RUN dotnet restore

  EXPOSE 5000

  ENV ASPNETCORE_URLS http://*:5000

  ENTRYPOINT ["dotnet",www.thd729.com"run"]

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

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

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

相關文章

來騰訊云開發者實驗室 學習.NET Core 2.0

.NET Core容器化@Docker

.NET Core容器化之多容器應用部署@Docker-Compose

原文地址:https://www.cnblogs.com/CKExp/p/8159269.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/278341.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/278341.shtml
英文地址,請注明出處:http://en.pswp.cn/news/278341.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

分布式的數據一致性

一.前序 數據的一致性和系統的性能是每個分布式系統都需要考慮和權衡的問題。一致性的級別如下:1.強一致性這種一致性級別是最符合用戶直覺的,它要求系統寫入什么,讀出來的也會是什么,用戶體驗好,但實現起來往往對系統…

kompozer如何啟動_使用KompoZer創建網站

kompozer如何啟動Are you looking for a way to easily start creating your own webpages? KompoZer is a nice basic website editor that will allow you to quickly get started and become familiar with the process. 您是否正在尋找一種輕松創建自己的網頁的方法&#…

我也說說宏定義likely()和unlikely()

作者:gfree.windgmail.com 博客:blog.focus-linux.net linuxfocus.blog.chinaunix.net 本文的copyleft歸gfree.windgmail.com所有,使用GPL發布,可以自由拷貝,轉載。但轉載請保持文檔的完整性,注明原作者及…

圖片懶加載與預加載

預加載 常用的是new Image();,設置其src來實現預載,再使用onload方法回調預載完成事件。function loadImage(url, callback) {var img new Image(); //創建一個Image對象,實現圖片的預下載img.src url;if (img.complete){ // 如果圖片已經存…

電腦pin重置_如果忘記了如何重置Windows PIN

電腦pin重置A good password or PIN is difficult to crack but can be difficult to remember. If you forgot or lost your Windows login PIN, you won’t be able to retrieve it, but you can change it. Here’s how. 好的密碼或PIN很難破解,但很難記住。 如果…

android.support不統一的問題

今天supprt28遇到的問題,由于28還是預覽版,還存在一些bug 都是因為如果程序內出現不同的,support或者其他外部引用庫的多個版本,Gradle在進行合并的時候會使用本地持有的,最高版本的來進行編譯,所以25的sup…

輕松查看Internet Explorer緩存文件

Sometimes you may need a quick and easy way to access Internet Explorer’s cache. Today we take a look at IECacheView which is a great application to get the job done. 有時,您可能需要一種快速簡便的方法來訪問Internet Explorer的緩存。 今天&#xf…

洛谷P1019 單詞接龍

題目描述 單詞接龍是一個與我們經常玩的成語接龍相類似的游戲,現在我們已知一組單詞,且給定一個開頭的字母,要求出以這個字母開頭的最長的“龍”(每個單詞都最多在“龍”中出現兩次),在兩個單詞相連時&…

【Java】接口(interface)VS抽象類

接口(interface)可以說成是抽象類的一種特例,接口中的所有方法都必須是抽象的。接口中的方法定義默認為public abstract類型,接口中的成員變量類型默認為public static final。另外,接口和抽象類在方法上有區別&#x…

latex插入gif_如何將照片和GIF插入Google幻燈片

latex插入gifUsing text (and only text) in your Google Slides presentation is a great way to lose the attention of your audience. Inserting photos and animated GIFs can immediately spice things up by emphasizing the important points you make. 在Google幻燈片…

子矩陣

題目描述 給出如下定義: 子矩陣:從一個矩陣當中選取某些行和某些列交叉位置所組成的新矩陣(保持行與列的相對順序)被稱為原矩陣的一個子矩陣。例如,下面左圖中選取第2、4行和第2、4、5列交叉位置的元素得到一個2*3的子…

springboot入門(一)--快速搭建一個springboot框架

原文出處 前言在開始之前先簡單介紹一下springboot,springboot作為一個微框架,它本身并不提供Spring框架的核心特性以及擴展功能,只是用于快速、敏捷地開發新一代基于Spring框架的應用程序,總的來說springboot不是為了要替代Sprin…

q-dir 打不開文件_Q-Dir –多窗格文件管理器

q-dir 打不開文件Sometimes when looking through a file manager, it would be nice to have more than a dual-pane view. Now you can manage your files with up to four viewing panes at once with Q-Dir. 有時,在查看文件管理器時,擁有多個雙窗格…

用面向對象的方法寫敲門磚

一道名為"敲門磚"的面試題: 用面向對象的方法寫,點擊列表內,子元素的子標簽, 來刪除子元素 敲門磚考點: 遞歸(刪除標簽, 需要找到列表的直屬子標簽, 需要通過遞歸層層往上找, parentNode)冒泡(只需為頂級父元素addEventListener綁定事件, 并通過e.target區分子標簽, …

windows10加載動畫_如何關閉動畫并使Windows 10看起來更快

windows10加載動畫Windows 10 fades and window animations are pure eye candy, but waiting for them to load can make your PC seem a bit slow. If you’d like an instant response, you can disable Windows 10’s animations for a snappier desktop experience. Windo…

JData大數據競賽18年賽題-如期而至-用戶購買時間預測

年前做的,也是學習別人的作品作為記錄 一、賽題 表1:sku基本信息表(jdata_sku_basic_info) 表2:用戶基本信息表(jdata_user_basic_info) 表3:用戶行為表(jdata_user_acti…

LNMP架構(二)

2019獨角獸企業重金招聘Python工程師標準>>> 一 Nginx安裝 1、切換目錄 # cd /usr/local/src 2、下載 # wget http://nginx.org/download/nginx-1.12.1.tar.gz 3、解壓 # tar xzvf nginx-1.12.1.tar.gz 4、切換到nginx目錄下 # cd nginx-1.12.1/ 5、編譯 # ./confi…

edge無法上網dns_如何在Microsoft Edge中通過HTTPS啟用DNS

edge無法上網dnsMicrosoft will one day enable DNS over HTTPS (DoH) for all Windows applications, but you can enable it in the new version of Microsoft Edge today with a hidden flag. DoH will improve your security and privacy online, but it isn’t yet enable…

UIButton小結

前言 本來沒有打算寫這篇文章的, 主要是因為在工作中遇到一些同事再用 有UIButton的時候, 有些很基本的,系統API提供的都不知道, 例如 如何讓UIButton的文字居上,居左, 居右, 居下對其等一些基本點, 為此我特地寫了一下UIButton小結 UIButton回顧 繼承關系 NSObject -> UIRe…

Channel Allocation HDU1373

染色問題&#xff1a;相鄰不能染同一種顏色 最少需要的顏色的數量最大團點的數量 #include<bits/stdc.h> using namespace std;#define N 27int n; int mp[N][N]; int ans; int alt[N][N]; int Max[N];bool dfs(int cur,int tot)//cur是s1集合的個數 {if(0cur){if(tot>…