使用Docker運行.net core程序

自從.net core支持linux後,.net core程序也可以從linux的docker生態中受益了。在docker中運行.net core程序還是非常簡單的,微軟已經爲我們製作好了.net core runtime的基礎鏡像包,只需要將我們的程序拷貝到基礎鏡像即可,下面我們就以一個簡單的示例來介紹下這一過程,

下圖就是一個已經編譯好的控制檯程序,入口是app.dll。

    

 

編寫Dockerfile

有了程序後,我們還編寫相應的dockerfile來製作Docker鏡像

FROM mcr.microsoft.com/dotnet/aspnet:6.0
COPY app /app
WORKDIR /app
ENTRYPOINT ["dotnet","app.dll"]

  程序非常簡單,只有四行

  1. FROM指令指定了基礎鏡像,這裏使用的是.net 6的runtime鏡像mcr.microsoft.com/dotnet/aspnet:6.0,也可以使用更小的鏡像
  2. 通過COPY將程序集導入到基礎鏡像中
  3. WORKDIR指令指定了工作路徑
  4. ENTRYPOINT指令指定了應用程序入口

 

Build鏡像

編寫好dockerfile後,就可以直接build了,指令如下(注意不要漏了結尾的.)

    docker build -t tianfang:console .

這裏通過參數-t指定了容器的名稱:tianfang:console

 

運行容器

使用docker run命令運行鏡像,即可看到程序輸出

dev@dev:~/docker$ docker run tianfang:console

Hello, World! 

 

Web程序示例

有了上面的基礎後,再來一個web程序的導報示例,Dockerfile如下:

FROM mcr.microsoft.com/dotnet/aspnet:6.0 
ENV ASPNETCORE_URLS http://+:80
COPY app /app
WORKDIR /app
ENTRYPOINT ["dotnet","app.dll"]

和前面的示例相比多了一個ENV指令指定web程序的url,如果程序中顯示指定了url,這個也不是必要的,此時就和控制檯程序的dockerfile是一樣了,

運行時稍微有點差異, 需要增加 -p 指令開放web服務端口,這個也是docker的常規操作了。

dev@dev:~/docker$ docker run -p 1080:80 tianfang:web

基本上和控制檯程序差不多,非常簡單。

 

其它

如果我們修改dockerfile進行多次構建時,可以通過docker image ls指令看到會產生一些廢棄的匿名鏡像,

dev@dev:~/docker$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
tianfang hello c0d8c6a310a1 3 minutes ago 212MB
<none> <none> 4b4d47f8602c 4 minutes ago 212MB
<none> <none> 10e7cece6d5c 4 minutes ago 212MB
<none> <none> 56b9bc345162 5 minutes ago 212MB
mcr.microsoft.com/dotnet/aspnet 6.0 e3f3ae957ae9 7 days ago 212MB

可以用下列命令刪除

docker image rm -f $(docker images -f dangling=true -q)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章