1.Docker 源码分析
2.dify+ollama构建本地大模型平台
3.39套实战教程KubernetesK8s CKA认证实战(完整版)BAT大厂基于K8s构建企业容器云平台
4.å¦ä½å¦ä¹ Docker
5.eBPF/Ftrace 双剑合璧:no space left on device 无处遁形
6.程序员macos有哪些必装软件?源码
Docker 源码分析
本文旨在解析Docker的核心架构设计思路,内容基于阅读《Docker源码分析》系文章后,分析整理的下载核心架构设计与关键部分摘抄。Docker是源码Docker公司开源的基于轻量级虚拟化技术的容器引擎项目,使用Go语言开发,分析遵循Apache 2.0协议。下载arp 攻击源码Docker提供快速自动化部署应用的源码能力,利用内核虚拟化技术(namespaces及cgroups)实现资源隔离与安全保障。分析相比虚拟机,下载Docker容器运行时无需额外的源码系统开销,提升资源利用率与性能。分析Docker迅速获得业界认可,下载包括Google、源码Microsoft、分析VMware在内的下载领导者支持。Google推出Kubernetes提供Docker容器调度服务,Microsoft宣布Azure支持Kubernetes,VMware与Docker合作。Docker在分布式应用领域获得万美元的C轮融资。
Docker的架构主要由Docker Client、Docker Daemon、Docker Registry、Graph、Driver、libcontainer以及Docker container组成。
Docker Client:用户通过命令行工具与Docker Daemon建立通信,发起容器管理请求。
Docker Daemon:后台运行的系统进程,接收并处理Docker Client请求,通过路由与分发调度执行相应任务。
Docker Registry:存储容器镜像的仓库,支持公有与私有注册。
Graph:存储已下载镜像,并记录镜像间关系的数据库。
Driver:驱动模块,黑马项目源码实现定制容器执行环境,包括graphdriver、networkdriver和execdriver。
libcontainer:库,使用Go语言设计,直接访问内核API,提供容器管理功能。
Docker container:Docker架构的最终服务交付形式。
架构内各模块功能如下:
Docker Client:用户与Docker Daemon通信的客户端。
Docker Daemon:后台服务,接收并处理请求,执行job。
Graph:存储容器镜像,记录镜像间关系。
Driver:实现定制容器环境,包括管理、网络与执行驱动。
libcontainer:库,提供内核访问,实现容器管理。
Docker container:执行容器,提供隔离环境。
核心功能包括从Docker Registry下载镜像、创建容器、运行命令与网络配置。
总结,通过Docker源码学习,深入了解其设计、功能与价值,有助于在分布式系统实现中找到与已有平台的契合点。同时,熟悉Docker架构与设计思想,为云计算PaaS领域带来实践与创新启发。
dify+ollama构建本地大模型平台
Dify是梦蝶同城源码一个开源的LLM应用开发平台,提供直观的界面和强大的功能,包括AI工作流、RAG管道、Agent、模型管理和可观测性,旨在帮助用户从原型到生产流程快速搭建。您可以在GitHub上找到Dify的代码库。 核心功能包括: 工作流:在画布上构建和测试功能强大的AI工作流程,利用所有集成功能。 全面的模型支持:无缝集成数百种专有/开源LLMs及数十种推理提供商和自托管解决方案,覆盖GPT、Mistral、Llama3等。 Prompt IDE:直观界面用于制作提示、比较模型性能及为聊天应用添加文本转语音等额外功能。 RAG Pipeline:广泛支持从文档摄入到检索,提供PDF、PPT等常见文档格式的文本提取。 Agent智能体:基于LLM函数调用或ReAct定义创建,提供超过种内置工具,如谷歌搜索、DELL·E、Stable Diffusion和WolframAlpha。 LLMOps:跟踪和分析应用程序日志与性能,持续改进提示、数据集和模型。 后端即服务:Dify所有功能都带有API,方便集成到您的业务流程中。 OLLAMA是一个LLM加速服务化应用,主要用于模型服务,作者通过一系列文章详细介绍了其部署、使用过程以及与CodeGPT结合的案例。OLLAMA支持Mistral-7B、Gemma-7B等模型。物流供求源码 部署DIFY步骤如下: 克隆DIFY源代码至本地。 使用一键启动命令启动DIFY容器。 访问本地DIFY服务,根据需要调整配置。 在DIFY中设置模型供应商时,确保输入OLLAMA宿主机地址(/BTW: ç读dockerææ¡£
-- 0 0
tuxknight
楼ä¸åä½è¯´çé½å¾å¥½ï¼æåè¡¥å ä¸ç¹ï¼
æ¾ä»½ç¸å ³çå®ä¹ å·¥ä½
-- 0 0
lancer
å·¥ä½åç 究æ¯ä¸¤ä¸ªæ¹åæ个人认为ï¼å·¥ä½éè¦éè¿ä½ çå®é æè½ä¸ºä¼ä¸å¸¦æ¥ç»æµæçï¼èç 究çè¯å¯ä»¥ä¸æ³¨æ个ç¹ãä½æ¯ç 究离ä¸å¼å·¥ä½ï¼å 为工ä½å¯ä»¥è®©ä½ æ´å¥½ççä¼ææ¯å¸¦æ¥çä»·å¼ï¼ä»¥åå¦ä½æä¾æ´å¥½çæå¡ï¼ç¨æ·ä½¿ç¨åºæ¯éè¦é£äºææ¯ççªç ´ãæäºè¿äºè®¤è¯ï¼ç¶åæ´å ä¸æ³¨çç 究æ个ææ¯ç¹ï¼è¿æ ·æ许å¯ä»¥è¯´ææ¯ååä¸æ¯åä¸å¼çã
-- 0 0
绿åè²å½±
dockerç°å¨ååç«çï¼å¼å¾å¦ä¹ ä¸ä¸ã
eBPF/Ftrace 双剑合璧:no space left on device 无处遁形
在生产环境中,我们遇到了创建容器时“no space left on device”的问题,磁盘使用空间和inode的状况都显示正常。常规的排查方式无法定位问题,那么是否有快速且通用的方法来找出问题的根源?本文是通过eBPF和Ftrace在单独环境中进行问题分析和定位的记录,希望能为遇到类似情况的读者提供参考。
当在机器上运行`docker run`命令时,系统会提示“no space left on device”,这表明在overlay mount过程中磁盘空间不足。使用`df -Th`命令检查磁盘空间情况,磁盘使用率仅为%。接下来,通过`df -i`查看inode的使用情况,overlay文件系统的inode使用率仅为7%。此时,我们可能怀疑是否存在文件被删除但句柄未被释放,导致inode泄露。为了验证这一假设,我们执行了`lsof | grep deleted`,但结果为空,意味着没有找到被删除但仍被使用的文件。
在常规排查方法都失效的情况下,我们尝试了eBPF(BCC工具集基于eBPF技术开发)和Ftrace的组合应用,以期快速定位问题。首先,我们利用BCC提供的系统调用跟踪工具`syscount-bpfcc`,通过错误码来快速确定问题。在时间允许的情况下,我们推荐从源代码逐步分析定位问题,硕郎源码这不仅能解决问题,还能深入学习。
在内核中搜索报错信息,我们可以直接在`include/uapi/asm-generic/errno-base.h`文件中找到与错误相关的定义。接着,利用`syscount-bpfcc`工具过滤返回`ENOSPC`错误的系统调用,我们发现`mount`系统调用返回了`ENOSPC`错误。通过参数`-P`按进程聚合显示,我们得知`dockerd`后台进程调用了`mount`系统调用并返回了错误。
进一步跟踪错误的具体位置,我们使用了Ftrace中的`function_graph`跟踪器。通过使用`funcgraph`工具,我们能够获取到`__arm_sys_mount`函数中调用的主要子流程函数。在内核函数调用过程中,如果遇到错误,内核通常会直接跳转到错误相关的清理函数逻辑中,这里我们关注`path_mount`函数,以深入分析可能的问题。
在确认问题主要出现在`count_mounts`函数中后,我们通过源代码分析函数的主流程逻辑,确定问题是由`sysctl_mount_max`配置值过低引起,这是通过`/proc/sys/fs/mount-max`设置的。通过将此值调整为默认值,我们成功解决了问题。
本次问题排查的思路不仅适用于“no space left on device”的情况,也适用于其他场景下的问题分析和排查。同时,将此思路作为源码阅读和分析内核代码时的补充工具,能有效提升问题定位的效率。希望本文能为读者提供有用的参考,如果发现文中的错误或有更好的案例,欢迎留言交流。
程序员macos有哪些必装软件?
Mac系统因其流畅的运行和强大的处理能力,受到程序开发者们的广泛欢迎。本期将为大家推荐作为软件开发者在Mac上必备的软件。推荐的软件包括:
1、Homebrew:Mac系统的第三方包管理器,更新速度快,软件包丰富。但更新系统后,可能需要重新配置一些软件。推荐安装命令:`brew install package`。国内使用可能较慢,可通过更改源解决。
2、Google Chrome:在浏览器选择上,Google Chrome因其优秀的代码调试和插件使用体验,被广大开发者推崇。
3、Webstorm:推荐前端编辑器,无需安装和配置大量插件,提供了一切所需功能。虽然需要付费,但网上有破解版本。
4、Python + PyCharm:AI领域的热门语言,配合PyCharm可以提高开发效率。使用Anaconda和pip时注意国内镜像源。
5、IntelliJ IDEA:Java开发集成环境,提供智能代码生成、项目重构等功能,提高开发效率。
6、Visual Studio Code:轻量级且功能强大的源代码编辑器,适合编写Web和云应用程序。
7、Sublime Text:功能强大的代码编辑器,提供Python插件、完整的Python API、Goto功能等。
8、iTerm2:替换默认终端的首选工具,提供分割面板、快捷键增强、优化的搜索等功能。
9、Navicat Premium:数据库管理工具,支持多类型资料库的管理。
、Docker Desktop:设置资源限制,配置Docker引擎,提供日志查看和容器管理功能。
、Dash:API文档浏览器,离线搜索API,提供丰富的编程语言和框架文档。
、JProfiler:帮助开发者分析和优化Java代码的工具。
、Parallels Desktop:虚拟机软件,可以在Mac上运行Windows应用程序。
、Typora:专业的Markdown编辑器,集成编辑与预览功能。
、uTools:集成了快速启动、取色、翻译等功能的系统增强软件。
、Microsoft Remote Desktop:Mac上的远程桌面控制软件,方便管理Windows平台的程序。
、Redis Desktop Manager:可视化工具,支持跨平台使用。
、Alfred:提高工作效率的快速启动工具,集成了多种快捷操作功能。
、MAMP Pro:简化Web开发环境搭建,支持Macintosh、Apache、MySQL和PHP。
、Xcode:苹果系开发工具,适合开发苹果相关软件,提供命令行工具和开源软件支持。
使用Docker Stack部署应用
理解Docker Stack部署应用的流程,首先需要认识到Stack是Docker中的高级版本,旨在集成到Docker中,管理和控制应用程序的生命周期。Stack位于Docker应用层次结构的顶层,构建于服务之上,服务又由容器组成。本书将以AtSea商店应用为例,深入探讨如何使用Docker Stack部署应用。
AtSea商店应用托管在GitHub的dockersamples/atsea-sample-shop库中,遵循Apache 2.0许可协议。应用的复杂度适中,既不过于复杂以至难以全面解释,又包含了多服务架构、认证和安全技术。应用架构图展示了其由5个服务、3个网络、4个密钥以及3组端口映射构成的结构。
在Stack文件中定义了应用及其依赖。文件通常被称作Stack文件,它定义了应用和服务、网络、密钥等要素。Stack文件由4种顶级关键字组成:version(用于指定Compose文件格式版本,至少为3.0)、services(列出构成当前应用的服务)、networks(列出必需的网络)和secrets(定义应用使用的密钥)。
Stack文件中的服务、网络和密钥等元素是应用的描述性文件,有助于弥合开发和运维之间的隔阂。通过分析Stack文件的细节,可以深入了解应用的结构和依赖关系。
部署应用时,首先检查并创建网络,然后定义服务、密钥等元素。应用代码通常由多个目录和源码文件组成,其中的关键文件是docker-stack.yml。此文件定义了应用及其依赖关系,包括服务、网络、密钥等。
Stack文件中定义了服务、网络和密钥等元素,并且通过version关键字指定文件格式的版本。默认情况下,网络采用overlay驱动,且在创建应用服务之前,网络会先于服务和密钥被创建。网络定义了应用所需的连接环境,密钥用于加密数据层,确保应用的安全性。
在部署应用时,网络会先被创建,然后服务、密钥等元素会基于这些网络进行定义和部署。应用的部署通常包括创建网络、定义服务、挂载密钥等步骤。服务定义了镜像、端口、密钥、网络等元素,网络定义了应用的连接环境,而密钥则用于加密数据层,确保应用的安全性。
部署应用后,可以通过检查网络、服务的状态来确认部署是否成功。应用的维护和管理可通过修改Stack文件来实现,遵循声明式的方式进行应用的更新和管理,确保应用状态与Stack文件定义保持一致。正确地删除Stack需通过docker stack rm命令执行,注意其不进行二次确认。
总之,通过Docker Stack部署应用的过程涉及网络、服务、密钥等元素的定义和部署,确保应用安全、高效地运行。深入理解Stack文件的结构和应用的部署过程,对于高效管理和维护Docker应用至关重要。
dockerådockeråºç¨ç¨åºçåºå«
å¦æä½ æ¯æ°æ®ä¸å¿æäºè®¡ç®ITååç人ï¼è¿ä¸å¹´å¤æ¥åºè¯¥ä¸ç´å¨å¬å°æ®éç容å¨ãå°¤å ¶æ¯Dockerï¼å ³äºå®ä»¬çæ°é»ä»æªé´æè¿ãDocker1.0å¨ä»å¹´6æåå¸åï¼å£°å¿æ´æ¯è¾¾å°äºåææªæçç¨åº¦ã
å¨éä¹æ以è¿ä¹å¤§ï¼å°±æ¯å 为许å¤å ¬å¸å¨ä»¥æ人çé度éç¨Dockerãå¨ä»å¹´7æçå¼æºå¤§ä¼ï¼OSConï¼ä¸ï¼æéå°äºæ©å·²å°æå¡å¨åºç¨ç¨åºä»èææºï¼VMï¼è½¬ç§»å°å®¹å¨çæ æ°ä¼ä¸ãçç¡®ï¼Dockerå ¬å¸ä¸»ç®¡æå¡åæ¯æçå¯æ»è£James Turnbullå¨ä¼ä¸åè¯æï¼å ¶ä¸æä¸å®¶å¤§é¶è¡ä¸ç´å¨ä½¿ç¨Dockerçæµè¯çï¼ç°å·²å¨ç产ç¯å¢ä¸ä½¿ç¨Dockerã对任ä½æ©æææ¯æ¥è¯´ï¼è¿æ çæ¯æ大çå 满èªä¿¡ç举å¨ï¼è¦ç¥éå®å¨å®å ¨è³ä¸çéèçå ä¹é»ææªé»ã
ä¸æ¤åæ¶ï¼Dockerè¿é¡¹å¼æºææ¯ä¸ä» ä» æ¯çº¢å¸½åCanonicalçLinux巨头ç¼éçå® å¿ã微软çä¸æè½¯ä»¶å ¬å¸ä¹å¨ççæ¥æ±Dockerã
é£ä¹ï¼ä¸ºä»ä¹å¤§å®¶é½è¿½æ§å®¹å¨åDockerå¢ï¼James Bottomleyæ¯Parallelså ¬å¸çæå¡å¨èæåé¦å¸ææ¯å®ï¼ä¹æ¯ä¸ä½ç¥åçLinuxå æ ¸å¼å人åãä»åæ解éï¼Hyper-VãKVMåXençèææºç®¡çç¨åºé½âåºäºèæå硬件仿çæºå¶ãè¿æå³çï¼å®ä»¬å¯¹ç³»ç»è¦æ±å¾é«ãâ
ç¶èï¼å®¹å¨å´ä½¿ç¨å ±äº«çæä½ç³»ç»ãè¿æå³çå®ä»¬å¨ä½¿ç¨ç³»ç»èµæºæ¹é¢æ¯èææºç®¡çç¨åºè¦é«æå¾å¤ã容å¨ä¸æ¯å¯¹ç¡¬ä»¶è¿è¡èæåå¤çï¼èæ¯é©»çå¨ååä¸ä¸ªLinuxå®ä¾ä¸ãè¿åè¿æ¥æå³çï¼ä½ å¯ä»¥â丢å¼æ²¡æç¨ç.9%çèææºåå¾ï¼å©ä¸ä¸ä¸ªå°å·§ç®æ´çè¶åå¼å®¹å¨ï¼éé¢å«æä½ çåºç¨ç¨åºï¼âBottomleyå¦æ¯è¯´ã
æ®Bottomley声称ï¼å æ¤ï¼åå©ç»è¿å ¨é¢è°ä¼ç容å¨ç³»ç»ï¼ä½ å°±å¯ä»¥å¨åä¸ç¡¬ä»¶ä¸æ¥ææ°éæ¯ä½¿ç¨XenèææºæKVMèææºå¤åºåå°å åçæå¡å¨åºç¨å®ä¾ã
æ¯ä¸æ¯è§å¾å¬èµ·æ¥å¾ä¸éï¼æ¯ç«ï¼ä½ å¯ä»¥è®©æå¡å¨è¿è¡å¤å¾å¤çåºç¨ç¨åºãé£ä¹ï¼ä¸ºä»ä¹ä¹å没æ人åè¿å¢ï¼å®é ä¸ï¼ä¹åæ人åè¿ã容å¨å ¶å®æ¯ä¸ªæ§æ¦å¿µã
容å¨å¯ä»¥è¿½æº¯å°è³å°å¹´åFreeBSD Jailsãç²éª¨æSolarisä¹æä¸ä¸ªç±»ä¼¼æ¦å¿µï¼å为Zonesï¼Parallelsãè°·æåDockerçå ¬å¸ä¸ç´å¨è´åäºç å诸å¦OpenVZåLXCï¼Linux容å¨ï¼ä¹ç±»çå¼æºé¡¹ç®ï¼æ¨å¨è®©å®¹å¨è¿è¡èµ·æ¥é¡ºç åå®å ¨ã
çç¡®ï¼å¾å°æ人ç¥é容å¨ï¼ä½å¤§å¤æ°äººå¤å¹´æ¥ä¸ç´å¨ä½¿ç¨å®¹å¨ãè°·æå°±æèªå·±çå¼æºå®¹å¨ææ¯lmctfyï¼Let Me Contain That For Youï¼æ为â让æå®¹çº³ä½ çç¨åºâï¼ãåªè¦ä½ 使ç¨è°·æçæ项åè½ï¼æ¯å¦æç´¢ãGmailãGoogle Docksææ è®ºå ¶ä»ä»ä¹ï¼å°±åé äºä¸ä¸ªæ°ç容å¨ã
ç¶èï¼Docker建ç«å¨LXCçåºç¡ä¸ãä¸ä»»ä½å®¹å¨ææ¯ä¸æ ·ï¼å°±è¯¥ç¨åºèè¨ï¼å®æèªå·±çæ件系ç»ãåå¨ç³»ç»ãå¤çå¨åå åçé¨ä»¶ã容å¨ä¸èææºä¹é´çåºå«ä¸»è¦å¨äºï¼èææºç®¡çç¨åºå¯¹æ´ä¸ªè®¾å¤è¿è¡æ½è±¡å¤çï¼è容å¨åªæ¯å¯¹æä½ç³»ç»å æ ¸è¿è¡æ½è±¡å¤çã
è¿åè¿æ¥æå³çï¼èææºç®¡çç¨åºè½å容å¨åä¸äºçä¸ä»¶äºå°±æ¯ï¼ä½¿ç¨ä¸åçæä½ç³»ç»æå æ ¸ãæ以ï¼ä¸¾ä¾è¯´ï¼ä½ å¯ä»¥ä½¿ç¨å¾®è½¯Azureï¼åæ¶è¿è¡Windows Serverçå®ä¾åSUSE Linuxä¼ä¸çº§æå¡å¨çå®ä¾ãè³äºDockerï¼ææ容å¨é½å¿ 须使ç¨åæ ·çæä½ç³»ç»åå æ ¸ã
å¦ä¸æ¹é¢ï¼å¦æä½ åªæ¯æ³è®©å°½å¯è½å¤çæå¡å¨åºç¨å®ä¾å¨å°½å¯è½å°ç硬件ä¸è¿è¡ï¼å¯è½ä¸å¤§å ³å¿è¿è¡å¤ä¸ªæä½ç³»ç»èææºãè¦æ¯åä¸åºç¨ç¨åºçå¤ä¸ªå¯æ¬æ£æ¯ä½ éè¦çï¼é£ä¹ä½ ä¼å欢ä¸å®¹å¨ã
æ¹ç¨Dockerè¿ä¸ä¸¾æªæææ¯å¹´ä¸ºæ°æ®ä¸å¿æäºè®¡ç®æå¡æä¾åèçæ°åä¸ç¾å ççµåå硬件ææ¬ãæ以é¾æªå®ä»¬å¨ä¸çªèå°å°½å¿«éç¨Dockerã
Docker带æ¥äºä¹åææ¯æ没æçå 个æ°ç¹ç¹ã第ä¸æ¯ï¼ä¸ä¹åçæ¹æ³ç¸æ¯ï¼Docker让容å¨é¨ç½²å使ç¨èµ·æ¥æ´å®¹æãæ´å®å ¨ãæ¤å¤ï¼ç±äºDockerä¸å ¶ä»å®¹å¨é¢åçå·¨æè¿è¡äºåä½ï¼å æ¬Canonicalãè°·æã红帽åParallelsï¼å ±åå¼åå ¶å ³é®çå¼æºç»ä»¶libcontainerï¼å®ä¸ºå®¹å¨å¸¦æ¥äºè¿«åéè¦çæ ååã
ä¸æ¤åæ¶ï¼å¹¿å¤§å¼å人åå¯ä»¥ä½¿ç¨Dockerå°è£ ã交ä»åè¿è¡ä»»ä½åºç¨ç¨åºï¼åºç¨ç¨åºæ为轻åçãå¯ç§»æ¤çãèªç»èªè¶³çLXC容å¨ï¼å¯ä»¥å¨ä»»ä½å°æ¹è¿è¡ãæ£å¦Bottomleyåè¯æï¼â容å¨è®©ä½ ç«å³äº«æåºç¨ç¨åºå¯ç§»æ¤æ§ãâ
å¸åºç ç©¶å ¬å¸ Researchçèµæ·±åæå¸Jay Lymanè¡¥å éï¼âä¼ä¸ç»ç»åæ±ä»¥ä¸ç§é«æãæ ååãå¯éå¤çæ¹å¼ï¼è®©åºç¨ç¨åºåå·¥ä½è´è½½æ´æäºç§»æ¤åååï¼èææ¶å¾é¾åå°è¿ç¹ãæ£å¦GitHubéè¿å ±äº«æºä»£ç æ¥ä¿è¿åä½ååæ°é£æ ·ï¼Docker HubãOfficial Reposååä¸æ¯æä¹å¨å¸®å©ä¼å¤ä¼ä¸éè¿æ¹è¿å°è£ ãé¨ç½²å管çåºç¨ç¨åºçæ¹å¼ï¼åºå¯¹è¿ä¸ªé¾é¢ãâ
æåä½å¹¶éæä¸éè¦çï¼Docker容å¨æäºé¨ç½²å°äºç«¯ãæ£å¦Ben Lloyd Pearsonå¨opensource.comä¸åéï¼âDockeréç¨äºä¸ç§ç¹å«çæ¹å¼ï¼ä»¥ä¾¿å¯ä»¥æ´åå°å¤§å¤æ°DevOpsï¼å¼åè¿è¥ï¼åºç¨ç¨åºå½ä¸ï¼å æ¬PuppetãChefãVagrantåAnsibleï¼æè å¯ä»¥ç¬èªä½¿ç¨ï¼ä»¥ç®¡çå¼åç¯å¢ã主è¦åç¹æ¯ï¼å®ç®åäºé常ç±å¦å¤è¿äºåºç¨ç¨åºæ§è¡ç好å¤ä»»å¡ãå ·ä½æ¥è¯´ï¼æäºDockerï¼äººä»¬å°±å¯ä»¥æ建ä¸æ´»å¨æå¡å¨ä¸æ¨¡ä¸æ ·çæ¬å°å¼åç¯å¢ï¼ä»åä¸ä¸ªä¸»æºè¿è¡å¤ä¸ªå¼åç¯å¢ï¼æ¯ä¸ªå¼åç¯å¢æç¬ç¹ç软件ãæä½ç³»ç»åé ç½®ï¼ï¼å¨æ°çæä¸åçæå¡å¨ä¸æµè¯é¡¹ç®ï¼ä»¥å让任ä½äººé½å¯ä»¥å¨è®¾ç½®ä¸æ¨¡ä¸æ ·çæ åµä¸å¤çåä¸é¡¹ç®ï¼æ 论æ¬å°ä¸»æºç¯å¢ææ ·ãâ
ç®èè¨ä¹ï¼Dockerè½ä¸ºä½ åçäºæ å°±æ¯ï¼ç¸æ¯å ¶ä»ææ¯ï¼å®è½è®©æ´å¤æ°éçåºç¨ç¨åºå¨åä¸ç¡¬ä»¶ä¸è¿è¡ï¼å®è®©å¼å人åæäºå¿«éæ建å¯éæ¶è¿è¡ç容å¨ååºç¨ç¨åºï¼å®å¤§å¤§ç®åäºç®¡çåé¨ç½²åºç¨ç¨åºçä»»å¡ãæ»èè¨ä¹ï¼æè½ç解ä½ä¸ºä¸é¡¹ä¼ä¸çº§ææ¯ï¼Docker为ä½ä¸ä¸å蹿红ãæåªæ¯å¸æå®ä¸è´ä¼æï¼å¦åå¤å¤´ä¼æä¸äºå¿§å¿å¿¡å¿¡çCEOåCIOã