Docker容器中開始.Net Core之路

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

      騰訊雲開發者實驗鏈接地址html

 

1、環境介紹

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

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

  dotnet鏡像(也能夠是aspnetcore鏡像這二者的關係我將稍後解釋).git

  OK,開始動手!web

 

2、啓動實驗,安裝Docker

  

  我進入的搭建Docker環境,固然也能夠從其餘實驗中開始着手。從搭建Docker環境中進入咱們能夠看到要求的步驟,方便咱們快速安裝,僅此而已。 docker

  一、先來安裝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服務進行啓動mvc

  

  到這裏Docker環境的安裝就已經結束了。固然咱們還須要配置Docker,開始配置DockerHub:app

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

 

3、安裝.Net Core環境asp.net

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

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

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

  

  這種方式提供給了咱們.net core的整套模板,編譯工具,RunTime等等,包羅萬象。咱們能夠經過docker命令查看咱們已經擁有的鏡像,注意 這須要在Linux主機下查看,別跑到容器中去了

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

  

  當前命令下咱們能夠看到dotnet鏡像已經被咱們拉取下來了。繼續,咱們開始新建並運行一個以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 //啓動項目

  

  大功告成,項目啓動,能夠經過同時按住Ctrl+q+p退出容器,該命令保持容器中網站運行,而後使用curl -k http://localhost:5000訪問網站

  查看當前主機上已有的容器實例

  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能夠看做是集大成者,包含了.net core控制檯aspnetcore的全部,而aspnetcore是以dotnet鏡像爲基礎,在aspnetcore中只包含了RunTime和構建當前項目爲鏡像的工具,這也就意味着若是咱們要直接使用aspnetcore爲鏡像,咱們的項目是要已經編譯好了的,才能夠直接使用這個鏡像。而當你使用dotnet鏡像時,包含了編譯工具,Runtime,一切的一切,這也就是dotnet鏡像比aspnetcore鏡像大這麼多的緣由了。

  

  能夠利用方式一最後在Linux下編譯好的項目,一樣用共享目錄的方式共享到有aspnetcore鏡像的Docker容器中,這樣咱們就能夠直接跑起來了。因爲時間關係沒有嘗試,下次會嘗試一下。這樣作的好處是在開發環境中編譯好的項目咱們能夠直接拿來用,Docker容器中只須要運行時環境就能夠了。

 

4、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,望技術有成後能回來看見本身的腳步
相關文章
相關標籤/搜索