如何在一个 Docker 容器中运行多个进程 ?

在容器化的世界里,Docker 彻底改变了开发人员构建、发布和运行应用程序的方式。Docker 容器封装了运行应用程序所需的所有依赖项,使其易于跨不同环境一致地部署。然而,在单个 Docker 容器中管理多个进程可能具有挑战性,这就是 Supervisor 发挥作用的地方。

什么是 Supervisor ?

Supervisor 是一个 client/server 系统,允许其用户监视和控制类 Unix 操作系统上的多个进程。特别是

对于管理多个需要同时运行的复杂应用程序特别有用。Supervisor 提供了一种强大而可靠的方式确保进程的启动、停止和重启。

如何管理多进程 ?

Docker 容器被设计为运行单个进程。虽然可以使用 systemd 或 init 等工具在容器中运行多个进程,但这违背了 Docker 的基本设计原则。此外,手动管理这些流程可能很麻烦,而且容易出错。

一种常见方法是在 Docker 容器中运行一个类似 Supervisor 的进程管理器。Supervisor 作为看门狗,确保所有必要的进程都在运行,并在它们失败时重新启动它们。

如何集成 Docker 和 Supervisor ?

将 Supervisor 与 Docker 集成很简单。你可以直接在 Docker 容器中安装 Supervisor,也可以创建一个单独的容器来运行 Supervisor。下面是一个如何在 Docker 中使用 Supervisor 的基本步骤。

(1) 创建 Supervisor 配置文件

定义 supervisord.conf 配置文件,指定要管理的进程。文件放在 Supervisor 可以在容器中访问的位置。

(2) 安装 Supervisor

如果你要创建一个单独的 Supervisor 容器,你需要将 Supervisor 作为 Dockerfile 的一部分来安装。您可以使用 apt 或 yum 之类的包管理器来安装 Supervisor 和任何依赖项。

(3) 启动 Supervisor

安装 Supervisor 之后,您可以手动启动它,也可以将其作为容器启动过程的一部分启动。Supervisor 将读取配置文件并开始监视指定的进程。

(4) 运行应用程序

最后,在 Docker 容器中启动应用程序。Supervisor 将确保所有必要的程序都在运行,并处理发生的故障。

实践示例

(1) 克隆存储库到您的本地机器

复制代码
git clone https://github.com/tecrahul/docker-supervisor.git

(2) 切换到克隆的存储库目录

复制代码
cd docker-supervisor

(3) 构建 Docker 镜像

复制代码
docker build -t docker-supervisor .

(4) 运行 Docker 容器

复制代码
docker run -d -p 80:80 docker-supervisor

现在,Docker 容器已经运行, Apache 和 PHP-FPM 的运行由 Supervisor 管理。您可以在浏览器中访问 http://localhost 使用 Apache Web 提供的服务。

我的开源项目

相关推荐
吃饱了得干活7 小时前
Spring Cloud Gateway 微服务网关:路由、断言、过滤器
java·spring cloud
lwx572809 小时前
探秘InnoDB:搞懂它的内存、线程、磁盘与日志刷盘策略
java·后端
Flynt10 小时前
从Spring Boot 4.0升到4.1,我在Maven和gRPC上栽了跟头
java·spring boot·后端
plainGeekDev11 小时前
Activity 间传值 → Navigation 参数
android·java·kotlin
plainGeekDev11 小时前
onActivityResult → ActivityResult API
android·java·kotlin
Sunia11 小时前
《AgentX 专栏》10-生产部署:3台2C4G云服务器把企业级Agent真正跑起来的完整方案
java·架构
ZhengEnCi12 小时前
J7A-高级Java工程师面试三道灵魂拷问-深度广度与工程素养的终极检验
java·后端
狼爷1 天前
吃透 Java Function 接口,搞定 99% 的 Stream 场景
java·函数式编程
祎雪双十Gy1 天前
从 DataX 的配置加载说起:我用 FastJson2 做了一个轻量级动态配置管理库
java·后端
小锋java12341 天前
分享一套锋哥原创的SpringBoot4+Vue3宠物领养网站系统
java