一 windows 下安裝docker
二 .net core 項目
- 新建一個空的ASP.NET Core Web 應用程序
- 在該項目的目錄下執行
dotnet publish
,可以看到在bin\Debug\netcoreapp2.1
目錄下生成publish
- 在
publish
目錄下執行dotnet WebApplication1.dll
可以運行項目
主要代碼如下:
public class Program
{
public static void Main(string[] args)
{
BuildWebHost(args).Run();
}
public static IWebHost BuildWebHost(string[] args)
{
return WebHost.CreateDefaultBuilder(args)
.UseKestrel()
.UseUrls("http://*:5001")
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.Build();
}
}
三 鏡像
在publish目錄下新建Dockerfile文件
# 基於microsoft/dotnet:latest構建Docker Image
FROM microsoft/dotnet:latest
# 進入docker中的/usr/local/src目錄
RUN cd /usr/local/src
# 創建WebApplication1目錄
RUN mkdir WebApplication1
# 設置工作路徑
WORKDIR /usr/local/src/WebApplication1
# 將當前文件夾下的所有文件全部復制到工作目錄
COPY *.* ./
# 向外界暴露5001端口
EXPOSE 5001
# 執行dotnet WebApplication1.dll命令
CMD ["dotnet", "WebApplication1.dll"]
生成鏡像
docker build -t core/docker .
core/docker可以理解為名稱
如果是第一次生成,由於需要下載microsoft/dotnet:latest這個Docker Image作為基礎Image
運行
把裝好的docker運行起來,執行以下命令:
docker run -it -p 8001:5001 core/docker
- -it參數表示需要提供一個模擬的shell環境,並要求有用戶交互功能,這樣當我們按下Ctrl+C的時候,就可以停止我們的應用程序
- -p 8001:5001參數表示需要將Docker Container的5001端口映射到主機環境的8001端口,也就是客戶端可以直接通過8001端口訪問我們的應用程序
- core/docker參數指定了需要運行的Docker Image。此處采用默認的latest標簽
docker ps //運行該命令可以查看所有容器,包括剛才運行的core/docker
錯誤解決
Error:
An assembly specified in the application dependencies manifest (WebApplication1.deps.json) was not found:
package: 'System.Data.SqlClient', version: '4.4.3'
path: 'runtimes/unix/lib/netstandard2.0/System.Data.SqlClient.dll'
依賴的版本與實際引用的版本不相同,更細到最新的dotcore,再更新nuget