Python项目部署到Docker的完整过程

项目结构

在这里插入图片描述
平时在PyCharm里面运行该工程,只要直接运行server.py文件即可
在这里插入图片描述
现在希望将该工程,部署到docker里面,使用容器启动:

步骤如下:

1、创建一个上传到Linux系统文件夹(文件名任意)

docker_EF_NFCS是要上传到Linux系统,生成Docker镜像的文件夹
在这里插入图片描述
docker_EF_NFCS文件夹下面有两个东西
Dockerfile 是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。有了 Dockerfile,就可以创建我们所需要的镜像
Dockerfile文件内容如下:
在这里插入图片描述
#基于的基础镜像
FROM python:3.7

#代码添加到code文件夹
ADD ./EF_NFCS /code

#设置code文件夹是工作目录
WORKDIR /code

#安装支持
RUN pip install -r requirements.txt

CMD [“python”, “/code/package/server.py”]


最后一条命令,就是说,当启动容器时候,执行server.py程序。

一个EF_NFCS(任意起的名字)文件夹:包含工程的代码,和运行工程所需要的环境列表

所以,EF_NFCS文件夹,有两个成员package和requirements.txt
package就是Python项目的package(整个源码所在目录)直接复制过来的
requirements.txt生成方法:
cmd命令,进入到【D:\python\EF_NFCS】目录,也就是工程目录,package的同级目录,

执行命令:pip freeze > requirements.txt
在这里插入图片描述
就在该目录下生成了一个requirements.txt文件:

如下图,可能很大,因为没有配合virtualenv ,就把整个环境中的包都列出来,

没关系,我们可以删除我们此工程中,不需要的组件
在这里插入图片描述

2、上传到linux环境,生成镜像

进入docker_EF_NFCS文件夹
在这里插入图片描述
创建镜像
执行命令:docker build -t ef_nfcs_img .
ef_nfcs_img 为创建的镜像名称,. 表示当前目录(docker_EF_NFCS)
在这里插入图片描述在这里插入图片描述
查看镜像是否创建成功:

执行命令:docker images
在这里插入图片描述
可以看到ef_nfcs_img的镜像,已经存在了

3、运行镜像,生成并启动容器

执行命令:docker run -it -p 9060:9060 --name ef_nfcs ef_nfcs_img

-it:表示交互式终端的容器,非启动后立刻结束的容器

-p 9060:9060:表示将docker的9060端口,映射到Linux虚拟机的9060端口
也就是说,访问Linux虚拟机的9060端口,就是在访问docker容器的9060端口

–name ef_nfcs:给容器取个名字,嫌麻烦可以省去

ef_nfcs_img:容器是用哪个镜像启动的(一个容器,必须依赖一个镜像启动)
在这里插入图片描述
和原来用PyCharm启动的效果一致:
在这里插入图片描述
这就OK啦!!!

拓展-实用命令

退出容器又不关闭容器:Ctrl + P + Q
比如这种情况:
在这里插入图片描述
直接输入exit 会退出且关闭容器,工程就stop了
或者Ctrl + C,会报错KeyboardInterrupt,工程就也stop了
此时,就需要使用命令:docker start 容器ID,去再启动容器后,就可以继续访问工程了,
使用命令:
docker exec -it 容器ID /bin/bash
或者
docker attach 容器ID,重新进入容器后,可查看程序打印的日志
在这里插入图片描述
但是,如果使用Ctrl + P + Q退出容器,就不会中断工程,等于退出容器后,还可访问容器的工程,

再进入,也是使用命令:docker attach 容器ID

ctrl+d 退出容器且关闭, docker ps 查看无

ctrl+p+q 退出容器但不关闭
查看安装的docker:yum list installed | grep docker

查看容器:docker ps -a

查看镜像:docker images

删除容器:docker rm 容器ID

删除镜像:docker rmi 镜像ID/镜像名

安装rz上传,sz下载的命令:yum -y install lrzsz

docker inspect 容器ID:返回一个Json文件记录Docker容器的配置和状态信息

将容器导出到容器的镜像文件 : docker export 容器ID > update.tar

用容器的镜像文件创建一个新静像:docker import - 镜像名 < update.tar

创建完成之后,生成并启动镜像的容器:docker run -it 镜像名

不行就在后面加一个/bin/bash ,然后进入code的package目录,手动启动程序:python server.py

比如报错:Error response from daemon: No command specified
在这里插入图片描述
镜像保存为镜像文件: docker save -o update1.tar update(update是一个已经存在的镜像)

从镜像文件加载生成新镜像:docker load < update1.tar

有时候,从镜像文件加载生成新镜像,会报错如下:

open /var/lib/docker/tmp/docker-import-559669842/bin/json: no such file or directory
在这里插入图片描述
从以命令可以解决:

cat jdkself.tar | docker import - jdkself

jdkself.tar为镜像文件名称,jdkself为镜像名称

结束!!!

  • 4
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

i码充电桩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值