以前一直很好奇docker是個什么玩意,今天終於閑下來去玩一下了,關於docker的介紹以及優點介紹,相信大家都有去看過一點文章,我是通過這篇文章了解到docker,里面的作者也有寫一系列的教程,大家可以去看看https://www.cnblogs.com/ityouknow/category/1173004.html
接下來就是實戰了:
安裝 docker (1.安裝docker,2.啟動docker服務 3.開機自動啟動docker服務)
1 yum install docker 2 systemctl start docker.service 3 systemctl enable docker.service
檢查是否安裝正常,顯示出版本就證明可以了:
docker -v

創建項目
隨意創建一個mvc網站項目

本地發布驗證程序是否運行正常,並且Dockerfile屬性要設置為 始終復制


ps:默認啟動端口是5000,可以修改appsetting.json文件,添加urls節點指定啟動端口 例如: urls:"http://*8068" 。還有其他指定端口方法和原理,參考:https://www.cnblogs.com/cgyqu/p/12169014.html
這里由於我的服務器5000已經有了,所以改成8068
運行正常
修改Dockerfile文件
由於我們已經自己生成發布了在本地了,而vs幫我們自動生成的文件里面,包含了生成->發布->運行,所以這里,我們只需要運行的命令就行
修改為:
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base WORKDIR /app COPY . . ENTRYPOINT ["dotnet", "WebApplication1.dll"]
dockerfile文件指令說明:
- FROM -指定所創建鏡像的基礎鏡像
- WORKDIR-配置工作目錄
- EXPOSE-聲明鏡像內服務監聽的端口 (可以不寫,因為我們具體映射的端口可以在運行的時候指定)
- COPY-復制內容到鏡像 (. .代表當前目錄)
- ENTRYPOINT-啟動鏡像的默認人口命令
打包到服務器
這里我們使用MobaXterm或者xftp等工具上傳上去:
構建鏡像
1.進入程序目錄,先驗證下程序能否啟動和訪問

訪問正常,關閉網站,開始構建鏡像:
進入當前程序目錄,輸入構建命令
docker build -t mytest-mvc .

參數解釋:
- -t --指定鏡像名稱 (只能小寫)
- . --表示build上下文為當前目錄,默認情況docker會使用上下文的根目錄找到Dockerfile文件
查看構建的鏡像
docker images

創建並啟動容器
docker run --name myfirstWeb -d -p 8041:8068 mytest-web docker ps -a
參數解釋:
--name 表示容器名稱(區分大小寫),也可以不指定,默認會生成
-d 表示在后台以守護形式運行容器
-p 表示外部端口與內部容器端口映射。關於-p的還有其他用法(https://www.cnblogs.com/williamjie/p/9915019.html)
mytest-web 是我們剛才創建的鏡像名稱
查看是否啟動成功

最后去我們本地訪問

遇到的問題:
1.dockerfile里面指定了EXPOSE 暴露端口,發現最終容器啟動的時候內部還是用的配置文件里面那個ulrs里面的端口,可以使用docker logs 容器名 查看啟動日志
2.如果部署成功但發現訪問不了,一般都是防火牆問題
3.在刪除容器后,重新添加發現會ip沖突或者其他錯誤,直接重啟一下docker
其他常用命令:
1 docker logs 容器名稱 2 docker attach 容器名稱或容器ID 3 docker exec -it 59ec /bin/bash (如果提示“/bin/bash 未找到”之類的 可以改成:docker exec -it 59ec sh,退出ctrl+d) 4 docker stop 容器ID或容器名 5 docker kill 容器ID或容器名 6 docker rm 容器ID或容器名 7 systemctl restart docker
全部命令: https://www.runoob.com/docker/docker-rmi-command.html
參考文章:https://www.cnblogs.com/ityouknow/category/1173004.html
