最近在學習.net core,必不可少的需要學習docker,在此記錄一下,做一下知識積累。
前提:windows環境,vs2019
目標:生成本地docker image,並上傳到遠程respository。從遠程respository下拉取鏡像並在本地部署運行
-
下載docker for windows並安裝。
-
Docker網站上注冊用戶。
-
打開docker desktop,一定要記得切換docker 為windows,並做好登陸(這時如果登錄了,docker login時會調用這里)
-
打開vs2019,新建asp.net core項目,版本2.2(Mark一下,3.1的版本總有問題,這里先用2.2)
-
項目文件上右鍵菜單,添加docker file for windows
-
Docker file內容如下,並修改其屬性:
(a)From 基礎依賴鏡像
--#基於 microsoft/aspnetcore:2.0
來構建我們的鏡像
FROM microsoft/aspnetcore:2.0
(b)Copy
--#拷貝項目publish文件夾中的所有文件到 docker容器中的publish文件夾中
COPY . /publish
(c)WORKDIR設置工作路徑
--#設置工作目錄為 /publish
文件夾,即容器啟動默認的文件夾
WORKDIR /publish
(d)對外開放的端口
--#設置Docker容器對外暴露5000端口
EXPOSE 5000
(e)ENTRYPOINT 運行donet命令,參數是程序集的名字,不含路徑
--#使用dotnet CoreMvc.dll
來運行應用程序
ENTRYPOINT ["dotnet", "CoreMvc.dll"]
-
隨便在頁面上修改內容,運行項目。
-
publish項目到本地。
-
打開控制台程序,進入到publish的文件夾,生成imange, 名為dockerimagetest, 命令為"docker build -t dockerimagetest ." Note:最后面有個英文的點。注意,如果這個image文件想上傳到倉庫里,名稱前應該加上docker的用戶名/, 如abc/dockerimagetest
-
上面的步驟表示鏡像已經生成成功了,現在用一個容器來裝載這個image來看看。命令"docker run --name=容器名稱 -p 宿主端口:容器端口-d 鏡像名稱",容器名稱為dockercontainertest,鏡像名稱為dockerimagetest,-d為后台運行並返回容器id,-p: 指定端口映射,格式為:主機(宿主)端口:容器端口,整個命令為"docker run --name=dockercontainertest -p 7788:80 -d dockerimagetest",執行完后打開網頁,通過7788端口可以訪問了:
-
上面的步驟生成了一個image並在本地運行了,下面我們要做的是把image push和pull回來。先把這個image上傳。輸入docker login,我這里docker for desktop已經登錄了,所以它自己會檢測,不用再填寫用戶名和密碼了。
-
執行docker push dockerimagetest,出錯,原來在推送之前要把鏡像按
/ 格式來命名。那如何重命名呢,我們用打標簽的方式重命名。先查看所有的image,打標簽語句:docker tag 舊名 dockerhub用戶名/新名字,打完標簽后再push,已經在上傳了。
-
通過上圖可以看到鏡像已經上傳了。下面試着把image pull下來並運行吧。此處應該找一個新機器,我這里資源有限,還是用原來的機器,先把所有的container和image清除干凈。清理干凈后,訪問http://localhost:7788/,已經無法訪問了。同時把本地publish文件夾內文件清空(模擬新的機器)
-
執行docker pull friendwang1001/dockerimagetest:latest
-
鏡像已經下載下來了。重復第10步,裝載鏡像,鏡像名稍有變化,docker run --name=dockercontainertest -p 7788:80 -d dockerimagetest,再次訪問7788端口,網站加載上了,Yeah!