如何更新docker业务镜像及容器,使用docker-compose up命令
项目迭代发布新版本的时候,需要重新构建业务镜像,重新运行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
可直接使用容器名,其中-f加上可以实时监控查看日志(即有日志更新也会输出):
docker logs -f 容器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