1. 程式人生 > >Net core 2.x - docker(for windows)-linux配置及項目發布

Net core 2.x - docker(for windows)-linux配置及項目發布

區別 默認 context aml 配置說明 nds cor 開篇 --

將.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配置及項目發布