1.本文檔以eShopOnContainers.sevices.identity為描述對象,並包含docker for windows的部分配置流程。
2.前置環境:win10操作系統。安裝VS2017、NODEJS(下載LTS版本)、docker、hyper-v、sql2012。
3.VS2017編譯Identity.Api。部分Nuget可能需要更新依次更新。注:部分包提示版本低,我的做法是更新為最新的。
4.VS2017選擇發布Identity.Api.
5.運行docker。如果在win10下,安裝docker for windows。同時必須安裝NODEJS,並開啟Hyper-v。當運行docker時會在hyper-v里生成一個虛擬機。
6.下載kitematic,解壓到docker安裝目錄 例如:C:\Program Files\Docker ,並以kitematic為文件夾名保存。
7.下載core的運行環境鏡像。打開kitematic,搜索aspnetcore,並選擇create。注意此時是連接的國外服務器,不過由於文件不大所以可以不需要使用國內鏡像加速器。
8.修改docker的虛擬機網絡連接。注:此步驟是為了在測試環境下容器里程序訪問宿主機的數據庫,生產環境需要其他方法,比如直接使用linux服務器。修改網絡連接為“連接外網”,連接外網是提前設置好的,此處原本是DockrNAT。
9.打開cmd或者powershell。powershell可以通過kitematic的左下角打開。
10.創建Identity.api的容器。
- 在powershell里cd到identity.api的發布根目錄。注:如果是根目錄是需要修改Dockerfile文件的否則,會build時copy不成功。
- 修改Dockerfile。注意要么是在發布之前修改項目里的,發布之后就是修改發布的文件夾里的。。不論原本是寫的什么,此處改成如圖所示。
- 修改數據庫鏈接。打開appsettings.json。修改連接字符串,我本機的IP是192.168.1.19所以此處改成這個,如果hyper-v里不修改連接方式,則死活不能連接數據庫,其他方式我沒試出來。有更好方法的大家可以提出來。
- 在powershell里,運行 docker build -t identity:01 . 具體語法參考docker的命令,注意最后有個” .”。
- 運行docker run -p 8888:80 --name identity -d identity:01 端口部分我沒有改,直接使用的參考文檔里的寫法,在VS2017里運行identity.api時默認端口是5105,此處也可以把8888改成5105.此時會看到kitematic里有一個identity被創建,等待其加載完成即可訪問。
11.數據庫會在第一次運行時自動創建。
12.參考:http://www.cnblogs.com/inday/p/identity-service-eshoponcontainers.html。
13.特別感謝參考文檔的作者James.Ying。