)
文档/教程【免费下载链接】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 学习路线中第 46 天的内容围绕 Docker Compose 这一多容器编排工具展开。你将学会用一份docker-compose.yml文件和一个docker-compose up -d命令在同一台机器上同时拉起 WordPress 前端与 MySQL 数据库两个容器理解 volumes 持久化、环境变量注入、服务依赖与清理回收的完整生命周期最后通过仓库内附带的 ELKElasticsearch Logstash Kibana单节点示例体验用相同套路编排三容器日志分析栈。读完本文你就能独立编写并运行自己的多容器应用。Docker Compose 解决了什么问题单个容器运行起来非常简单只要有一个自包含的 image一条docker run命令就能搞定单个用例。但当你需要把多个应用组合在一起时事情就变得有趣了——例如一个网站前端需要一个后端数据库。把所有东西塞进同一个容器虽然可行但更合理、更高效的做法是数据库拥有自己独立的容器。Docker Compose 正是为此而生它是一种工具允许你在多个容器之上运行更复杂的应用核心收益是——用一个文件定义整个应用栈用一条命令把整个应用启动起来。本文的示例来源于 Docker 官方 QuickStart 教程Quickstart: Compose and WordPress配套文件已存放在仓库的 2022/Days/Containers/my_wordpress/docker-compose.yaml。在本示例中你将完成以下目标使用 Docker Compose 同时拉起 WordPress 和独立的 MySQL 实例编写名为docker-compose.yml仓库中为docker-compose.yaml的 YAML 文件构建启动整个项目通过浏览器完成 WordPress 的配置掌握关闭与清理含 volumes 清理的正确姿势。安装与验证 Docker ComposeDocker Compose 是一个独立工具。如果你使用的是 macOS 或 WindowsDocker Desktop 安装包中已经内置了 Compose如果你打算在 Windows Server 或 Linux 服务器上运行容器则需要单独安装 Docker Compose。安装完成后在终端里直接输入docker-compose即可确认工具是否就绪会输出类似下面的版本与用法信息docker-compose说明文中所有命令均为docker-composeV1 语法。使用 Docker Compose V2docker compose的环境同样适用只需把连字符换成空格即可。认识 docker-compose.yml 与 YAMLYAML 快速入门YAML 几乎可以单独开一节课因为你在很多地方都会遇到它。简单概括YAML 是一种对开发人员友好的、适用于所有编程语言的数据序列化语言。它通常用于配置文件以及一些需要存储或传输数据的应用场景。你可能见过 XML 承担同样的角色而 YAML 用更精简的语法覆盖了同样的用途。YAMLYAML Aint Markup Language是近年来热度稳步上升的序列化语言其对象序列化能力使其成为 JSON 的可行替代品。缩写 YAML 原本是 Yet Another Markup Language又一种标记语言维护者后来改名为 YAML Aint Markup Language以强调其面向数据data-oriented的特性。docker-compose.yml 的核心结构docker-compose.yml是一份配置文件描述了我们希望在一台系统上部署多个容器时的目标状态。下面是完整内容来自仓库 2022/Days/Containers/my_wordpress/docker-compose.yaml与官方教程一致version: 3.9 services: db: image: mysql:5.7 volumes: - db_data:/var/lib/mysql restart: always environment: MYSQL_ROOT_PASSWORD: somewordpress MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: wordpress wordpress: depends_on: - db image: wordpress:latest volumes: - wordpress_data:/var/www/html ports: - 8000:80 restart: always environment: WORDPRESS_DB_HOST: db WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: wordpress WORDPRESS_DB_NAME: wordpress volumes: db_data: {} wordpress_data: {}逐段解读这份配置version: 3.9声明 Compose 文件格式的版本决定可用的指令集与行为。services文件的主体定义每个容器服务。本例有db与wordpress两个服务。image每个服务都通过 image 加版本 tag 指定镜像来源如mysql:5.7、wordpress:latest。volumes与之前只用无状态容器的入门示例不同这里为配置引入了状态——创建命名卷让数据可以持久化。db_data:/var/lib/mysql把 MySQL 的数据目录挂到卷上wordpress_data:/var/www/html挂载 WordPress 的站点文件。environment注入环境变量用户名、密码等。MySQL 侧用MYSQL_*初始化数据库WordPress 侧用WORDPRESS_DB_*告诉应用去连接db服务。ports8000:80把容器内 WordPress 的 80 端口映射到宿主机的 8000 端口。restart: always容器退出后自动重启。depends_on声明服务依赖wordpress先于db启动。顶层volumes声明db_data与wordpress_data两个命名卷。这些配置文件可以变得非常复杂但 YAML 的简洁语法让整体面貌保持清晰、可读。构建启动项目回到终端进入存放docker-compose.yml的目录仓库中即my_wordpress目录然后执行docker-compose up -d该命令会开始拉取所需镜像并拉起你的多容器应用。-d表示detached mode分离模式即命令在后台运行不会阻塞终端。从输出可以看到 Compose 自动完成了以下动作拉取mysql:5.7、wordpress:latest及其依赖镜像创建默认网络my_wordpress_default创建数据卷my_wordpress_wordpress_data与my_wordpress_db_data依次启动容器my_wordpress-db-1与my_wordpress-wordpress-1。接着执行docker ps验证容器状态docker ps可以看到有两个容器在运行一个是基于wordpress:latest的 WordPress 容器映射 8000 端口另一个是基于mysql:5.7的数据库容器。通过浏览器配置 WordPress打开浏览器访问http://localhost:8000会看到 WordPress 的安装设置页面。按向导完成站点配置语言、站点标题、管理员账号等后即可进入 WordPress 管理后台Dashboard开始构建自己的网站。完成设置后重新访问http://localhost:8000会看到一个默认主题的简单站点标题为 90DaysOfDevOps并带有一篇示例文章。在做出任何改动之前打开 Docker Desktop 并进入Volumes标签页可以看到两个与容器关联的卷一个属于 WordPress一个属于数据库。接下来可以做两个真实操作来验证持久化更换主题在后台把当前主题默认 Twenty Twenty-Two切换为 Twenty Twenty发布新文章在后台添加一篇新文章并发布。完成这两步后站点首页会展示新主题与新文章。此时数据已经写入了wordpress_data卷这正是稍后验证持久化的关键素材。清理还是不清理数据持久化的验证docker-compose down删容器留卷执行docker-compose down该命令会停止并删除容器但保留 volumes。在 Docker Desktop 的 Volumes 标签页中可以确认两个卷依然存在。然后重新启动应用docker-compose up -d再次访问http://localhost:8000你会发现新文章和主题更换都原封不动——数据持久化生效了。因为卷还在容器重建后挂载的是同一份数据。docker-compose down --volumes连卷一起删如果想连容器带卷一起清掉执行docker-compose down --volumes这会一并销毁 volumes。之后再执行docker-compose up -d应用会重新启动但由于镜像已经缓存在本地系统中无需再从 Docker Hub 重新拉取启动速度会更快不过数据库和站点数据是全新的——卷被删除意味着之前的数据不复存在。Docker Compose 与 Kubernetes边界在哪里刚接触 docker-compose 时很容易困惑它和 Kubernetes 这类容器编排Container Orchestration工具是什么关系答案在于作用域本文所有演示都聚焦于单台主机——WordPress 和 DB 运行在本地桌面机器上。我们没有多台虚拟机、没有多台物理机也无法方便地对应用需求进行弹性伸缩scale up/down。这正是 Docker Compose 的定位单机多容器编排。当需要跨多台机器部署、自动伸缩、自愈等能力时才轮到 Kubernetes 登场。本学习路线的下一部分将进入 Kubernetes不过在此之前还有几天容器专题的内容。进阶示例用 Compose 一键拉起 ELK 单节点栈docker-compose 的价值在于多个集成的样例复用。仓库中附带了一个来自 Awesome-Compose 的经典示例可部署单节点 Elasticsearch、Logstash、KibanaELK日志分析栈配套文件位于 2022/Days/Containers/elasticsearch-logstash-kibana/ 目录。进入该目录后同样只需一条命令docker-compose up -d仓库中的 docker-compose.yml 展示了比 WordPress 示例更丰富的 Compose 特性container_name显式指定容器名es、log、kib便于识别healthcheck为 Elasticsearch 配置健康检查通过curl localhost:9200/_cluster/health探测集群状态networks自定义 bridge 网络elastic三个服务加入同一网络command为 Logstash 指定启动命令加载挂载的管道配置 logstash-nginx.config从/home/nginx.log读取 nginx JSON 日志经 json、geoip、useragent 过滤后写入 Elasticsearch 的nginx索引同时输出到 stdout 便于调试多端口映射Logstash 暴露 5000/5044/9600Kibana 暴露 5601Elasticsearch 暴露 9200/9300。启动后用docker ps检查三个容器docker ps三个容器全部运行其中 Elasticsearch 状态显示Up ... (healthy)说明健康检查通过。随后可以在浏览器中分别访问各服务的端口Elasticsearchhttp://localhost:9200Logstashhttp://localhost:9600Kibanahttp://localhost:5601/api/status需要移除所有容器时同样使用docker-compose down小结Docker Compose 用一份 YAML 文件 一条命令解决单机多容器的应用编排问题version、services、image、volumes、environment、ports、restart、depends_on是入门必会的核心指令docker-compose up -d启动、docker-compose down清理容器保留数据、docker-compose down --volumes连数据一起清除volumes 让容器重建后数据依然存在是状态持久化的关键Docker Compose 定位是单主机编排跨主机、弹性伸缩等能力属于 Kubernetes 的范畴仓库 2022/Days/Containers/ 目录下保留了本文两个示例的完整可运行文件WordPress MySQL 与 ELK 单节点可直接 clone 到本地复现作为进一步学习 Compose 的起点。赞分享文档/教程【免费下载链接】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用 Docker Compose 一键编排 WordPress MySQL 与 ELK 多容器应用Day 46 实战指南90DaysOfDevOps用 Docker Compose 一键编排 WordPress MySQL 与 ELK 多容器应用Day 46 实战指南文档/教程90DaysOfDevOps 第 46 天用 Docker Compose 编排多容器应用WordPress MySQL 实战90DaysOfDevOps 第 46 天用 Docker Compose 编排多容器应用WordPress MySQL 实战 本文是 90DaysO文档/教程90DaysOfDevOps 第 46 天用 Docker Compose 一键编排多容器应用WordPress MySQL 实战90DaysOfDevOps 第 46 天用 Docker Compose 一键编排多容器应用WordPress MySQL 实战 本指南是 90Da文档/教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考