0%

mtools-docker

打包项目到docker中便于部署

注意事项

1.不要使用office软件提供的功能,例如ppt自带的ppt转pdf功能,这样不好部署到docker中。

2.注意部署环境,例如dlib库需要cmake工具来构建,而cmake的安装有多种方式,例如visual studio,例如apt-get,请使用apt-get等类似的安装方式,并且放到dockerfile中。(例如python安装dlib无法使用pip安装的cmake,需要visual studio的camke,考虑到docker部署,则需要单独使用apt-get安装对应的依赖。)

3.注意端口别被占用,脚本文件只会关闭container,如果端口不是container占用,则需要释放端口。

auto-deploy.bat/auto-deploy.sh

自动部署脚本auto-deploy.bat

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@echo off
echo Pulling Docker image...
docker pull python:3.10-slim-bookworm

echo Building Docker image...
docker build -t tool-app .

echo Stopping existing container...
docker stop tool-app-container 2>nul
docker rm tool-app-container 2>nul

echo Starting new container...
docker run -d -p 15000:15000 --name tool-app-container tool-app

echo Done.
pause

auto-deploy.sh

1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/bash
docker pull python:3.10-slim-bookworm

# 构建Docker镜像
docker build -t tool-app .

# 停止现有的容器
docker stop tool-app-container || true
docker rm tool-app-container || true

# 启动新的容器
docker run -d -p 15000:15000 tool-app

单独使用docker pull是因为dockerfile执行docker pull会报超时,即使换源也会超时,所以先单独把镜像docker pull下来,这样dockerfile执行时就不会在报错了。

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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
FROM python:3.10-slim-bookworm

RUN mkdir /app

WORKDIR /app

# 设置镜像
RUN echo "deb https://mirrors.aliyun.com/debian/ bookworm main non-free contrib" > /etc/apt/sources.list \
&& echo "deb-src https://mirrors.aliyun.com/debian/ bookworm main non-free contrib" >> /etc/apt/sources.list

# 安装必要的系统依赖
RUN apt-get update -o Acquire::http::Max-Parallel-Connections=10 \
&& apt-get install -y \
cmake \
build-essential \
libopenblas-dev \
liblapack-dev \
libopencv-dev \
git

# 清理缓存
RUN apt-get clean && rm -rf /var/lib/apt/lists/*

# 安装 dlib
# RUN pip install --upgrade pip setuptools
# RUN pip install dlib

# 将项目的依赖文件复制到工作目录
COPY requirements.txt ./

# 安装依赖并清理缓存
RUN pip install --no-cache-dir --index-url https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt

# 将Python脚本复制到容器中
COPY . .

# 暴露应用的端口
EXPOSE 15000

# 使用uvicorn启动应用
CMD ["uvicorn","app:app","--host","0.0.0.0","--port","15000"]