OS:Widows 10 IDE: VS2017 Docker:Docker Desktop for Windows Windows下安裝Docker需要先啟用Hyper-v 在Windows 容器的運行目錄在C盤這個改不了,但是可以改image的保存路徑 本地環境搭好後開始準備項目製作鏡像 1.新 ...
OS:Widows 10
IDE: VS2017
Docker:Docker Desktop for Windows
Windows下安裝Docker需要先啟用Hyper-v
在Windows 容器的運行目錄在C盤這個改不了,但是可以改image的保存路徑
Desktop 右鍵 > Settings > Daemon > 點擊 Basic > 輸入 "graph": "D:\\docker\\images"
本地環境搭好後開始準備項目製作鏡像
1.新建項目時添加Docker支持或者在現有項目上右鍵添加Docker支持
2.將生成的Dockerfile複製到解決方案目錄下 *****貌似如果需要用命令行Build鏡像就必須手動複製到解決方案目錄下,應該算是vs的bug****
VS自動生成的一個Dockerfile 紅色部分是後加的說明
#Depending on the operating system of the host machines(s) that will build or run the containers, the image specified in the FROM statement may need to be changed.
#For more information, please see https://aka.ms/containercompat
# 這是一個運行時的基礎鏡像,表示這個api依賴這個runtime,別名是base 工作目錄是/app 運行埠是 80 #
FROM microsoft/dotnet:2.1-aspnetcore-runtime-nanoserver-1803 AS base
WORKDIR /app
EXPOSE 80
# 這是dotnet的sdk鏡像,也是一個基礎鏡像 別名 build 構建鏡像的過程中需要使用各種dotnet的命令,所以也是必不可少的 #
FROM microsoft/dotnet:2.1-sdk-nanoserver-1803 AS build
WORKDIR /src
COPY ["HelloApi/HelloApi.csproj", "HelloApi/"] # 把HelloApi/HelloApi.csproj 複製到 HelloApi/ 下 #
RUN dotnet restore "HelloApi/HelloApi.csproj" # 運行 dotnet 的 restore 命令 #
COPY . . # 把當前目錄下文件複製到運行目錄#
WORKDIR "/src/HelloApi"
RUN dotnet build "HelloApi.csproj" -c Release -o /app # 運行dotnet的build命令 打包成Release 輸出目錄是 /app #
FROM build AS publish
RUN dotnet publish "HelloApi.csproj" -c Release -o /app #發佈命令#
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "HelloApi.dll"] # 程式入口 使用dotnet命令啟動HelloApi.dll文件 #
3.打開cmd命令行工具進入到Dockerfile目錄(也可以不進入,但是需要輸入Dockerfile文件的路徑)
docker build -t erp/myapi:1.0 .
# -t 表示給鏡像起名字 格式是 name:version 如果不加上版本號 會預設成 laster
# . 表示當前目錄 也可是完整路徑
4.查看docker鏡像
docker images
5.運行一個鏡像(鏡像跑起來就是容器了)
# 基於鏡像erp/myapi:1.0運行一個名為api的容器
# -d 後臺運行 -it 控制台運行
# -p 埠映射 容器80埠映射到宿主機8080埠上 -P 埠動態映射 每次啟動容器時埠隨機
# --log-driver 容器日誌收集方式json文本
# --log-opt max-size 容器日誌單文件大小上線 max-file 最多保存多少個日誌文件
# -v volume數據捲 表示把宿主機目錄和容器目錄做映射,通常是將容器中的應用日誌映射到宿主機上,容器中的資料庫文件映射到宿主機 避免刪除容器時資料庫等也被刪除
# sh 控制台啟動後可使用sh功能 windows環境下 是cmd
docker run -d -p 8080:80 --log-driver=json-file --log-opt max-size=1k --log-opt max-file=5 -v /data/logs:/app/App_Data/Logs --name api erp/myapi:1.0
docker run -it -P --name box busybox sh
其他常用參數 -e 環境變數 如 -e ASPNETCORE_ENVIRONMENT=release 項目運行環境是release 可使用多次
6.查看所有容器
# -a 表示查看所有容器 不加-a表示查看所有運行中的容器 docker ps -a
7.查看指定容器的詳細信息
docker inspect <容器名稱 or 容器ID>
8.進入一個運行的容器內
docker exec -it <容器名稱 or 容器ID> sh docker exec -it <容器名稱 or 容器ID> /bin/bash eg: docker exec -it api /bin/bash 退出 ctrl + p ,q 或者輸入 exit
這樣在docker中運行一個dnc項目就算是完成了
遇到的一些問題:
1.運行時沒有設置環境變數,dotnetcore沒有按預期載入appsettings.{xxx}.json文件,導致資料庫連接不通
2.Desktop 預設在Hyper-v中虛擬的是Linux內核 可以Desktop右鍵 點擊Switch to Windows/Linux containers 去切換環境
在Linux內核中運行web項目,資源文件路徑大小寫敏感
3.路徑問題 項目中不要使用 + "\\" 等來拼接路徑 通常建議使用Path.Combine()
下一篇 docker + elk 搭建日誌平臺
https://www.cnblogs.com/dbycl/p/10876373.html