項目迭代發布新版本的時候,需要重新構建業務鏡像,重新運行docker容器。
老方法:先停止再刪除容器 最后刪除鏡像
docker stop 容器ID
docker rm 容器ID
docker rmi 鏡像ID
構建鏡像:docker build -t 業務鏡像名:Tag .【例子:docker build -t crm:v1.2.2 .】 前提先進入到發布的文件夾
運行容器:docker run -d --name 容器名 -p 對外端口:內部端口 業務鏡像名
若容器正在運行,進入容器內部:
docker exec -it 容器名 bash
退出容器:
exit 或者 CTRL + D
無法啟動容器 可查看日志:
docker logs 容器id
使用docker-compose方法:
配置好docker-compose.yml 文件,然后
docker-compose stop
docker-compose up -d --build
項目更新迭代:
發布且運行容器:docker run -d --name 容器名 -p 對外端口:內部端口 -v /www:/app 業務鏡像名
其中:
--name指定容器名稱
-d 指定容器后台運行
-p 指定外部端口映射到容器端口
-v 綁定數據卷/www到容器內的/app (本地目錄:容器內目錄)本地目錄必須為絕對路徑
由於在創建容器的時候映射了數據卷,則當有靜態文件更新的時候,會自動更新到容器內。
但是當有dll文件更新時,需要手動重啟一下容器
docker restart 容器名
通過docker inspect 容器名 命令查看容器在宿主機上生成的掛載目錄,主要看Mounts屬性
以上,實現了將一個Asp.Net Core MVC項目發布到docker中的全過程。
並且通過地址訪問網站實際上是直接訪問的Kestrel服務器。
一些額外的想法
Kestrel服務器只是一個輕量級的web服務器,並且不支持基於主機名的綁定(如果1台服務器部署了多個 ASP.NET Core 站點,每個站點需要使用不同的端口)
出於安全性考慮(包括但不限於適當的超時,大小的限制,以及並發連接限制等問題)需要在Kestrel和Internet之間加入一個反向代理服務器(IIS,Nginx或者Apache)
參考以下原文:
https://www.cnblogs.com/yyee/p/12954995.html
https://www.cnblogs.com/cplemom/p/11142857.html
