需求:现有一个py文件,一个能联网的linux系统,一个不能联网的服务器,要把该py文件部署到不能联网的服务器上。
参考链接:docker打包python项目成镜像文件 - 知乎
Docker容器镜像打成tar包 - fs_Dong - 博客园
docker_test
├── Dockerfile
├── myapps
└── taskassign.py
└── requirements.txt
Dockerfile文件 没有后缀名,啥也不加
# 将官方 Python 运行时用作父镜像
FROM python:3.9
# 将工作目录设置为 /
WORKDIR ./
# 将当前目录内容复制到位于 / 中的容器中
ADD . .
# 安装 requirements.txt 中指定的任何所需软件包
RUN pip install -r requirements.txt
# 如果你觉得环境配置的时候pip库太慢,在Dockerfile文件里面加入下面语句,从阿里云下载
#RUN pip install -r requirements.txt -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
# 定义环境变量
ENV NAME World
# 在容器启动时运行 app.py
CMD ["python", "./myapps/taskassign.py"]
#CMD ["python","./BP_hand_writing.py","worker","-l","info"] ##faust程序worker启动命令
FROM <基础镜像>。所谓定制镜像,那一定是以一个镜像为基础。FROM 指令用来指定以哪个镜像作为基础镜像生成新的镜像。这里我们将官方Python的3.7版本镜像作为基础镜像。
WORKDIR <工作目录路径> 。 使用 WORKDIR 指令可以来指定镜像中的工作目录(或者称为当前目录),以后各层的当前目录就被改为指定的目录。
ADD <源路径> <目标路径>。使用ADD指令可以将构建上下文目录中的源路径目录复制到镜像内的 <目标路径> 位置。第一个参数“.”代表Dockerfile所在的目录,即python项目docker_test下所有的目录(不包括docker_test自身)。第二个参数“.”代表镜像的工作目录docker_test。所以该行命令会将python项目docker_test目录下的所有文件复制到镜像的docker_test目录下。这样docker镜像中就拥有了一份docker_test python项目。
RUN 指令是用来执行命令行命令的。这里直接安装requirements.txt 中指定的任何所需软件包。
CMD 指令是容器启动命令,这里是在容器启动时通过python运行 taskassign.py。值得注意的是./目录指的是当前工作目录即docker_test。
requirements.txt不要放在Dockerfile同一目录下,放到myapps里
requirements.txt是Python运行环境配置,可以在你当前目录下键入:
pip freeze > requirements.txt
也可以直接自己写,例:
Numpy==1.21.2
在dockerfile所在的目录下运行。
sudo docker build -t demo:v1 .
我们利用build指令生成镜像,-t 参数指定了最终镜像的名字为demo:v1。如果注意,会看到 docker build 命令最后有一个 . 。 . 表示当前目录,这里是指将Dockerfile所在的当前目录作为构建上下文目录。注意:不清楚构建上下文目录含义的同学可以返回编写Dockerfile小节,查看ADD . .指令中对构建上下文目录的描述。
sudo docker run demo:v1
我们用docker run运行容器 ,终端显示 hello docker 表示容器运行成功
拉取镜像(如果不能连网)
docker pull 镜像名称
注意:docker pull tomcat为例子,若不指定版本,则拉取最新版本,指定版本:docker pull tomcat8.5.9
首先查看下现有要打tar包的容器
docker ps -a
# 如果不能运行 出现permission denied,在代码前加sudo,以下同
sudo docker ps -a
接下来用commit参数进行保存镜像, -a 提交人的姓名 -m “提交内容”,格式如:docker commit -a -m 现有容器ID 保存后的名称:版本号
docker commit -a "tmf" -m "tmf-web" 7740db56288a tmf-web:v20191123
接下来查看下镜像是否出现:
docker images
然后save参数进行打包,格式如:docker save -o 要打镜像包名称 镜像
docker save -o tmf-web20191123.tar tmf-web:v20191123
最后使用ls查看文件是否存在
[root@tbds-10-157-8-7 ~]# ls
tmf-web20191123.tar
[root@tbds-10-157-8-7 ~]#
之后在磁盘中查找tar文件,若文件被锁定,无权限,可修改文件权限:
参考文献:Linux修改文件权限为777_wangchuang2017的博客-CSDN博客_修改权限为777
chmod 777 文件名
chmod 777 tmf-web20191122.tar