docker容器化python后端

前言

昨日更新了一篇文章写supervisor的简单使用,今日正好用supervisor搞一搞容器化,刚好也发现了昨日文章中对于pip安装supervisor的一些描述错误,已经修正。

本文主要是一个docker容器化python后端(fastapi框架)并在容器中使用supervisor管理python进程的例子。

前提

本文假设你已安装有docker环境

Python初始镜像选择

https://hub.docker.com/_/python中找到Tags标签页,一般找到对应版本的对应alpine镜像

例如这里我们是3.9.7的python版本

最终可以找到python:3.9.7-alpine3.14镜像

编写Dockerfile文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
FROM python:3.9.7-alpine3.13
# 把当前目录下(.)的python项目文件都扔到容器的/opt/Lancet 目录
COPY . /opt/Lancet
# 切换工作目录
WORKDIR /opt/Lancet
# 更新pip
RUN pip install --upgrade pip
# 安装依赖
RUN pip install -r requirements.txt

# supervisor --supervisor已经在上面安装依赖时安装
# 生成主配置
RUN /usr/local/bin/echo_supervisord_conf > /etc/supervisord.conf
# 创建子配置目录
RUN mkdir -p /etc/supervisord.d
# 配置主配置的子配置路径相关
RUN echo "[include]" >> /etc/supervisord.conf
RUN echo "files = supervisord.d/*.ini" >> /etc/supervisord.conf
# 软链接把当前目录下已经准备好的 子配置文件,放到刚刚配置的子配置目录下
RUN ln -s /opt/Lancet/supervisor/lancet.ini /etc/supervisord.d/lancet.ini
# 为子配置中描述的日志目录 创建目录
RUN mkdir -p /var/log/supervisor/lancet
# port 声明端口
EXPOSE 8000

# start 启动参数 先启动supervisor && 启动python项目 && 让docker容器持续运行
CMD ["sh","-c","supervisord -c /etc/supervisord.conf && supervisorctl start lancet && tail -f /dev/null"]

关于lancet.ini 详见上一文

构建镜像

1
2
# tag就是构建出来的镜像名
docker build --tag lancet:latest ./

使用镜像

1
docker run -itd --name lancet  -p 18801:8000 lancet

结束

这个例子比较简单,但大致也都有提到。

主要就是由初始镜像一步步执行命令后变成你所需的镜像,这就是简单的容器化过程。

docker容器化python后端

https://blog.rui.plus/2021/2021-12-24/

作者

Rui plus

发布于

2021-12-24

更新于

2021-12-24

许可协议

评论