DotNet跨平臺 - docker部署.net core2.0項目

 

參考文檔:html

https://docs.docker.com/install/linux/docker-ce/centos/linux

http://www.dockerinfo.net/documentnginx

https://dotnet.microsoft.com/download/linux-package-manager/centos/sdk-currentgit

http://www.javashuo.com/article/p-hpjsqqtr-ev.htmlgithub

http://www.javashuo.com/article/p-kkjokozm-cm.htmlweb

http://www.javashuo.com/article/p-bcicqkzx-bx.htmldocker

環境

服務器系統:CentOS Linux release 7.2.1511windows

相關工具:VS2017  xftp  puttycentos

服務器軟件:.net core 2.0,docker 18.09.6,瀏覽器

 前言

以前寫過一篇文章,《.net core項目部署到centos7》,最近看到不少關於docker的文章,感受這種方式確實好,因此本身也按着別人的文章實現了一把,確實很方便。先來看一張圖片,下面這條大鯨魚,很形象的描述了Docker的功能,上面的箱子就是一個一個獨立的容器。

這裏先引用官方文檔對Docker進行一下介紹:

Docker 是一個開源項目,誕生於 2013 年初,最初是 dotCloud 公司內部的一個業餘項目。它基於 Google 公司推出的 Go 語言實現。 項目後來加入了 Linux 基金會,聽從了 Apache 2.0 協議,項目代碼在 GitHub 上進行維護。

Docker 自開源後受到普遍的關注和討論,以致於 dotCloud 公司後來都更名爲 Docker Inc。Redhat 已經在其 RHEL6.5 中集中支持 Docker;Google 也在其 PaaS 產品中普遍應用。

Docker 項目的目標是實現輕量級的操做系統虛擬化解決方案。 Docker 的基礎是 Linux 容器(LXC)等技術。

在 LXC 的基礎上 Docker 進行了進一步的封裝,讓用戶不須要去關心容器的管理,使得操做更爲簡便。用戶操做 Docker 的容器就像操做一個快速輕量級的虛擬機同樣簡單。

下面的圖片比較了 Docker 和傳統虛擬化方式的不一樣之處,可見容器是在操做系統層面上實現虛擬化,直接複用本地主機的操做系統,而傳統方式則是在硬件層面實現。

             

爲何要使用Docker

容器除了運行其中應用外,基本不消耗額外的系統資源,使得應用的性能很高,同時系統的開銷儘可能小。傳統虛擬機方式運行 10 個不一樣的應用就要起 10 個虛擬機,而Docker 只須要啓動 10 個隔離的應用便可。

具體說來,Docker 在以下幾個方面具備較大的優點。

一、更快速的交付和部署

對開發和運維(devop)人員來講,最但願的就是一次建立或配置,能夠在任意地方正常運行。

開發者可使用一個標準的鏡像來構建一套開發容器,開發完成以後,運維人員能夠直接使用這個容器來部署代碼。 Docker 能夠快速建立容器,快速迭代應用程序,並讓整個過程全程可見,使團隊中的其餘成員更容易理解應用程序是如何建立和工做的。 Docker 容器很輕很快!容器的啓動時間是秒級的,大量地節約開發、測試、部署的時間。

二、更高效的虛擬化

Docker 容器的運行不須要額外的 hypervisor 支持,它是內核級的虛擬化,所以能夠實現更高的性能和效率。

三、更輕鬆的遷移和擴展

Docker 容器幾乎能夠在任意的平臺上運行,包括物理機、虛擬機、公有云、私有云、我的電腦、服務器等。 這種兼容性可讓用戶把一個應用程序從一個平臺直接遷移到另一個。

四、更簡單的管理

使用 Docker,只須要小小的修改,就能夠替代以往大量的更新工做。全部的修改都以增量的方式被分發和更新,從而實現自動化而且高效的管理。

 

1、服務器安裝dotnet-sdk

若是CentOS服務器沒有安裝netcore,須要先用下圖的命令安裝一下,我選擇的是dotnet-sdk-2.0.0,你們也能夠根據本身的程序來選擇安裝,

安裝dotnet-sdk的參考文檔:https://dotnet.microsoft.com/download/linux-package-manager/centos/sdk-current 

sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm  #在安裝.NET以前,您須要註冊Microsoft密鑰,註冊產品存儲庫並安裝所需的依賴項。每臺機器只須要安裝一次。
sudo yum update 
sudo yum install dotnet-sdk-2.0.0

 

2、Docker 安裝

在2017年的3月1號以後,Docker的版本命名開始發生變化,同時將CE版本和EE版本進行分開,這裏咱們選擇安裝免費的CE社區版,

具體區別能夠參考:https://docs.docker.com/install/linux/docker-ce/centos/

