pythom项目打包docker镜像,上传到服务器,在docker中运行

1.准备好需要打包的项目和项目运行所需要的环境

将所需要打包的项目准备好,同时使用以下命令创建该项目所需要的虚拟环境

python -m venv venv

创建好虚拟环境后如果是自己写的项目运行的过程中会使用

# 安装所需要的包
pip install [依赖库]

克隆别人项目进行运行时可以直接用以下命令快速安装依赖

pip install -r requirement.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

在虚拟环境当中把虚拟环境搭建好。

2.将项目当中的依赖进行导出

# 项目当中的依赖进行导出
pip freeze > requirements.txt

使用上面的指令将项目依赖库进行导出, 我们在虚拟环境中下载好代码需要的包之后,将依赖库进行导出,会生成requirements.txt文件,里面保存的是包环境如果python的版本和包的版本存在冲突,可以将requirements.txt中包的版本去掉,这样就会自动下载对应的包。

3. 编写Dockerfile文件

Dockerfile标准格式如下:

FROM python:3.10

# 设置app为工作目录
WORKDIR /app

# 复制项目文件到容器中
COPY . /app

# 如果你的镜像中没有 tzdata,则需要安装它
# 注意:python:3.6 官方镜像可能已包含 tzdata
# RUN apt-get update && apt-get install -y tzdata && rm -rf /var/lib/apt/lists/*

# 设置时区为东八区(中国标准时间)
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' > /etc/timezone

# 安装依赖
RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt

# 暴露端口
EXPOSE 9003

# 设置容器启动时运行的命令
CMD ["python3", "api.py"]

4.生成docker镜像

在dockerfile所在的目录下运行。

docker build -t hello-test .

我们利用build指令生成镜像,-t 参数指定了最终镜像的名字为hello-test。注意到 docker build 命令最后有一个 ..表示当前目录,这里是指将Dockerfile所在的当前目录作为构建上下文目录。

5.运行docker容器

docker run hello-test

# 如果我们要在宿主机生成一个日志文件的话可以使用以下的命令
docker run -v /docker_demo/logs:/logs hello-test

运行容器的时候加上-v参数 /docker_demo/logs:/logs。

这里命令的含义是将 宿主机的/docker_demo/logs挂载到容器的/logs上。这样容器对/logs目录的操作就会同步到宿主机的/docker_demo/logs目录。

通过-v能够同步容器和宿主机目录的读写,运行容器之后,我们发现docker_demo下的logs目录能多出一个docker.log文件

6.docker一些其他指令

加载镜像文件

# 解压镜像文件
docker load -i redis5014.tar
# 查看镜像
docker images
# 执行镜像
docker run -it 镜像ID

启动容器

先查看容器是否开启

docker ps

如果发现未开启,显示所有容器

docker ps -a

开启指定的容器

docker start 容器ID

开启容器失败,按照如下操作:

docker exec -it 6198ef53d943 bash
Error response from daemon: Container 6198ef53d9431a3f38e8b38d7869940f7fb803afac4a2d599812b8e42419c574 is not running

docker commit 6198ef53d943
sha256:ace7ca65e6e3fdb678d9cdfb33a7a165c510e65c3bc28fecb960ac993c37ef33

docker run -it ace7ca65e6e bash
root@72d38a8c787d:/#

进入容器

sudo docker exec -it 容器ID bash

退出容器

exit

复制宿主机文件到容器指定路径

将本地文件复制到docker容器中

docker cp 本地文件路径 容器ID/容器NAME:容器内路径
docker cp /Users/wuhanxue/Downloads/rabbitmq_delayed_message_exchange-3.9.0.ez 1faca6a70742:/opt/rabbitmq/plugins

或者

docker cp /Users/wuhanxue/Downloads/rabbitmq_delayed_message_exchange-3.9.0.ez rabbit:/opt/rabbitmq/plugins

完整语句

sudo docker run -it -v /home/ubuntu/anti/docker_test:/code 2286df316633 /bin/bash

删除镜像、容器

删除镜像

直接删除镜像

docker rmi 镜像ID

强制删除镜像

docker rmi -f 镜像ID

删除容器

删除容器

docker rm 容器ID

如果删除不掉,先关闭容器,再删除

docker stop 容器ID

强制删除容器

docker rm -f 容器ID

参考文献

https://blog.csdn.net/liuqinglang/article/details/121219988?fromshare=blogdetail&sharetype=blogdetail&sharerId=121219988&sharerefer=PC&sharesource=gantanhao1&sharefrom=from_link

https://blog.csdn.net/weixin_35770067/article/details/130330384?fromshare=blogdetail&sharetype=blogdetail&sharerId=130330384&sharerefer=PC&sharesource=gantanhao1&sharefrom=from_link