文档/教程【免费下载链接】90DaysOfDevOpsThis repository started out as a learning in public project for myself and has now become a structured learning map for many in the community. We have 3 years under our belt covering all things DevOps, including Principles, Processes, Tooling and Use Cases surrounding this vast topic.项目地址https://gitcode.com/gh_mirrors/90/90DaysOfDevOps点击查看免费下载本篇是 90DaysOfDevOps 挑战进入容器Containers章节的开篇。作为整个章节的大图景Big Picture导读它回答三个问题为什么我们需要另一种运行应用的方式、为什么容器技术在近十年才爆发、以及容器container与镜像image到底是什么。读完本篇你将能站在架构层面说清构建、运输、部署、扩展build / ship / deploy / scale这条容器主线并为后续 Docker 动手实操仓库中 day43.md、day44.md 等章节建立扎实的概念基础。为什么需要另一种运行应用的方式第一个要回答的问题是为什么我们需要用另一种方式来运行软件或应用答案很简单——选择本身就很有价值。今天我们可以用多种形态来运行应用物理硬件在裸机上加装操作系统单台机器上部署单个应用虚拟机 / 云端 IaaS 实例应用运行在虚拟机中再与同样跑在虚拟机里的数据库集成或直接使用公有云的 PaaS 服务容器应用以容器形态运行。以上方式没有绝对的对错它们各有存在的理由而且哪一种都不会消失。网上有很多容器 vs 虚拟机的争论但在 90DaysOfDevOps 看来这根本不该成为争论——它们更像苹果 vs 梨的比喻两者都是水果都是运行应用的方式但并不是同一种东西。如果你正要从零开始开发一个应用作者的建议是偏向容器原因涉及后续章节会展开讨论的效率、速度与体积。但这也有代价如果对容器一无所知就需要经历一个学习曲线去理解为什么并进入容器思维如果你已经有既定的应用开发方式、且不在绿地greenfield环境中那么在考虑容器之前可能要先解决不少历史遗留的痛点。同时我们面对的现实是下载同一款软件时有众多操作系统版本可选每套操作系统又有各自专属的安装指令。正因为如此最近越来越多的软件厂商开始发布基于容器的版本——过去需要完整服务器 OS、虚拟机、物理机或云实例才能运行的应用如今有了容器化版本这等于把容器乃至 Kubernetes 的世界向所有人开放而不再局限于应用开发者。为什么容器技术近十年才爆发容器技术其实已经存在了几十年那为什么最近十年尤其是最近五年才变得如此普及答案的关键在于分发——更准确地说是容器 镜像这套组合如何分发软件。如果我们只有容器技术本身那么在软件管理上遇到的大部分老问题依然存在。把 Docker 当作一个工具来看它之所以能火起来核心原因是镜像image生态镜像容易查找、容易使用能轻松拉到你的系统上并快速跑起来。整个生态保持了高度的一致性——无论是 MongoDB 还是 Node.js把它们拉起来运行的过程完全相同停止它们的过程也相同。所有老问题虽然依然存在但当好用的容器技术与好用的镜像技术结合在一起我们就拥有了一整套工具来应对这些不同的挑战。软件分发的老大难21 个问题以下是传统方式下管理一份软件要面对的一系列问题我们首先要在互联网上查找软件然后要下载这个软件这个软件来源是否可信是否需要许可证需要哪一个许可证它是否兼容不同的平台需要什么包二进制文件可执行文件还是包管理工具我们如何配置这个软件依赖怎么办下载包是否已经包含了全部依赖还是需要另行安装是否存在依赖的依赖如何启动应用如何停止应用它会自动重启吗它会随系统开机启动吗是否存在资源冲突是否存在库冲突是否存在端口冲突软件安全吗软件如何更新如何卸载软件这 21 个问题可以归纳为软件复杂度的三个领域而容器与镜像恰好在这三个领域各有侧重分发Distribution安装Installation运维Operation查找Find安装Install启动Start下载Download配置Configuration安全Security许可License卸载Uninstall端口Ports包Package依赖Dependencies资源冲突Resource Conflicts信任Trust平台Platform自动重启Auto-Restart查找Find库Libraries更新Updates宏观来看可以把安装与运维视为同一类问题镜像从分发distribution的角度帮我们解决问题而容器负责处理安装与运维installation operations。这就是镜像 容器组合能流行的根本原因。集装箱类比从货轮集装箱到软件容器谈论软件开发中的容器时你经常会看到航运集装箱的类比——标准集装箱被装上大型货轮跨越大洋运输各种货物。这与我们的容器主题有什么关系想想软件开发者写出的代码如何把这份代码从一台机器搬运到另一台机器航运集装箱解决了货物标准化装箱、任意船舶/码头通用的问题软件容器则解决了代码连同运行环境标准化封装、任意机器一致运行的问题。这个类比贯穿整个章节也是理解镜像与容器关系的最直观入口。传统部署的依赖冲突困境把前面的分发、安装、运维问题放到一个具体的环境场景里看我们有一套硬件和操作系统要在其上运行多个应用程序。例如Node.js 需要某些依赖和特定库随后想装 MySQL它又需要自己的一组库和依赖每个软件应用都有各自的库与依赖清单。幸运的话这些应用之间可能不会发生库或依赖互相冲突但应用越多冲突的风险就越高。而且问题不只出现在第一次部署——当软件更新时同样可能重新引入这些冲突。这正是传统共享操作系统部署模式的固有脆弱性。容器化架构build / ship / deploy / scale容器正是为解决上述冲突而生。借助容器你可以轻松且独立地完成应用的构建build、运输ship、部署deploy和扩展scale。看一下整体架构底层是硬件和操作系统之上是容器引擎container engine——例如后续章节将详细讲解的 Docker。容器引擎负责创建容器把库和依赖随应用一并打包。因此你可以把这个容器无缝地从一台机器搬到另一台机器无需担心底层库和依赖因为应用运行所需的一切都已封装在容器里——这正是一次构建处处运行得以成立的原因。这一架构在 90DaysOfDevOps 仓库中也有真实的配套实例可供参考例如容器章节下的 Dockerfile# 使用官方 Ubuntu 18.04 作为基础镜像 FROM ubuntu:18.04 # 更新系统软件包 RUN apt-get update apt-get upgrade -y # 创建普通用户 basicuseruid/gid 1000并以非 root 身份运行 RUN groupadd -g 1000 basicuser useradd -r -u 1000 -g basicuser basicuser USER basicuser这个 Dockerfile 完整演示了镜像即打包单元的思想基础镜像ubuntu:18.04提供运行时与系统工具随后通过指令叠加依赖apt 包、固化配置用户与权限。镜像构建完成后即可作为容器被搬运、部署到任何装有容器引擎的机器上。容器的优势归纳起来容器的优势可以列出如下几点依赖封装与隔离容器把所有依赖打包进容器内部并彼此隔离易于管理容器的管理操作简单统一可移植可以从一个系统迁移到另一个系统免重复配置容器把软件打包好可轻松运输无需重复配置易于扩展容器天生适合横向扩展。在扩展方面你可以对相互独立的容器进行伸缩再借助负载均衡器load balancer或服务网格来拆分流量从而对应用做水平横向扩展。容器为应用管理带来了很高的灵活性与便利性。什么是容器我们在电脑上运行的应用——比如你现在用来阅读本文的浏览器或 VS Code——都是以**进程process**的形式运行的。笔记本电脑或服务器上通常会同时运行多个进程当你点击某个应用图标就启动了一个应用进程有些应用则是纯粹在后台运行的服务操作系统里充满了这类提供用户体验的后台服务。应用图标其实是指向文件系统中某个可执行文件的链接操作系统随后把这个可执行文件加载进内存。有趣的是在讨论进程时这个可执行文件有时也被称为镜像image——这正是镜像一词最早的含义来源。由此给出容器定义的第一个核心表述容器就是进程。更正式地说容器是一个标准化的软件单元它把代码及其所有依赖打包在一起使应用能够快速、可靠地在不同的计算环境之间运行。容器化软件无论底层基础设施是什么运行结果始终一致容器把软件与运行环境隔离开来确保开发development与预发布staging等不同环境之间表现统一。这与我们在前面讨论的容器 镜像组合解决软件管理难题一脉相承。什么是镜像与容器紧密相伴的另一个概念是镜像容器镜像是一个轻量、独立、可执行的软件包包含运行应用所需的一切代码、运行时、系统工具、系统库与设置。容器镜像在运行时变成容器。也就是说镜像解决分发问题它是可移植、可共享的软件包容器解决安装与运维问题它是镜像运行起来后的活动实体。镜像仓库中存放的是可复制的镜像docker run之类命令把镜像实例化为运行中的容器——这一机制也解释了为什么镜像生态是整个容器世界得以流行的基石。仓库实战佐证这些概念如何在真实项目中落地概念之外90DaysOfDevOps 仓库的 Containers 目录提供了与本章理论直接对应的实战素材多容器编排——WordPress 站点仓库中的 docker-compose.yaml 用 Compose 同时编排 MySQL 5.7数据库容器通过volumes持久化数据、environment注入密码配置与 WordPress应用容器ports: 8000:80做端口映射depends_on声明启动依赖。这正是镜像负责分发、容器负责安装运维的具象化一个文件、一条命令即可拉起整套应用。多容器编排——ELK 日志栈docker-compose.yml 展示了 Elasticsearch、Logstash、Kibana 三个容器如何通过自定义 bridge 网络互通配合 logstash-nginx.config 管道配置完成日志摄入与解析。三个容器各自封装依赖、独立发布端口正是可独立扩展、用服务拆分流量的容器优势的真实写照。下一个主题——Docker 全家桶容器大图景之后紧接着的 day43.md 将展开讲解 Docker Enginedockerd 守护进程 API CLI、Docker DesktopWindows/macOS 桌面环境可借助 WSL2 与 Hyper-V、Docker Compose多容器编排、Docker Hub镜像仓库与 Dockerfile镜像构建说明书。届时还会实际动手安装 Docker Desktop并开始创建本节提到的容器。延伸学习与下一步本篇作为容器章节的大图景确立了三条主线运行方式的多样性物理机 / 虚拟机 / 容器各司其职、容器 镜像的生态价值镜像解决分发、容器解决安装运维、核心概念定义容器是进程、镜像是运行时的软件包。后续章节将沿着 Docker 这条主线把概念落到命令行与真实部署中。接下来请继续阅读 第 43 天什么是 Docker 与安装了解 Docker 引擎架构与 Docker Desktop 的安装步骤随后即可在 第 44 天 中亲手运行docker run hello-world、docker run -it ubuntu bash等命令体验镜像如何变成运行中的容器。赞分享文档/教程【免费下载链接】90DaysOfDevOpsThis repository started out as a learning in public project for myself and has now become a structured learning map for many in the community. We have 3 years under our belt covering all things DevOps, including Principles, Processes, Tooling and Use Cases surrounding this vast topic.项目地址https://gitcode.com/gh_mirrors/90/90DaysOfDevOps点击查看免费下载相关推荐90DaysOfDevOps 第49天Kubernetes 全景图——从容器编排概念到集群核心组件90DaysOfDevOps 第49天Kubernetes 全景图——从容器编排概念到集群核心组件 导读 本文是 90DaysOfDevOps 学习系列中 K文档/教程90DaysOfDevOps Day 42容器大图——建立容器、镜像与容器化架构的完整心智模型90DaysOfDevOps Day 42容器大图——建立容器、镜像与容器化架构的完整心智模型 本文是 90DaysOfDevOps 挑战第 42 天容文档/教程OCI镜像格式入门5分钟理解容器镜像的核心概念OCI镜像格式入门5分钟理解容器镜像的核心概念 容器技术已经成为现代软件开发和部署的标配而OCI镜像格式正是这一技术浪潮中的标准化基石。本文将带您快速了解O云原生存储创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考