docker(for windows)-linux配置及專案釋出
將.net core2.x+sqlserver專案釋出到docker.呵呵,操作很自如,如下.
1.羅嗦幾句
在跑起來之前浪費了不少時間和精力,起初是將docker for windows的環境轉換成了 window(安裝docker for windows之後,右下角的小鯨魚右擊之後轉換),但是很操蛋,也做了隨筆但是沒有釋出之儲存了草稿,記錄了很多的問題以及問題的解決方式,浪費了一天時間.跑起來之後感覺幸福來之不易所以拿出來分享下.下面看我們的效果圖;
2.效果預覽
...其他內容
可以看到我們的專案成功跑起來並完成了在sql server資料庫的遷移操作.
我們看下我們的專案是否可以正常訪問,(我這裡對映的docker expose埠60000到外部埠 8089)
毫無懸念的可以訪問到我們的介面了.和前幾篇寫的隨筆的時候 熟悉的介面又回來了.下面就說下配置以及操作.
3.環境及配置
3.1環境
我們要將專案釋出到docker,那麼我們首要解決的就是docker的獲取,是的,我們也就是用我們慣用的windwos環境,安裝docker for widnows,
獲取: https://www.docker.com/products/docker-desktop
選取您需要的版本即可.安裝直接下一步下一步就行,安裝完成之後,我們要看下我們的容器是windows還是linux,因為這裡我們使用的是 linux container ,檢視如下:
然後我們點選settings->Shared Drives,選擇你要和docker 共享的磁碟,然後點選Advanced 分配你的CPU和記憶體即可,參考如下,,,我是預設的:
好的,docker我們就簡單的配置完了.下面,就到了重要環節了,此時如果你看過其他的入門的文章的話,你可能絕的下一步驟就是建立專案 直接丟docker就可以泡起來了,或者,頂多在建立一個Dockerfile就行了.我告訴你,低俗....你被騙了,單純跑一個專案是沒任何問題的,但是我們還要連線資料庫(sql server),還要連線redis,mongodb,,,等等...所以,這裡還沒有配置完.要做的還不少呢.
3.2配置
首先先確保我們的docker環境是有效的,可以在cmd或者powershell中輸入docker info,如果不提示docker無效即可.不多說.
下面我們先獲取下發布必須的相關映象 (複製到cmd或者powershell直接回撤),,,當然這一步不是必需的,因為我們一會兒在build我們專案對應的映象的時候使用到的 相關映象會自己下載安裝:
docker pull microsoft/dotnet
docker pull microsoft/mssql-server-linux
將我們的core專案釋出檔案複製到指定的資料夾,並cd到這個 資料夾中 ,在其中建立一個 Dockerfile的檔案,無後綴!!,內容如下(參考):
# 基於microsoft/dotnet:2.1-sdk or dotnet:latest 預設latest 來建立我們的映象 FROM microsoft/dotnet #指定docker的工作目錄為 esoftor-master資料夾,也就是容器的預設的資料夾 WORKDIR /usr/local/src/esoftor-api-master # docker對外暴露的埠 EXPOSE 60000 # 將當前資料夾下的所有檔案全部複製到工作目錄 COPY . /usr/local/src/esoftor-api-master #CMD dotnet ESoftor.WebApi.dll 這裡自行百度 CMD和ENTRYPOINT的區別 ENTRYPOINT ["dotnet", "ESoftor.WebApi.dll"]
這時候我們的基礎工作就完成了.Dockerfile在我們資料夾中位置如下(參考):
到這裡我們哈需要繼續配置另一個東西. docker-compose.yaml,,,,,,,docker compose ,,,,,docker ......Docker Compose是Docker三劍客之一,用於定義和執行多個Docker容器應用,負責實現對 Docker 容器叢集的快速編排。我們可以通過Dockerfile定義一個單獨的應用容器。然而在日常工作中,經常會碰到需要多個容器相互配合來完成某項任務的情況。例如要實現一個 Web 專案,除了 Web 服務容器本身,往往還需要再加上後端的資料庫服務容器等。Compose 恰好滿足了這樣的需求。它允許使用者通過一個單獨的 docker-compose.yml 配置板檔案(YAML 格式)來定義一組相關聯的應用容器。然後使用使用單個命令,就可以根據配置中建立並啟動所有服務。但是值得我們慶幸的事情是,官方很明確的有說明了,docker for windows預設內建了Docker compose,否則的話我們還需要單獨安裝.
我們cd到 上面截圖的 上一層資料夾,也就是Temp資料夾中.建立 一個名稱為 docker-compose.yml 的檔案.內容參考如下:(這裡我只配置了sqlserver),只是為了掩飾core+sql server 在docker中可以跑起來:
version: "3" services: esoftor.api: image: esoftor.api:v1.0 environment: - ASPNETCORE_URLS=http://0.0.0.0:60000 - ConnectionString=Server=sql.data;User=sa;Password=520Tmc1314!;Database=esoftor.source.novel2; build: context: ./netcoreapp2.1 dockerfile: Dockerfile ports: - "8089:60000" volumes: - ./netcoreapp2.1/:/usr/local/src/esoftor-api-master container_name: esoftor.api depends_on: - sql.data sql.data: image: microsoft/mssql-server-linux:2017-latest environment: - SA_PASSWORD=520Tmc1314! - ACCEPT_EULA=Y ports: - "14333:1433"
配置說明:
version:不解釋,自行百度 docker compose 然後看官方解釋,,,看了也太大意義
services:服務,我們這裡的服務就是esoftor.api和sql.data,當然這個詞是複數形式,也就是說可以配置多個
esoftor.api 和 sql.data 就是我們自定義的服務名稱,隨便寫
image:生成的映象名
environment:服務環境的變數 ASPNETCORE_URLS=http://0.0.0.0:60000 即:監聽的60000的埠,這個和我們的Dockerfile中的EXPOSE是對應起來的. ConnectionString:不解釋,但是要注意的是,這裡的 Server=的是我們配置的第二個服務的名稱,也就是sqlserver的服務名稱.
build:context:及Dockerfile所在的目錄(因為上面我們已經cd到了專案的所在目錄的上一級資料夾) dockerfile:即dockerfile的檔名稱
ports:格式 外部埠:內部埠 這裡的內部埠就是我們上面使用的 60000,也是和dockerfile中是對應起來的.
volumes:格式 專案路徑:docker的執行目錄,---這裡也是和Dockerfile中設定的 WORKDIR是對應的
container_name:生成的容器的名稱
depends_on:顧名思義,依賴項;這裡我們依賴了我們的另一個服務也就是訪問資料庫用的
資料庫配置:這裡如果你的機器安裝了Sql server資料庫,你會遇到一個問題就是 在執行的時候會發現1433(sqlserver)使用的被佔用了,,,,不是廢話嗎,所以上面參考配置中,我是用的14333不是1433,我是將14333對映到docker的1433埠,並在 SQL SERVER 的網路配 MSSQLSERVER的TCP/IP的IP中修改了127.0.0.1的1433的預設配置為14333,並設定為啟用
以上我們呢的基礎工作就完成了,下面開始愉快的玩耍起來吧.
4.建立映象並執行專案
此時我們在cmd或者powershell中輸入:docker-compose build
默默的等待執行完成吧.
完成之後繼續輸入:
docker-compose up
然後如果沒有錯誤的話就可以看到我們開篇時候的截圖了.