利用docker打包python app服务并实现迁移

本文详细介绍了如何在Windows和CentOS环境下,使用Docker构建、打包Python Flask应用,并进行跨平台迁移的过程,涉及Dockerfile编写、镜像制作、容器运行和部署等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

〇. 写在前面

博主利用两台已安装docker的机器进行测试

  1. 本地主机:Windows10
  2. 服务器端:Centos8
  3. docker版本:Docker version 20.10.13, build a224086

Ⅰ. 编写python服务代码

  1. 首先python代码结构如下
    在这里插入图片描述

  2. 利用Flask框架编写一个简单的python服务demo
    在这里插入图片描述


from flask import Flask

app = Flask(__name__)


@app.route("/")
def index():
    return """
        <h1>Python Flask in Docker!</h1>
        <p>A sample web-app for running Flask inside Docker.</p>
    """


if __name__ == "__main__":
    app.run(debug=True, host='0.0.0.0')

  1. 制作requirements.txt
    可以通过pip freeze > requirements.txt产生
    也可以自行编写
    在这里插入图片描述
    完成后将其放在与app文件夹同一目录下
    在这里插入图片描述
    至此,代码部分已经准备完毕!

Ⅱ. 构建Docker镜像

  1. 制作Dockerfile
    新建Dockerfile
    在这里插入图片描述
    编写Dockerfile
    在这里插入图片描述
# 基于的基础镜像
FROM python:3.8.8
# 代码添加至文件夹
ADD . /
# 设置工作目录文件夹
WORKDIR /
# 安装支持
RUN pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
CMD ["python", "app/app.py"]

  1. 创建docker镜像
docker build -t python-app:0.1 .

在这里插入图片描述

  1. 查看镜像
docker image ls

在这里插入图片描述

Ⅲ. 本地启动Docker容器

docker run -it -p 7000:5000 python-app:0.1

在这里插入图片描述
从浏览器访问测试是否可以访问
在这里插入图片描述

Ⅳ. 打包镜像

首先查看镜像ID

docker image ls

在这里插入图片描述

然后进行打包

docker save 6b82 -o python-app.tar.gz

在这里插入图片描述

Ⅴ. 上传镜像

将镜像通过ftp方式上传至服务器端随意位置

Ⅵ. 导入镜像

查看服务端已有镜像,可看出此时并无python-app:0.1镜像

docker image ls

在这里插入图片描述

通过压缩包导入镜像并重命名

docker load -i python-app.tar.gz

在这里插入图片描述

docker tag 6b8 python-app:0.1

在这里插入图片描述
服务端镜像导入成功!

Ⅶ. 服务端启动Docker容器

docker run -it -p 7000:5000 python-app:0.1

在这里插入图片描述

从浏览器访问测试是否可以访问
在这里插入图片描述
服务端测试成功!

Ⅷ. 结语

Over!大功告成!
至此,本文到此结束!

关于 “利用docker打包python app服务并实现迁移” 已全部完成。
本文只做学习用途,无任何商业用途!
转载注明出处!祝各位学业/事业有成!

小熊吖~

