回到目錄

上一文章,主要介紹Dockerfile里各參數(shù)的含義,以及在項目文件里這些內(nèi)容的含義,因為大叔認為官方和網(wǎng)上其它文章說的有些模棱兩可,不太好讓大家理解,所有我又從新寫了一個大白話的文章,希望可以給大家一些幫助.<DotNetCore跨平臺~Dockerfile的解釋

本文章主要對一個windows下的dotnet new api生成的項目進行遷移,將它存儲為一個鏡像,然后運行這個鏡像,生成一個容器,容器對外開放5000端口,大家就可以通過5000來訪問它了,說起來很容易,做起來有些坑!

Docerfile和DotnetCore部署的過程

  1. 項目需要在windows里恢復,生成一下,dotnet restore和dotent publish

  2. 我們在docker里使用的是生成后的東西,比較如目錄是項目下的obj/docker/publish

  3. 你的Dockerfile與obj目錄是同一級的

  4. 使用docker build '加你的項目根目錄路徑"

  5. 使用docker run -it -p 5000:5000 imageId 運行起一個容器來,同時向外監(jiān)聽了5000端口

做起來

1 通過dotnet new生成一個項目,路徑:C:\Users\lind\hellomvc

Android培訓,安卓培訓,手機開發(fā)培訓,移動開發(fā)培訓,云培訓培訓

2 我們在docker里使用的是生成后的東西,比較如目錄是項目下的obj/docker/publish

Android培訓,安卓培訓,手機開發(fā)培訓,移動開發(fā)培訓,云培訓培訓

3 你的Dockerfile與obj目錄是同一級的

Android培訓,安卓培訓,手機開發(fā)培訓,移動開發(fā)培訓,云培訓培訓

Dockerfile的內(nèi)容如下

Android培訓,安卓培訓,手機開發(fā)培訓,移動開發(fā)培訓,云培訓培訓

#基于microsoft/dotnet 來構建我們的鏡像,它有800多兆,不是300多兆那個
FROM docker.io/microsoft/dotnet
MAINTAINER lind
#設置Docker容器對外暴露5000端口
EXPOSE 5000#輸入?yún)?shù)
ARG source 
#如果輸入?yún)?shù)source為空,就使用當前目錄下的bin/Release/PublishOutput作為發(fā)布目錄
COPY ${source:-obj/Docker/publish} ./hellomvc
#將容器當前目錄設為hellmvc
WORKDIR hellomvc
#在容器中運行dotnet這個命令
ENTRYPOINT ["dotnet","hellomvc.dll"]

Android培訓,安卓培訓,手機開發(fā)培訓,移動開發(fā)培訓,云培訓培訓

4 使用docker build '加你的項目根目錄路徑"

這個命令是在linux平臺執(zhí)行的,下面看一下我們項目的路徑,可以使用xft,xshell等工具,方式操作,使用xft把整個項目都復制到linux下的/root/project目錄

Android培訓,安卓培訓,手機開發(fā)培訓,移動開發(fā)培訓,云培訓培訓

在xshell中連接你的linux主機,輸入下面的命令,生成一個新的鏡像

Android培訓,安卓培訓,手機開發(fā)培訓,移動開發(fā)培訓,云培訓培訓

如果希望為source輸入?yún)?shù)指定新的值,可以使用下面語句

#docker build "/root/project/coreMvc/" --build-arg source="/root/project/coreMvc/bin/Release/PublishOutput"

如果上面出現(xiàn)目錄未找到的問題,請像發(fā)布目錄設備為:obj\Docker\publish

5 使用docker run -it -p 5000:5000 imageId 運行起一個容器來,同時向外監(jiān)聽了5000端口

鏡像生成后,我們使用docker run 去啟動一個容器!

Android培訓,安卓培訓,手機開發(fā)培訓,移動開發(fā)培訓,云培訓培訓

啟動后,它將監(jiān)聽5000這個端口,IP地址就是linux主機的,我們在外面可以通過linux ip:5000來訪問它

Android培訓,安卓培訓,手機開發(fā)培訓,移動開發(fā)培訓,云培訓培訓

Android培訓,安卓培訓,手機開發(fā)培訓,移動開發(fā)培訓,云培訓培訓

如果你希望對外暴露8000端口,可以這樣寫docker run -it -p 8000:5000 7c8d43fe67f9,這樣,相同的網(wǎng)站被你在兩個容器中共同執(zhí)行了,或者說一個網(wǎng)站多了一個"負載"的支持,看到這里你是否想起什么了,對就是負載均衡,你的環(huán)境部署更簡單了,一個項目可以在很短的時間被部署起來,再配上反射代理(nginx,lvs),一個網(wǎng)站負載就搭好了!

這個命令可以為你的鏡像重命名

docker tag 7c8d43fe67f9 helloapi:1.0

當然,如果你的阿里云有自己的鏡像,也可以把這個鏡像改名成阿里云的獎項,然后把這個本地的鏡像push到云上,方便在其它服務器上使用它

Android培訓,安卓培訓,手機開發(fā)培訓,移動開發(fā)培訓,云培訓培訓

希望這篇文章可以幫助剛開始學docker的學生們,大家有問題可以直接與我聯(lián)系!

docker是一種新的技術,它在未來將會再火一把!

一個鏡像,到處執(zhí)行!

http://www.cnblogs.com/lori/p/7169816.html