前言

最近想这个QQ机器人接入 AI,让它在QQ中使用,但是写好python后部署服务器发现python版本不一致的问题,导致没办法部署,所以这里使用docker来解决这个问题

下面演示将Python项目用docker部署

生成 requirements.txt

这个文件是生成python依赖的文件

pipenv lock --requirements > requirements.txt
//或者
pip freeze >> requirements.txt

407cdc29-05cf-4fc1-91af-c3a41b12afeb

Dockerfile编写

Dockerfile按照自己的需求去写

# 将官方 Python 运行时用作父镜像
FROM python:3.9.6
# 工作目录设置为qqbot
WORKDIR ./qqbot
# 将当前目录内容复制到位于 /qqbot 中的容器中
ADD . .
# 安装 requirements.txt 中指定的任何所需软件包
RUN pip install -r requirements.txt
# 容器启动运行main.py
CMD ["python3", "main.py"]

镜像生成

项目终端下执行

docker build -t qqbot .
  • 完整就是 docker build -t imagname dockerfilepath
  • imagename 镜像名字 可以自定义
  • dockerfilepath 就是dockerfile所在文件夹位置 当前目录为 .

de14b757-b940-47cf-994a-63aa25c9d8b8

生成成功是可以在image中看见的

52bd9468-9d3d-4f49-ad83-fd8dade456de

运行镜像

docker run --rm qqbot

94d6ba14-366c-46f5-9e33-29715c6b01ef

以上步骤其实已经成功了,但是前提是你在服务器打包的,下面步骤将接上面的步骤上传打包后的文件到服务器运行

生成镜像文件

# 查看镜像的ID
docker image ls

# 打包指定ID镜像
docker save 镜像ID > 镜像文件昵称

执行完后项目下面就会多出一个叫qqbot.tar的文件

031bb9bd-acdd-42e8-a1d3-030732932eab

上传tar到服务器

这一步就是把上一步生成的qqbot.tar上传到服务器里面 具体步骤省略

加载镜像

在上传的qqbot.tar目录下执行

docker load -i qqbot.tar

加标签

给刚刚导入的镜像加入标签 不然就会在查看镜像列表的时候 PEPOSITORY和TAG显示为none

docker tag 镜像ID PEPOSITORY:TAG
  • PEPOSITORY:自定义名字
  • TAG:自定义标签

004321a8-6a1a-425d-9794-314b41f21e4a

运行

docker run --rm PEPOSITORY:TAG

docker run --rm qqbot:main

2e991383-32e8-4017-873f-60952f1a7b90

docker命令

docker image ls 列出镜像
docker ps 列出正常运行
docker rm containerID 删除container
docker rmi ImageID 删除image
docker exec -it containerID bash 进入container
docker run -d PEPOSITORY:TAG 后台模式启动