1 什么是Docker?
Docker是一個用于開發,發布和運行應用程序的開放平臺。Docker使您能夠將應用程序與基礎架構分開,從而可以快速交付軟件。借助Docker,您可以以與管理應用程序相同的方式來管理基礎架構。通過利用Docker的方法來快速交付,測試和部署代碼,您可以大大減少編寫代碼和在生產環境中運行代碼之間的延遲。
2 為什么需要Docker?
2.1 解決環境配置麻煩
一般我們寫程序,會有開發環境,測試環境,生產環境,很多bug都是環境問題。
過去部署的思路,在開發環境打包,想跑到Window環境下運行。我們得先在Window下載好.NET Framework,IIS等,配置好對應的環境變量,將包丟到iis的webApps文件夾下,才能跑起來。
現在Docker的思路,可以將我們的想要的環境構建成一個鏡像,然后我們可以推送到網上去。想要用這個環境的時候,在網上拉取一份就好了。
2.2 解決應用之間隔離
大家一定遇到過在多個應用部署在同一臺服務器上,有一個應用出現了問題,導致CPU占100%,其他應用也都受到影響。還有就是比如有些應用用NET技術,有些應用用php技術,這些不同應用各種的依賴軟件都安裝在同一個服務器上,可能就會造成各種沖突/無法兼容。
2.3 Docker與虛擬機
對于虛擬機,主機服務器從下至上有三個基礎層:基礎架構,主機操作系統和虛擬機監控程序,最重要的是每個虛擬機都有自己的操作系統和所有必要的庫。對于Docker,主機服務器僅具有基礎結構和操作系統,最重要的是容器引擎,該容器引擎使容器保持隔離狀態,但共享基本的OS服務。
因為容器需要的資源要少得多(例如,它們不需要完整的操作系統),所以它們易于部署并且啟動迅速。這樣可以提高密度,這意味著可以在同一硬件單元上運行更多服務,從而降低成本。
作為在同一內核上運行的副作用,與VM相比,您獲得的隔離更少。
3 如何使用Docker?
首先,安裝Docker ,參考官方文檔。
- mac
- windows
- Ubuntu
- Debian
- centos
- Fedora
然后,創建Docker.WebApi01項目
確保已選擇“啟用 Docker 支持”復選框,選擇所需的容器類型(Windows 或 linux)。
接著,我們打開Dockerfile文件, 請參閱Dockerfile引用,了解其中的命令:
FROM mcr.microsoft.com/dotnet/aspnet:5.0-buster-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/sdk:5.0-buster-slim AS build
WORKDIR /src
COPY ["Docker.WebApi01/Docker.WebApi01.csproj", "Docker.WebApi01/"]
RUN dotnet restore "Docker.WebApi01/Docker.WebApi01.csproj"
COPY . .
WORKDIR "/src/Docker.WebApi01"
RUN dotnet build "Docker.WebApi01.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "Docker.WebApi01.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Docker.WebApi01.dll"]
上面代碼含義說明:
- FROM mcr.microsoft.com/dotnet/aspnet:5.0-buster-slim AS base:指定基礎鏡像文件mcr.microsoft.com/dotnet/aspnet,標記為5.0-buster-slim,別名為base。
- WORKDIR /app:設置工作目錄為/app
- EXPOSE 80:將容器 80 端口暴露出來, 允許外部連接這個端口。
- COPY ["Docker.WebApi01/Docker.WebApi01.csproj", "Docker.WebApi01/"]:將 Docker.WebApi01/Docker.WebApi01.csproj 復制到 Docker.WebApi01/目錄下。
- RUN dotnet restore "Docker.WebApi01/Docker.WebApi01.csproj":恢復 Docker.WebApi01.csproj 項目的依賴項和工具。
- RUN dotnet build "Docker.WebApi01.csproj" -c Release -o /app/build:生成 Docker.WebApi01.csproj 項目及其所有依賴項。
- RUN dotnet publish "Docker.WebApi01.csproj" -c Release -o /app/publish:將應用程序及其依賴項發布到文件夾以部署到托管系統。
接著,調試
在工具欄的調試下拉列表中選擇“Docker”,然后開始調試應用。 你可能會看到提示信任證書的消息;選擇信任證書以繼續。
“輸出” 窗口中的“容器工具” 選項顯示正在進行的操作。 第一次時,可能需要一些時間來下載基本映像,但在后續運行時速度要快得多。
最后,構建及運行
docker build -t dockerwebapi01 -f ./Docker.WebApi01/Dockerfile .
docker run --rm -it -p 49181:443 dockerwebapi01
注意這里有一個坑直接在Dockerfile目錄下執行會報以下錯誤:
=> ERROR [build 3/7] COPY [Docker.WebApi01/Docker.WebApi01.csproj, Docker.WebApi01/]
遇到這個問題有兩個解決方案,其一是把Dockerfile文件放到sln同一個目錄下,然后執行docker build,另一個是本文采用的方法,在sln目錄下執行,需要指定Dockerfile路徑
我們在瀏覽器上輸入: https://localhost:49181/WeatherForecast 看看效果






