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

对应的配置如下:

; 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, 使用时根据自己实际情况.

fastapi==0.115.0

2.3 Dockerfile构建配置

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

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" ]

构建命令:

docker build -t web:1.0 .

2.4 启动测试

使用 docker-compose 进行测试

services:
web: # web服务
image: web:1.0
container_name: web_test
ports:
- 9001:9001
volumes:
- /etc/localtime:/etc/localtime
restart: always

启动命令:

docker-compose up -d
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

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

调整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

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

docker-compose down
docker-compose up -d

访问 IP:9001

4 参考文档

docker构建supervisor镜像的更多相关文章

  1. 使用docker构建supervisor全步骤

    1.使用docker build 命令基于Dockerfile文件进行构建supervisor镜像,命令:docker build -t supervisor镜像名 Dockerfile文件放置的位置 ...

  2. docker构建自定义镜像

    docker构建自定义镜像 要构建一个镜像,第一步准备所需要的文件,第二步编写Dockerfile文件,比如我现在构建一个java web镜像 第一步:准备java web工程的war包文件(这里假设 ...

  3. Docker构建YApi镜像, Docker安装YApi, Docker部署YApi

    概述 YApi 是高效.易用.功能强大的 api 管理平台,旨在为开发.产品.测试人员提供更优雅的接口管理服务.可以帮助开发者轻松创建.发布.维护 API,YApi 还为用户提供了优秀的交互体验,开发 ...

  4. 用Docker构建Tomcat镜像

    构建tomcat镜像 创建工作目录 [root@elk-node2 tomcat]# mkdir tomcat [root@elk-node2 tomcat]# cd tomcat [root@elk ...

  5. 用Docker构建MySQL镜像

    构建MySQL镜像 本文目的不仅仅是创建一个MySQL的镜像,而是在其基础上再实现启动过程中自动导入数据及数据库用户的权限设置,并且在新创建出来的容器里自动启动MySQL服务接受外部连接,主要是通过D ...

  6. 用Docker构建Nginx镜像

    1构建Nginx镜像 1建立工作目录 [root@localhost ]# mkdir 1nginx [root@localhost 1nginx]# cd 1nginx/ [root@localho ...

  7. Docker构建FastDFS镜像

    https://blog.csdn.net/qq_26440803/article/details/83066132 Dockerfile 所需依赖: fastdfs    libfastcommon ...

  8. Docker 构建私有镜像仓库

    在使用Docker一段时间后,往往会发现手头积累了大量的自定义镜像文件,这些文件通过公有仓库进行管理并不方便,另外有时候只是希望在内部用户之间进行分享,不希望暴露出去.这种情况下,就有必要搭建一个本地 ...

  9. docker构建tomcat镜像

    下载centos镜像 # docker pull daocloud.io/centos:7 [root@localhost ~]# docker pull daocloud.io/centos: : ...

  10. Docker构建ssh镜像

    FROM ubuntu MAINTAINER ggzone xxx@live.com ENV REFRESHED_AT 2015-10-21 RUN apt-get -qqy update & ...

随机推荐

  1. SPIE独立出版。遥感征稿中--2024年遥感与数字地球国际学术会议(RSDE 2024)

    ​ [成都,遥感主题,稳定EI检索]2024年遥感与数字地球国际学术会议(RSDE 2024) 2024 International Conference on Remote Sensing and ...

  2. webpack系列-webpack内置插件ProvidePlugin的应用(定义全局变量,例如vue引入jquery全局使用)

    vue+webpack使用ProvidePlugin插件引入jquery 先看一个实例,webpack+vue引入jquery并全局使用,这儿指通过配置,不是在静态页面使用script标签直接引入jq ...

  3. Angular Material 18+ 高级教程 – CDK Accessibility の ListKeyManager

    介绍 ListKeyManager 的作用是让我们通过 keyboard 去操作 List Items. 一个典型的例子:Menu 有 4 个步骤: tab to menu enter 打开 menu ...

  4. Asp.net core 学习笔记 Image processing (ImageSharp)

    请移步修订版 : ASP.NET Core Library – ImageSharp .net 的生态烂是真的, 很多硬需求都没有人做, 开源的做着做着就闭源了的也很多. 今天说说 image pro ...

  5. 新题速看!2021阿里、腾讯、字节都在问的SQL数据库笔试题及答案都给你整理好啦!

    ​    前  言 2021到了最后一个月份,年后肯定有蛮多小伙伴需要跳槽换工作,但对于年限稍短的软件测试工程师,难免会需要进行笔试,而在笔试中,基本都会碰到一道关于数据库的大题,今天这篇文章呢,就收 ...

  6. 适用于 VitePress 的公告插件开发实记

    前言 笔者维护的 VitePress 博客主题在近1年多的时间里集成了非常多功能,不少用户希望将里面的部分功能分离出来,方便在其它 VitePress 站点也可以独立使用. 其中分离的第一个组件类型的 ...

  7. Web刷题之polarctf靶场(2)

    1.蜜雪冰城吉警店 点开靶场, 发现题目说点到隐藏奶茶(也就是第九杯)就给flag, 但是明显就只有八杯, 猜测大概率考的是前端代码修改 把id=1修改为id=9, 然后回到页面点击原味奶茶即可弹出f ...

  8. 使用Git LFS上传大文件步骤

      1.首先我们要先下载git lfs.链接地址 2.我们需要安装git lfs,但是必须安装到git/bin下面.就是你安装git的时候,那个路径.可以看我的git安装路径: 3.我们可以使用以下步 ...

  9. manim边学边做--无向图

    无向图属于数学中的图论这一学科, 所谓无向图G,就是由顶点集V(非空集合)和边集E(由V中元素构成的无序二元组的集合)组成的图, 可表示为G=(V,E). 在无向图中,边没有方向,即从顶点A到顶点B的 ...

  10. HiT-SR:基于层级Transformer的超分辨率,计算高效且能提取长距离关系 | ECCV'24

    Transformer在计算机视觉任务中表现出了令人鼓舞的性能,包括图像超分辨率(SR).然而,流行的基于Transformer的SR方法通常采用具有二次计算复杂度的窗口自注意力机制,导致固定的小窗口 ...