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