Net core 2.x - 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
然後如果沒有錯誤的話就可以看到我們開篇時候的截圖了.
Net core 2.x - docker(for windows)-linux配置及項目發布