如何在一个 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 提供的服务。

我的开源项目

相关推荐
大熊程序猿2 小时前
K8s证书过期
云原生·容器·kubernetes
suweijie7683 小时前
SpringCloudAlibaba | Sentinel从基础到进阶
java·大数据·sentinel
公贵买其鹿4 小时前
List深拷贝后,数据还是被串改
java
摸鱼也很难5 小时前
Docker 镜像加速和配置的分享 && 云服务器搭建beef-xss
运维·docker·容器
xlsw_7 小时前
java全栈day20--Web后端实战(Mybatis基础2)
java·开发语言·mybatis
神仙别闹8 小时前
基于java的改良版超级玛丽小游戏
java
鸠摩智首席音效师8 小时前
Docker 中如何限制CPU和内存的使用 ?
docker·容器
Michaelwubo8 小时前
Docker dockerfile镜像编码 centos7
运维·docker·容器
jingyu飞鸟8 小时前
centos-stream9系统安装docker
linux·docker·centos
黄油饼卷咖喱鸡就味增汤拌孜然羊肉炒饭8 小时前
SpringBoot如何实现缓存预热?
java·spring boot·spring·缓存·程序员