$ sudo yum install docker-ce docker-ce-cli containerd.io //安裝命令
$ sudo docker --version //查看版本
$ sudo systemctl start docker.service //啓動docker
$ sudo systemctl enable docker.service //設置開機啓動

  

經過docker --version命令,能夠看到版本號爲18.09.6,用命令 systemctl start docker.service 啓動docker後,咱們能夠測試下docker是否安裝成功,執行docker run hello-world命令,會看見提示

Unable to find image 'hello-world:latest' locally,意思是說在本地倉庫沒有找到鏡像'hello-world',以後會從官方倉庫中拉取了該鏡像,而後執行。看到下圖的內容,就表示docker安裝成功並運行了。

 

 3、建立.NetCore項目

3.1 建立演示項目

這個沒什麼好說的,咱們用vs2017建立一個演示用的mvc項目。program.cs文件作以下修改

3.2爲項目編寫Dockerfile文件

有兩種方法,一種是右鍵點擊項目:添加-->Docker支持,建立Dockerfile文件;

           

每二種是直接在項目根目錄下手動建立該文件,Dockerfile文件的內容大體以下:

# 添加基礎鏡像:docker會從網絡下載這個鏡像
FROM microsoft/dotnet:2-aspnetcore-runtime
#容器中系統的工做空間
WORKDIR /app
#拷貝當前文件夾下的文件到容器中系統的工做空間(注意:「.」後面有空格)
COPY . /app
 
#設置Docker容器對外暴露的端口
EXPOSE 8080
#容器中使用 ["dotnet","系統啓動的dll"] 來運行應用程序
#使用ENTRYPOINT ["dotnet","系統啓動的dll"]
#或使用 CMD ["dotnet","系統啓動的dll"]
ENTRYPOINT ["dotnet", "WebTest.dll"]

3.3 構建鏡像

下面到了關鍵的一步了,構建項目鏡像,咱們將上面建立的mvc項目進行發佈,而後將發佈後的文件上傳至CentOS服務器,而後定位到站點文件夾,執行下面的命令:

sudo docker build -t webtest:1.0 .

webtest是咱們建立的鏡像名字,冒號後面的1.0能夠理解爲版本號,再後面是一個空格再加一個點,這個點表示當前路徑!!

 看到Successfully,表示鏡像構建成功。

 能夠輸入命令docker images查看倉庫中的鏡像。

sudo docker images    //查看全部鏡像
sudo docker ps           //查看運行中的容器
sudo docker ps -a       //查看全部容器

sudo docker rm  容器id    //刪除容器
sudo docker rmi  鏡像id    //刪除鏡像

sudo docker pull microsoft/aspnetcore:2  //拉取指定版本的core

3.4 運行鏡像

如今就差最後一步運行了,咱們用下面的命令運行剛剛建立的webtest鏡像,

這裏經過 -p 參數映射容器的8080到宿主機的8080端口:8080:8080(宿主:容器)

-d 參數告訴docker之後臺任務形式運行鏡像

sudo docker run -d -p 8080:8080  webtest:1.0 

輸入命令docker ps查看運行中的容器,注意Status列,Up表示咱們剛剛建立的容器正在運行

4、測試站點運行狀況

在咱們的windows中,瀏覽器輸入服務器IP+端口號,能夠看到站點已經跑起來了

 

 OK,任務完成。

 

 5、擴展docker相關知識

Docker的卸載,不打字了,直接截圖了:

配置鏡像加速

//由於默認的鏡像倉庫遠在國外,拉取一個小的鏡像時間還能夠忍受,若拉取一個上G的鏡像就有點太折磨人了,咱們使用DaoCloud鏡像加速器來進行鏡像加速。Linux上配置方法以下:

$ curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io $ sudo systemctl restart docker

  若是服務器重啓reboot,你會發現站點隨即掛掉了,由於容器也自動退出,若是想讓服務器重啓後容器內的鏡像自動啓動,能夠在運行docker容器時,加上下面的命令:

       docker run --restart=always -d -p 8080:8080 webtest:1.0

 

docker經常使用命令

docker pull 鏡像名稱 //拉取鏡像

docker rm -f 容器id //強制刪除容器

docker rmi imageid //刪除鏡像

docker logs -f 容器ID //查看容器日誌

docker stop $CONTAINER_ID /docker ps -a //查看全部的容器
docker attach 容器id //進入到容器,通常經常使用下面的命令進入到容器內部

docker exec -it 容器id /bin/bash
docker build -t s2appadmin . //使用Dockerfile文件編譯Docker dotnet publish //發佈dotnetcore應用 dotnet run //啓動dotnetcore應用 dotnet *.dll //在發佈後的目錄中執行dotnet 程序集的dll文件名,啓動應用 nginx -v //查看nginx版本 nginx -s reload //從新加載nginx nginx -s stop //中止nginx
相關文章
相關標籤/搜索