Docker基础
什么是 Docker
Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案。
是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统方式则是在硬件层面实现。
基本不消耗额外的系统资源,使得应用的性能很高,同时系统的开销尽量小。
有什么用
一致的运行环境
开发过程中一个常见的问题是环境一致性问题,由于开发环境,测试环境,生产环境不一致,导致有些bug并未在开发过程中被发现,而Docker的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性。从而不会再出现(这段代码在我机器上运行没问题啊)zz这类问题。
隔离的环境
比如当前有两个网站,两个应用部署在同一台服务器上,可能会出现一下的问题:
- 如果其中一个应用出现了问题,导致CPU跑满,另一个应用也会受到牵连,将跟着一起凉凉了
如果两个应用时不同的技术栈,两个应用的依赖文件都安装在同一个服务器上,可能会产生各种冲突或不兼容,造成各种奇奇怪怪摸不着头绪的问题
持续交付和部署
对于开发和运维人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。
使用Docker可以通过定制应用镜像来实现持续集成,持续交付,部署。开发人员可以通过Dockerfile来进行镜像构建,并结合持续集成系统进行集成测试,而运维人员则可以在生产环境中快速部署该镜像,甚至结合持续部署系统进行自动部署更轻松的迁移
由于Docker确保了执行环境的一致性,使得应用的迁移更加容易,Docker可以在很多平台上运行,无论是物理机,虚拟机,公有云,私有云,甚至是笔记本,其运行结果是一致的,因此用户可以很轻易的将在一个平台上运行的应用,迁移到另一个平台上,而不用担心运行环境的变化导致应用无法正常运行的情况。
Docker 部署 .net6 Dome
- 创建一个项目,并启用docker支持
- 可以直接再创建的时候就勾选
- 也可以在创建后添加docker支持
- 对Dockerfile文件做一些修改
- 此处的 EXPOSE 为发布后的端口号
- .net6 需要配置端口信息
- 为了测试方便,本次允许访问Swagger
- 打包发布
- 由于docker是泡在linux上的,这里也要改成linux运行时
- 定位到发布的文件夹
- 开始构建镜像
- 构建完成后查看镜像
- 正常情况下还应该有个镜像仓库这一步(构建完成>>push到仓库>>服务器pull>>docker run),此处略过。
- 到服务器上使用docker run添加一个容器
- 到此时,程序已部署完成
Docker 部署 .net framework
- 添加docker支持,编辑下文件
- 发布到文件夹,并将Dockerfile从bin里面复制到上一级根目录里
- 开始构建镜像
- 结论:可以,但不建议,因为打包太久,打包太大,几分钟都转不完那种。。。
docker 怎么实现热更新 - 结论:不能热更新,docker 更新需要先删除容器,再使用新的镜像重新创建容器,这个过程服务将会中断
- 替代方案:配合nginx负载均衡实现灰度更新
- 大致流程(利用容灾的思路):
- 先更新备用服务,此时由于主服务扛着,用户并不会受到干扰
- 当备用服务线上测试有问题,用旧镜像回退版本
- 测试无误后,将主服务停掉,此时会自动启用备用服务,用户也不会受到影响
- 主服务更新完重启后,将继续优先访问主服务
评论 (0)