<think>好的,用户想知道如何使用Docker的import命令从.tar.gz文件创建镜像。我需要先回忆一下相关的Docker命令。记得Docker有两个主要的命令来处理镜像的导入导出:save/load和export/import。用户提到的import命令通常与容器快照有关,而load用于镜像。 首先,用户可能混淆了这两个命令。根据引用资料,用户提供的引用[1]、[2]、[3]、[4]都是关于使用docker save来导出镜像为.tar.gz文件,然后使用docker load来加载。而docker export是导出容器为文件,再用docker import来创建镜像。所以需要明确用户提供的文件类型是镜像还是容器快照。 如果用户有一个通过docker save导出的镜像文件,应该使用docker load。如果是通过docker export导出的容器文件,才使用docker import。用户的问题提到的是使用import命令,这可能意味着他们有一个容器导出的tar文件,而不是镜像。 但用户提到的是.tar.gz文件,而引用[4]中显示导出镜像时使用了gzip压缩,所以可能需要先解压。例如,docker save导出用gzip压缩成.tar.gz,这时候如果要使用docker load,需要先解压吗?或者docker load可以直接处理.gz文件?根据Docker文档,docker save的输出可以通过管道用gzip压缩,而docker load可以自动处理压缩过的文件,所以可能不需要先解压。不过,如果是手动压缩的.tar.gz,可能需要先解压成.tar再使用docker load。 但用户的问题是使用import命令,那可能他们有一个容器导出的tar文件。这时候的正确步骤是:docker import [文件] [镜像名]:[标签]。但需要注意,import创建的是一个镜像,而export导出的是容器的文件系统,没有历史层等信息。 所以,在回答中需要区分两种情况:如果是从镜像导出的.tar.gz,用load;如果是从容器导出的.tar,用import。用户可能误解了这两个命令的区别,需要明确指出。 另外,用户提供的引用中有关于docker save和load的例子,比如引用[1]中的docker save -o xxx.tar.gz 镜像名称,而引用[3]和[4]也提到了类似的操作。因此,正确的步骤应该是先确认文件来源,再选择对应的命令。 总结回答的结构应该是: 1. 解释import和load的区别。 2. 如果是容器导出的tar文件,使用import的步骤。 3. 如果是镜像导出的tar.gz,使用load的步骤,可能需要解压。 4. 提供示例命令。 5. 注意事项,比如标签问题,压缩处理等。 同时,需要纠正用户可能的误解,即import通常用于容器快照,而load用于镜像。因此,如果用户有镜像的.tar.gz文件,应该使用docker load,而不是import。但用户明确问的是import,可能需要说明这种情况下的正确用法,指出如果文件是镜像则应使用load。 最后,生成相关问题,比如如何导出容器,如何导出镜像,两者的区别,优化镜像大小等。</think>### Docker import 使用 .tar.gz 文件创建镜像教程 #### 核心区别说明 Docker 中与镜像/容器导入导出相关的命令有两条分支: 1. **镜像操作**:使用 `docker save` 导出镜像为 `.tar` 或 `.tar.gz` 文件,通过 `docker load` 恢复镜像[^1][^4]。 2. **容器操作**:使用 `docker export` 导出容器的文件系统为 `.tar` 文件,通过 `docker import` 从文件系统快照创建新镜像[^3]。 #### 使用 `docker import` 的步骤 若你已有通过 `docker export` 生成的容器快照文件(`.tar` 或 `.tar.gz`),可按以下步骤操作: 1. **解压文件(如为 `.tar.gz`)**: ```bash gzip -d your_file.tar.gz # 解压后得到 your_file.tar ``` 2. **导入容器快照为镜像**: ```bash docker import your_file.tar new_image_name:tag ``` - 示例:`docker import centos_container.tar my_centos:v1` 3. **验证镜像**: ```bash docker images # 查看是否存在 new_image_name ``` #### 注意事项 1. **文件来源**:`docker import` 仅适用于容器文件系统快照(通过 `docker export` 生成),**不可直接用于 `docker save` 导出的镜像文件**。若文件是镜像(如通过引用[1]的方法生成),应使用 `docker load`: ```bash docker load -i your_image.tar.gz ``` 2. **标签问题**:`docker import` 生成的镜像**无历史记录和元数据**,需手动指定名称和标签。 3. **压缩格式**:`docker load` 支持直接加载 `.tar.gz` 文件,但 `docker import` 需先解压为 `.tar` 文件。 #### 操作对比表 | 场景 | 导出命令 | 导入命令 | 文件类型 | |--------------------|--------------------|--------------------|--------------| | 完整镜像备份 | `docker save` | `docker load` | `.tar`/`.tar.gz` | | 容器快照迁移 | `docker export` | `docker import` | `.tar` |
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值