docker构建supervisor镜像

1 介绍

记录使用docker 构建包含 supervior 的镜像,

supervisor: 是一个管理和监控进程的程序,可以方便的通过配置文件来管理我们的任务脚本

将supervisor构建到系统镜像中,启动时默认启动 supervisor进程,容器可以正常运行,然后通过 ,supervisor 去启动,停止,重启我们的 任务脚本,例如, flask, fastapi 等服务启动脚本

1.1 背景

构建一个 fastapi web 服务镜像,方便业务上线.基础需求:

  1. 容器中没有 fastapi web 服务也可以正常启动运行
  2. web 服务通过配置文件可插拔加载和分离

2 具体流程

2.1 准备supervisor默认启动的配置文件

使用默认的配置文件可以 默认开启 supervisor 的 http 服务器管理访问功能,即配置块 inet_http_server

对应的配置如下:

supervisord.conf 复制代码
; supervisor config file

[unix_http_server]
file=/var/run/supervisor.sock   ; (the path to the socket file)
chmod=0700                       ; sockef file mode (default 0700)

[supervisord]
nodaemon=true
logfile=/var/log/supervisor/supervisord.log ; (main log file;default $CWD/supervisord.log)
pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
childlogdir=/var/log/supervisor            ; ('AUTO' child log dir, default $TEMP)

; the below section must remain in the config file for RPC
; (supervisorctl/web interface) to work, additional interfaces may be
; added by defining them in separate rpcinterface: sections
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

# [supervisorctl]
# serverurl=unix:///var/run/supervisor.sock ; use a unix:// URL  for a unix socket

; The [include] section can just contain the "files" setting.  This
; setting can list multiple files (separated by whitespace or
; newlines).  It can also contain wildcards.  The filenames are
; interpreted as relative to this file.  Included files *cannot*
; include files themselves.

[include]
files = /etc/supervisor/conf.d/*.conf


[inet_http_server]         ; inet (TCP) server disabled by default
port=*:9001        ; (ip_address:port specifier, *:port for all iface)
username=admin              ; (default is no username (open server))
password=admin.123              ; (default is no password (open server))

2.2 web服务的pip包安装配置文件

准备 requirements.txt, 使用时根据自己实际情况.

requirements.txt 复制代码
fastapi==0.115.0

2.3 Dockerfile构建配置

这里我使用 python:3.10-slim 作为基础镜像构建, supervisor的启动命令作为入口 CMD

Dockerfile 复制代码
FROM python:3.10-slim 

MAINTAINER faron
WORKDIR /usr/src/app

RUN mkdir -p /var/log/supervisor \
    && apt-get update && apt-get install -y cron autoconf automake libtool vim procps supervisor \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* 

COPY requirements.txt ./
COPY supervisord.conf /etc/supervisor/supervisord.conf
RUN pip install -i https://mirrors.aliyun.com/pypi/simple --no-cache-dir -r requirements.txt \
    && rm -rf requirements.txt

CMD ["/usr/bin/supervisord","-c","/etc/supervisor/supervisord.conf" ]

构建命令:

sh 复制代码
docker build -t web:1.0 .

2.4 启动测试

使用 docker-compose 进行测试

docker-compose.yml 复制代码
services:
  web: # web服务
    image: web:1.0
    container_name: web_test
    ports:
      - 9001:9001
    volumes:
      - /etc/localtime:/etc/localtime
    restart: always

启动命令:

sh 复制代码
docker-compose up -d
console 复制代码
NAME       IMAGE     COMMAND                  SERVICE   CREATED         STATUS         PORTS
web_test   web:1.0   "/usr/bin/supervisor..."   web       8 seconds ago   Up 7 seconds   0.0.0.0:9001->9001/tcp

查看效果 : 访问 IP:9001 ,账户名密码: admin admin.123

账户名密码在 supervisord.conf 文件的 inet_http_server 下;

3 使用supervisor配置启动服务

这里以一个 实时查看文本文件的需求服务为示例,介绍如何通过 supervisor 管理服务;

3.1 创建 服务配置文件

实时查看某个文件的服务管理脚本: test.conf

sh 复制代码
[program:test]
command=tail -n 20 -f /var/log/supervisor/supervisord.log
autostart=true
startsecs=3
autorestart=true

调整docker-compose.yml文件,将启动配置文件映射进去

docker-compose.yml 复制代码
services:
  web: # web服务
    image: web:1.0
    container_name: web_test
    ports:
      - 9001:9001
    volumes:
      - /etc/localtime:/etc/localtime
      - ./test.conf:/etc/supervisor/conf.d/test.conf  # 映射启动配置文件
    restart: always

启动新的容器服务,注意历史的关闭

sh 复制代码
docker-compose down
docker-compose up -d

访问 IP:9001

4 参考文档

相关推荐
zyu6713 小时前
03-Docker存储和网络
网络·docker·容器
牛奔13 小时前
Docker Compose 两种安装与使用方式详解(适用于 Docker 19.03 版本)
运维·docker·云原生·容器·eureka
青州从事52119 小时前
20260108【mac】【brew】【docker】安装
macos·docker·eureka
菜鸟思维20 小时前
优化NextJs 项目的Docker 镜像 从3.62G 优化到 296.85M
docker
怣疯knight21 小时前
Docker Desktop 4.55.0版本安装成功教程
windows·docker
东方佑21 小时前
使用Docker Compose一键部署OnlyOffice:完整指南与配置解析
运维·docker·容器
赵文宇(温玉)1 天前
Docker的价值、特点、创新与关键技术
运维·docker·容器
Coder码匠1 天前
Docker Compose 部署 Spring Boot 应用完全指南
spring boot·docker·容器
可爱又迷人的反派角色“yang”1 天前
k8s(二)
linux·运维·docker·云原生·容器·kubernetes·云计算
计算机小手1 天前
内网穿透系列十六:使用 wg-easy 快速搭建基于 wireguard 的虚拟局域网,支持Docker部署
经验分享·网络协议·docker·开源软件