1. 程式人生 > >docker(for windows)-linux配置及專案釋出

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

然後如果沒有錯誤的話就可以看到我們開篇時候的截圖了.