(轉)讓.NetCore程式跑在任何有docker的地方
阿新 • • 發佈:2020-07-18
原文地址:https://www.cnblogs.com/peyshine/p/12918315.html
一.分別在Windows/Mac/Centos上安裝Docker
Windows上下載地址:https://docs.docker.com/docker-for-windows/install/(window上安裝的常見問題和解決方案請參考下方步驟六) Mac上下載地址:https://hub.docker.com/editions/community/docker-ce-desktop-mac Centos上安裝Docker請參考我上篇文章連結:https://www.cnblogs.com/peyshine/p/12915317.html二.開啟vs 新建一個Web程式
這裡選擇啟動docker支援,主要是為了能夠自動生成dockerfile檔案,如果忘記勾選了也沒關係,也可以右鍵解決方案,點選‘新增’,選擇‘docker支援’,vs也會自動為我們生成dockerfile,大概長這個樣子對dockerfile檔案解釋說明:
1.FROM 通過FROM指令來設定要製作的映象基於哪個映象,FROM指令必須是整個Dockerfile的第一個指令,如果指定的映象不存在預設會自動從Docker Hub上進行拉取 2.WORKDIR 通過workdir指令用於設定Dockerfile中的RUN、CMD和ENTRYPOINT指令執行命令的工作目錄(預設為/目錄),該指令在Dockerfile檔案中可以出現多次,如果使用相對路徑則為相對於WORKDIR上一次的值 3.COPY三.DotNet Core 程式在Windows Docker上的執行
直接在VS中選擇以docker方式執行,VS的輸出控制檯就會列印以下資訊內容可以看到執行之前,VS先做了幾個檢查工作
- windows上是否安裝了Docker Desktop
- Docker Desktop是否在執行
- Docker Desktop的作業系統模式是否與專案的目標作業系統匹配
- 指定需要的映象本地是否存在,不存在的就會進行拉取
- 檢查完了之後就是打包映象和執行容器
四.打包釋出映象到https://hub.docker.com/
選擇釋出到Docker hub,輸入自己的賬號密碼,沒有的話可以註冊一個 點擊發布之後,輸出控制檯可以看到有build打包的過程 釋出完成之後,控制檯會有對應的提示資訊,已經成功推送帶標記的‘latest’的Docker映象 進入Docker hub上,在自己的賬戶的儲存庫下面會多處一個映象檔案,也就是剛剛推送過去的 點選進入,可以看到拉取的命令 在powershell中拉取自己的映象 執行容器,執行成功會返回一個長的字串,通過docker ps指令,可以檢視容器已經成功執行起來了 那麼這個映象是否能在linux上拉取並執行呢?答案是否定的,因為在新增docker支援時候,我這邊選了平臺支援為windows,如圖 步驟四:只是玩一下怎麼打包推送映象檔案,不關注的可以直接跳過步驟四五.DotNet Core 程式在Centos Docker上的執行
重新在VS中新增一個dockerfile,這次選擇linux平臺的 這次我們需要修改下dockerfile檔案 因為我們提前編譯並且釋出出來了檔案,所以在dockerfile中就不需要這些步驟了 貼一下dockerfile檔案FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 80
COPY . /app
ENTRYPOINT ["dotnet", "WebApp_Docker.dll"]
釋出後將Release檔案下所有檔案上傳到centos上,然後執行以下命令打包映象
docker build -t docker_web_test:1.0 .
後面的點可以打印出具體的執行步驟細節
通過指令驗證打包結果:# docker images
最後執行容器
docker run --name docker_web_test -d -p 7788:80 docker_web_test:1.0
可以看到容器已經執行起來,並且可以輸出頁面內容。