上一篇文章:把代碼鏈接到容器 html
在Docker的世界裏,咱們能夠經過一個叫Dockerfile的文件來建立Docker鏡像,隨後能夠運行容器。node
Dockerfile就是一個文本文件,裏面寫着一些指令。經過Docker Client,並使用docker build這個命令,docker build命令會讀取該文件裏面的指令,生成一層文件系統,而後就生產出了一個docker的鏡像。python
Dockerfile的文件名就是Dockerfile,固然了也能夠叫別的名,可是一般就叫Dockerfile。git
Dockerfile裏面包含着各類指令,這些指令會建立一箇中間層鏡像,這個中間層鏡像能夠被緩存,這樣的話之後構建的時候速度就很快了。github
Dockerfile的主要指令:docker
下面是官網的一個Dockerfile的例子:shell
FROM python:27.-slim,說明該鏡像要基於python:2.7-slim這個鏡像構建。這將會是一層。npm
COPY . /app,是指在構建鏡像的時候,從當前目錄把源碼複製到/app目錄下。這又是一層。緩存
RUN xxx,是指在WORKDIR(/app)下執行pip install xxx這行命令。app
EXPOSE 80,是指把容器的80端口暴露給外界。
ENV,定義了環境變量。
CMD ["python", "app.py"],裏定義了容器運行的默認命令和參數。
在Docker hub裏找到aspnetcore:
裏面第一個microsoft/aspnetcore 只有運行時,因此只能dotnet run,適用於生產環境。
第二個microsoft/aspnetcore-build裏有完整的dotnet sdk,能夠執行dotnet restore, dotnet build, dotnet run等等。
使用VSCode打開我上篇文章創建的ASP.NET Core項目(或者新建一個也能夠):
而後咱們這樣來建立Dockerfile,首先點擊Extensions,搜索docker:
能夠找到一個Docker擴展,是由微軟開發的。安裝它便可。
安裝完後,點擊Docker按個圖標:
就能夠看到本機上的Docker鏡像,容器,註冊信息等等。
而後按Ctrl+Shift+P,而後輸入docker:
能夠看到有不少可用的命令。
選擇Add Docker Files to Workspace,而後選擇ASP.NET Core:
而後選擇操做系統,這裏我選Linux:
而後填寫內部的端口,我這個項目是5001:
而後按回車,就會生成Dockerfile,同時還有一個.dockerignore文件:
(在編輯Dockerfile文件的時候還有智能提示的)。
看一下這個文件:
FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base,就是把前面的鏡像起了一個別名,叫作base。
WORKDIR /app,工做目錄是 /app。
端口5001。
下面幾句相似,而後:
COPY ["VolumeSample.csproj", "./"],就是把VolumeSample.csproj複製到當前工做的目錄。
RUN dotnet restore "./VolumeSample.csproj",執行dotnet restore。
COPY . .,而後把全部的源碼也複製到當前的工做目錄。
WORKDIR "/src/.",切換工做目錄到/src。
RUN dotnet build "VolumeSample.csproj" -c Release -o /app,再執行dotnet build命令,並把結果放在/app目錄下。
後邊幾句也是相似:
COPY --from=publish /app .,是指從publish目錄複製,具體是從publish/app目錄複製,到當前的工做目錄。
其實上面使用VSCode生成的Dockerfile並非我須要的,我須要的Dockerfile仍是按照官方文檔來吧:
https://github.com/aspnet/aspnet-docker/blob/master/README.aspnetcore-build.md
最後是這樣的:
也是多個Stage的。
而後執行這個命令來構建鏡像:
docker build -t solenovex/aspnetcore .
使用docker build,-t表示tag,而後是用戶名和要起的鏡像名,鏡像名後邊能夠跟着具體的tag,例如solenovex/aspnetcore:1.0,若是不加的話就是latest。最後一個.表示當前這個含有Dockerfile目錄是我要進行構建的內容。
執行的時候會遇到.net sdk版本不匹配的問題,也就是microsoft/aspnetcore-build這個鏡像的.net sdk版本有點低。
因此,我只好改成使用microsoft/dotnet:2.1-sdk這個鏡像了:
再次執行:docker build -t solenovex/aspnetcore .
這個構建的過程仍是挺快的,過程大概以下:
成功了。
而後從VSCode的docker擴展裏就能夠看到我剛剛建立的鏡像:
而後在Powershell裏面建立/運行一個容器:
執行docker ps -a:
能夠看到該容器運行後就立刻退出了,查看一下日誌看看緣由:
錯誤信息是:
其實這個錯誤信息感受並不明確。
具體怎麼解決這個錯誤,且聽下回分解。。