使用Docker搭建python环境,并导出以及导入镜像

水w 2024-06-16 17:07:10 阅读 65

目录

一、搭建python环境的镜像

二、导出镜像

使用 docker save 命令

三、导入镜像

使用 docker load 命令


一、搭建python环境的镜像

(1)将项目依赖包导出来到requirements.txt文件中,txt文件名称可以随意写,

pip freeze > requirements.txt

(2)新建文件夹app,

在宿主机(安装docker的机子)上新建一个目录(我的目录在/app),将requirements.txt文件复制进去,requirements.txt文件内容如下:

在app目录下创建Dockerfile文件(文件名必须是Dockerfile,没有后缀),Dockerfile内容以及解释如下: 

FROM python:3.9WORKDIR /appADD requirements.txt /app RUN pip install --upgrade pipRUN pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

FROM python:3.9 # 基于这个基础镜像构建镜像WORKDIR /app #切换换工作空间ADD requirements.txt /app # 将python项目依赖包添加到镜像RUN pip install --upgrade pip # 安装依赖包RUN pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple # 安装依赖包

(3)构建Docker镜像:在项目根目录下执行以下命令构建Docker镜像---》在app目录下执行镜像构建命令,

-t:镜像名称点(.)表示Dockerfile文件所在的目录

cd appdocker build -t a4-1:5000/xxx/py39_1:py39 .

(4)构建成功后,通过下行命令就会看到一个新的镜像,

docker images

(5)创建一个python容器并查看依赖包是否安装成功,

docker run -id --name=test_env a4-1:5000/xxx/py39_1:py39 /bin/bash

进入容器,并查看我们之前安装过的python第三方库包还在不在,

docker exec -it -u 0 test_env /bin/sh

(6)如果存在没安装上的依赖包可以自行在student_env容器中安装,

pip install 依赖包==版本 -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

可以用“exit”或者“ctrl+p+q”命令,退出容器,

二、导出镜像

使用 docker save 命令

docker save 命令被用来将一个或多个镜像保存到一个 tar 归档文件中。这个命令非常适合于镜像的备份或者将镜像从一个 Docker 环境迁移到另一个 Docker 环境。

命令格式及参数解释

docker save [OPTIONS] IMAGE [IMAGE...] [OPTIONS] 可以包含 -o 或 --output,指定保存的文件路径。IMAGE [IMAGE...] 指定要保存的镜像名称及其标签。

这个命令将 a4-1:5000/xxx/py39_1:py39 镜像保存为名为 py39_1.tar 的文件。此文件包含了镜像的所有层、标签和元数据,确保了镜像信息的完整性。

docker save -o py39_1.tar a4-1:5000/xxx/py39_1:py39

通过“ls”命令,可以在当前文件夹目录下看到这个压缩包,

三、导入镜像

(1)

使用 docker load 命令

docker load 命令用于加载由 docker save 命令保存的镜像归档文件。这个命令恢复了镜像的所有层、标签和元数据。

命令格式及参数解释:

docker load [OPTIONS] [OPTIONS] 可以包含 -i 或 --input,指定要加载的归档文件路径。

接下来,我们将 py39_1.tar 文件传输到测试环境的服务器。在测试环境的服务器上,我们使用 docker load 命令来导入这个镜像。

docker load --input py39_1.tar

执行这个命令后,myapp:latest 镜像会被加载到测试环境的 Docker 中,保留了导出时的所有信息,包括镜像的所有层和元数据。

(2)由于我的docker里面已经有一个这个名称的镜像了,所以在导入镜像时需要重命名

当你在 Docker 中导入一个镜像,并且在你的系统中已经存在与即将导入的镜像相同名称和标签的镜像时,你有几个选项可以处理这种情况:

覆盖现有镜像: 如果你不介意替换已有的镜像,可以直接使用 docker load 导入新镜像,然后让它覆盖现有的标签。需要注意的是,这样做会导致原有的镜像被新的镜像内容替换,但镜像的 ID 会更新。

重命名新导入的镜像: 如果你想保留现有的镜像并同时使用新的镜像,可以在导入后立即使用 docker tag 为新镜像指定一个不同的标签或仓库名。这样,两个镜像就可以共存,各自有不同的标签。

例如,假设原有的镜像标签为 existingimage:latest,而你导入的镜像也带有相同的标签,你可以这样操作:

docker tag existingimage:latest newimage:latest

先删除现有镜像: 如果你确定新的镜像应该替换旧的镜像,并且想要彻底移除旧镜像,可以先删除旧镜像然后导入新镜像。这样做需要小心,因为一旦删除镜像,所有依赖于该镜像的容器将无法运行。

docker rmi existingimage:latest docker load < example.tar

使用不同的标签导入: 如果可能的话,可以修改镜像的 tar 存档文件,在导入之前重新打标签,这样导入的时候就已经带有新的标签。这通常涉及到修改镜像存档的元数据,可能比较复杂,不过可以用来避免标签冲突。

选择哪种方法取决于你对现有镜像和新镜像的需求,以及你对 Docker 系统的管理策略。通常,为了避免意外覆盖,建议使用第二种方法(重命名新导入的镜像),这样可以保持环境的清晰和安全。

 输入下行命令:

docker tag a4-1:5000/yantianzi/py39_1:py39 py39_1:newname

(3)然后查询docker里的镜像,

docker images |grep py39_

OK,成功了。 



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。