尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Docker(仅学习记录与理解,可能有误或理解不到位)

Docker(仅学习记录与理解,可能有误或理解不到位) 引言写这篇文章的原因还是最近的项目中多次提到了docker这个东西虽然在用就是跟着那种足够详细的指导一步一步使用但是对于这个东西我完全没有自己的理解docker到底是个什么容器、容器部署这些到底有什么作用。故此有了这篇文章算是分享一个自己的理解也希望看见大家的理解一.Docker到底解决了什么问题工具的诞生都是为了解决问题所以先从这方面去介绍先看一个程序员经典痛点简单来讲就是代码在这台电脑可以运行换到另外一台电脑就跑不动了这个是个梗哈但也是实际情况我脑回路比较清奇我想的是交付的时候直接把这台电脑一起交付过去就行了欸很巧的是其实docker干的就是差不多的事情。换台电脑就跑不动的原因环境不一致我说的直接把电脑一起交付过去其实就是把环境原封不动地交付过去当然在实际项目中这是不可能的不然每有一个软件就有一台计算机这个有点夸张了不过目的也就明确了就是把环境1:1复刻过去这就是docker干的事。写到这里其实看似说通了其实我自己也是懵逼的为啥因为是个人都知道你下载一个软件也好或者其它什么也好其实都分了什么windows/linux/mac对吧你docker牛逼把环境都搬过去了那你docker本身又如何兼容docker所处的环境而且这样和其实有点像虚拟机了以及docker搬环境搬多少内部的环境与外部的环境属于不同的又该怎么办这是我写到这里冒出来的问题接这往下看吧最经典的类比集装箱你可以把 Docker 理解成「软件界的集装箱」过去运输货物每件货形状大小都不一样装船、卸车、中转都要重新分拣打包效率极低还容易坏。有了集装箱之后所有货物都装进统一规格的箱子里全程密封不拆箱。不管是装船、卡车拉、火车运任何运输工具都能直接适配不用管箱子里装的是什么。对应到软件世界货物 你的应用代码、依赖、配置、运行环境集装箱 Docker 容器轮船 / 卡车 / 火车 任何装了 Docker 的机器电脑 / 服务器 / 云主机一句话总结Docker 把应用连同它需要的所有运行环境一起打包成一个密封的 “箱子”。这个箱子放到任何有 Docker 的机器上直接就能运行完全不用重新配置环境也不会出现 “水土不服”。二.核心概念镜像、容器、仓库Docker必懂得三个核心概念三者是[模板-实例-仓库]的关系。1.镜像(image)镜像是只读的模板文件相当于集装箱的设计图纸半成品。比如nginx:latest镜像就是一个 “已经装好 Nginx 软件的系统模板”python:3.11镜像就是带 Python 3.11 环境的模板。你可以基于官方基础镜像往里添加自己的代码、配置、依赖打包成属于你自己的应用镜像。镜像分层存储复用率高体积小。2.容器(container)容器是镜像运行起来的实例相当于真正投入使用的集装箱。类比面向对象编程镜像 类容器 对象一个镜像可以创建无数个互不干扰的容器。容器默认是 “临时” 的容器运行时产生的数据、日志、修改容器删除后就会消失。如果需要数据持久保存要用「数据卷Volume」把数据映射到宿主机上。容器之间互相隔离每个容器有自己的文件系统、网络、进程空间A 容器崩溃、中毒、改配置完全不会影响 B 容器。3.仓库(Registry)仓库是存放镜像的云盘/应用商店。官方公共仓库是 Docker Hub里面有海量官方镜像MySQL、Redis、Nginx、Ubuntu 等拉下来就能用。国内常用阿里云镜像、网易云镜像等加速源企业内部一般会搭建私有仓库Harbor存放自己的业务镜像。三.容器与虚拟机的对比容器与虚拟机的本质区别在[隔离层级]对别维度虚拟机(VMware/KVM)Docker容器隔离级别操作系统级隔离模拟完整硬件内核进程级隔离、共享宿主机操作系统内核资源占用重每个虚拟机占几GB磁盘、几GB内存轻一个容器通常只有几十MB到几百MB启动速度分钟级秒级单机密度一台服务器跑十几个很吃力一台服务器轻松跑上百个隔离强度极强完全独立系统较强满足大多数业务隔离需求通俗对比虚拟机在你的房子里重新盖一整栋独立小房子有自己的墙壁、水电、家具完整操作系统。安全但费材料、盖得慢。容器在你的房子里用隔板隔出一个个独立房间共享房子的地基、水电宿主机内核每个房间有自己的家具。隔起来快、占空间小、性价比高。补充Windows/Mac 上的 Docker 桌面版底层会跑一个轻量 Linux 虚拟机来提供内核本质上还是共享这个虚拟机的内核。四.容器部署是什么容器部署就是一种全新的应用发布方式1.开发人员把代码、依赖、环境、配置一起打包成Docker镜像2.把镜像推送到镜像仓库3.运维、自动化工具在目标服务器上拉去镜像、一条命令启动容器应用就跑起来了。整个过程不需要在服务器上安装任何运行环境、不需要改配置、不需要解决依赖冲突只要服务器装了Docker就能一键部署。五、为什么要用Docker/容器核心价值1.环境绝对一致彻底解决”我电脑上能跑“一次构建到处运行。开发、测试、生产用同一个镜像再也不会出现”本地好好的上线就崩“的环境问题。2.轻量高效资源利用率极高容器共享宿主机内核没有额外的操作系统开销。同样一台服务器容器数量能达到虚拟机的 5~10 倍大幅节省服务器成本。3.秒级启动部署/回滚极快镜像有版本标签比如v1.0/v2.0发布就是拉去新镜像启动容器出问题直接切回滚版本镜像回滚只需要几秒。4.环境隔离互不干扰一台机器上跑多个应用A用Python3.8, B用Python3.11完全不会冲突一个应用崩了、被攻击了不会波及其他应用。这里听着有点像conda创建虚拟环境5.可移植性极强不管是物理机、虚拟机、云服务器、国产系统只要装了Docker镜像就能直接跑。应用迁移、跨云迁移成本极低。6.完美适配自动化与云原生配合CI/CD工具(Jenkins/GitLab CI)代码提交后自动构建镜像、自动部署配合Kubernetes可以实现自动扩缩容、故障自愈是云原生时代的技术基石。我也不懂这块到底是干啥的也算是一个坑吧未来了解了再把它填上六.什么场景下会用Docker1.微服务架构部署每个微服务打包成一个容器独立开发、独立部署、独立升级服务之间互不影响是微服务的最佳落地载体。2.团队开发与测试统一环境团队所有人用同一个镜像开发避免”你环境有问题“的扯皮测试环境和生产环境100%一致大幅降低测试漏测概率。3.快速搭建中间件/学习环境想试用MySQL、Redis、MongoDB、Elasticsearch?不用下载安装、不用改配置一条docker run命令直接启动用完就删干净不污染本地环境。4.持续集成/持续部署(CI/CD)代码提交-自动构建镜像-自动部署测试环境-审核后自动上线生产形成完整自动化流水线是互联网公司的标准玩法。5.云原生与弹性伸缩应对电商大促、流量突增一分钟内启动上百个容器扛流量高峰过后自动销毁按需付费大幅节省成本。6.老旧应用迁移老系统跑在Windows Server 2008、CentOS 6等旧系统上想迁到新服务器又怕改坏。直接打包成容器镜像在新环境原样运行几乎不用修改代码。7.多租户Saas服务每个客户分配一个独立容器数据和环境完全隔离成本比给每个客户开一台虚拟机低得多。七.容器的编排当容器数量多了、应用需要多个容器配合前后端、数据库就需要编排工具Docker Compose单机多容器编排。用一个docker-compose.yml文件定义所有容器一条docker-compose up全部启动适合开发和小型项目。KubernetesK8s生产级集群编排。管理成百上千台服务器上的容器实现自动部署、自动扩缩容、故障自愈、负载均衡是大厂的标准方案。八.总结Docker的本质是应用打包与运行的标准化工具它把”环境“这个麻烦的变量彻底封装起来让应用的交付、部署、迁移变得像搬集装箱一样简单高效。在微服务、自动化运维、云原生的大趋势下已经成为后端开发、运维、测试岗的必备技能。结语其实这边文章里面还有好多东西我自己都没有弄清楚主要是因为在做nlp2sql时用到了国产的显卡然后就需要去搞vllm然后又不兼容又得搞专门提供的容器用里面的适配版本的vllm然后再把接口从容器引导宿主机这里面有使用docker的过程所以写下此文章里面有些坑后续再填吧大家就当个粗略了解docker的乐呵文看看得了。
返回列表