Docker 快速入门:手把手教你打包 Python 应用

Docker 快速入门:手把手教你打包 Python 应用

2026-01-26 22:51  AlfredZhao  阅读(0)  评论(0)    收藏  举报

在云原生时代,Docker 是每一位开发者的必备技能。它解决了“环境配置难、版本冲突多”的痛点。今天,笔者将带你实战演练:如何将一个 Python Web 应用打包,并运行在自定义的端口上。


01 | 什么是 Docker?为什么它是“集装箱”?

搬家时,散装家具容易磕碰丢件。
Docker 的做法是: 租一个标准集装箱,把你的代码、Python 解释器、第三方库全部装进去。

  • 镜像 (Image):封了条的集装箱模板,一旦打包,任何地方运行都一模一样。
  • 容器 (Container):集装箱落地开门,真正跑起来的应用实例。

02 | 环境搭建:在线与离线安装

有些系统已经预装好了docker或者podman(后面提到),可以跳过此步骤,如果你的环境两者都没有,可以这样安装:

① 在线一键安装

对于能联网的服务器:

curl -fsSL https://get.docker.com | bash -s docker
sudo systemctl enable --now docker
# 验证:看到 active (running) 说明成功
sudo systemctl status docker

② 离线安装(内网环境)

  1. 下载 Docker 静态二进制 .tgz 包。
  2. 解压并将 docker/* 目录下的所有文件拷贝到 /usr/bin/
  3. 执行 sudo dockerd & 启动后台服务。

③ 彻底删除现有容器环境(特殊情况)

该步骤不是必须,仅当现有容器环境有问题,导致冲突之类,可以尝试彻底卸载现有的容器环境(执行前必须要确定该环境的现有容器环境可删除,谨慎操作):

# 彻底删除docker(仅供参考)
sudo yum remove -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd# 彻底删除podman(仅供参考)
sudo yum remove -y podman
rm -rf ~/.local/share/containers/
rm -rf ~/.config/containers/
sudo rm -rf /etc/containers/ /var/lib/containers/

④ 为啥我的系统安装了假docker?

在 RHEL 8/9 及其衍生版(如笔者使用的 Oracle Linux)中,因为 Red Hat 默认推行 Podman。所以当只运行 dnf install docker 时,会发现系统实际上安装了一个名为 podman-docker 的软件包。

比如笔者在OEL系统上执行:

$ sudo dnf install docker

实际就是装了podman,但基本上可以 99% 兼容 Docker 命令。

$ docker ps
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
CONTAINER ID  IMAGE       COMMAND     CREATED     STATUS      PORTS       NAMES

可以看到,执行docker命令,会有明确的提示“正在使用 Podman 模拟 Docker 命令行”。不过如果用途只是普通学习或运行标准容器,Podman 几乎能无缝替代 Docker。


03 | 实战打包:WhaleStudy 应用(Python 版)

假设我们要开发一个名为 WhaleStudy 的应用,并在 10090 端口提供服务。

① 准备代码与依赖

whalestudy 文件夹下创建两个文件:

文件 1:app.py(Python 源码)

from flask import Flask
app = Flask(__name__)@app.route('/')
def home():return "<h1>WhaleStudy: Python in Docker is Running on 10090!</h1>"if __name__ == '__main__':# 必须监听 0.0.0.0,否则 Docker 外部无法访问app.run(host='0.0.0.0', port=10090)

文件 2:requirements.txt(依赖清单)

flask==3.0.0

② 编写“配方”:Dockerfile

创建名为 Dockerfile 的文件(无后缀):

# 1. 基础镜像:使用轻量版 Python 3.9
FROM python:3.9-slim# 2. 设置工作目录
WORKDIR /app# 3. 拷贝依赖清单并安装(使用清华源加速)
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple# 4. 拷贝源码
COPY app.py .# 5. 声明端口
EXPOSE 10090# 6. 启动指令
CMD ["python", "app.py"]

③ 构建镜像 (Build)

# -t 指定名字和版本,注意末尾有一个“.”代表当前目录
docker build -t whalestudy-py:v1.0 .

④ 运行容器 (Run)

# -d 后台运行,-p 宿主机端口:容器端口
docker run -d -p 10090:10090 --name my_whale_app whalestudy-py:v1.0

04 | 发表与离线分发

① 在线发表(推送到仓库)

docker login
docker tag whalestudy-py:v1.0 yourname/whalestudy-py:v1.0
docker push yourname/whalestudy-py:v1.0

② 离线“背”走镜像(企业内部项目最常用)

# 在开发机导出
docker save -o whalestudy_py_v1.tar whalestudy-py:v1.0# 在客户机导入
docker load -i whalestudy_py_v1.tar# 在客户机查找导入的镜像
docker images# 在客户机运行(实际有很多参数按需可配,这里只做最简示例)
docker run -d -p 10090:10090 --name my_whale_app whalestudy-py:v1.0

③ 确认客户机服务正常

按照上面的例子,正常网页访问10090端口,就可以正常显示测试界面:

另外,可以使用下面常用的docker命令,实现对某个具体容器的日志排查,或直接进入到某个容器内部直接操作:

# 查看某个容器的日志
docker logs -f [容器名]# 进入到某个容器
docker exec -it [容器名] /bin/bash

05 | 笔者结语

使用 Docker 运行 Python,最核心的优势是 “环境锁死”。你再也不用担心服务器上缺少某个库或者 Python 版本不对。端口的映射也确保了你的服务在复杂网络环境中的清晰独立。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1221183.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

完整教程:【计算机视觉(11)】损失函数与优化基础篇:如何训练线性分类器

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

新零售行业低代码平台应用实践

在数字化浪潮推动下&#xff0c;新零售行业正经历从“渠道融合”到“全链路智能协同”的转型深水区。线上线下数据割裂、业务流程繁琐、需求迭代滞后、复合型人才短缺等痛点&#xff0c;成为制约企业突破增长瓶颈的核心障碍。低代码平台凭借“可视化搭建、快速迭代、全民参与”…

深度测评8个一键生成论文工具,本科生毕业论文轻松搞定!

深度测评8个一键生成论文工具&#xff0c;本科生毕业论文轻松搞定&#xff01; AI 工具如何助力论文写作&#xff1f; 随着人工智能技术的不断进步&#xff0c;越来越多的本科生开始借助 AI 工具来提升论文写作效率。在面对繁重的学术任务时&#xff0c;这些工具不仅能够帮助…

Docker-构建自己的Web-Linux系统-镜像colinchang/ubuntu-desktop:22.04

下载镜像 docker pull colinchang/ubuntu-desktop:22.04 或者 docker pull docker.1ms.run/colinchang/ubuntu-desktop:22.04 速度更快3G大小运行 docker run -d \--name ubuntu-desktop\--shm-size512m \-p 28443:6901 \-e VNC_PWadmin\-u root \--restart always \docker.1ms…

Flink SQL 的 LIMIT 子句语义、坑点与实战技巧 - 详解

Flink SQL 的 LIMIT 子句语义、坑点与实战技巧 - 详解2026-01-26 22:45 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; di…

P1163 银行贷款(1.26)

点击查看代码 #include<bits/stdc++.h> using namespace std;double w,k; int m;bool check(double x) {double rest=w;for(int i=0;i<m;i++){rest=rest*(1+x)-k;}return rest>0; }int main() {cin>>…

Jamplus工具Parse阶段的源码解析(1)

本次分析的JamPlus为Jamplus0.3(基于Jam2.5) 阅读本篇文章需要对Lex&Yacc有一定了解,如果没有基础,推荐看完《Lex&Yacc入门》和《使用Yacc》再来阅读本篇文章。 Jam的解析阶段 Jam一共有4个阶段的操作,启…

解决兼容性导致的CATIA V5R21 新建文档卡死 dsls.licgen.v1.6.ssq.exe 闪退问题

解决了GT730M显卡兼容性导致的CATIA V5R21 新建文档卡死 & 系统版本太高引起的 dsls.licgen.v1.6.ssq.exe 闪退问题。手头一直用着一台T440p(4700MQ+730M),最近在Win10 LTSC 21H2下装CATIA,以前运行良好的CATI…

AI应用架构师视角下的AI模型评估标准深度洞察

AI应用架构师视角下的AI模型评估标准深度洞察&#xff1a;从“论文指标”到“落地适配”的思维跃迁 一、引入&#xff1a;那些让架构师深夜崩溃的“模型坑” 你有没有过这样的经历&#xff1f; 花了3个月调通的SOTA图像分类模型&#xff0c;上线后却因为推理延迟高达500ms&…

opencv 实现图像拼接

图像拼接问题&#xff0c;也就是把多张有重叠区域的图像&#xff08;比如从不同角度 / 位置拍摄的同一场景&#xff09;拼接成一张更大、更完整的全景图&#xff0c;这在视觉检测、机器人建图、安防监控等场景中非常常用。下面我会从核心原理、主流方法到可执行的代码实现&…

别急着递归——聊聊《最接近的二叉搜索树值》背后的“算法直觉”

别急着递归 ——聊聊《最接近的二叉搜索树值》背后的“算法直觉” 如果你刷过 LeetCode,大概率见过这道题: Closest Value in BST(最接近的二叉搜索树值) 题目一句话就能说清楚: 给你一棵 二叉搜索树(BST) 再给你一个 浮点数 target 让你找一个 值最接近 target 的节点…

通过神经网络识别图像位置

神经网络实现视觉图像位置识别&#xff0c;核心是目标检测&#xff08;Object Detection&#xff09; 技术&#xff0c;其本质是让模型同时完成目标分类&#xff08;识别图像里有什么&#xff09;和位置回归&#xff08;预测目标的坐标框&#xff09;。以下是从技术原理到落地实…

模型导出为 ONNX/TensorRT 格式

将训练好的 YOLOv8 模型轻量化并导出为 ONNX/TensorRT 格式&#xff0c;最终部署到 Jetson Nano 这类嵌入式设备上加速推理&#xff0c;这是实际落地中非常关键的一步&#xff0c;能显著提升模型在边缘设备上的运行速度。下面我会从模型导出、TensorRT 优化、Jetson Nano 部署三…

北京首个AI教育实训基地!摩尔线程联合北京市十一学校赋能创新人才培养

2026年1月23日&#xff0c;摩尔线程与北京市十一学校共同宣布&#xff0c;双方战略合作的“AI教育实训基地”已正式启用。作为首个落地北京的AI实训示范项目&#xff0c;该基地部署了摩尔线程MTT AIBOOK及云端算力&#xff0c;为学校多元化的人工智能课程体系注入了坚实的国产算…

浅谈 OpenAI Agents SDK

一、OpenAI Agents SDK是什么&#xff1f; OpenAI Agents SDK是一个轻量级且易于使用的工具包&#xff0c;用于构建基于代理的AI应用程序。 提供了一些基本构建块&#xff0c;包括具备指令和工具的代理&#xff08;Agents&#xff09;、用于代理间任务委托的交接&#xff08;…

AI Agent成“权限刺客“?企业安全团队集体破防!程序员必看风险管控指南

AI Agent正在加速工作流程的执行。它们可以安排会议、访问数据、触发工作流、编写代码并实时采取行动&#xff0c;以超越人类的速度提升企业生产力。直到某天安全团队突然发现&#xff1a;“等等…这是谁批准的&#xff1f;” 与传统用户或应用程序不同&#xff0c;AI Agent往…

震惊!AI终于会“摸鱼“了!Skills架构让大模型秒变职场老油条,代码即一切!

架构师&#xff08;JiaGouX&#xff09; 我们都是架构师&#xff01; 架构未来&#xff0c;你来不来&#xff1f; 大纲&#xff08;先对齐结构&#xff09; TL;DR&#xff1a;3分钟带走 5 个结论“代码就是一切”到底在说什么能力强&#xff0c;但为什么还是干不好活Skills 是…

震惊!工程师总说需求做不了?揭秘AI Agent内部循环,小白也能看懂!

你有没有遇到过这种情况&#xff1a;需求评审时&#xff0c;工程师说这个功能实现不了&#xff0c;你却完全不知道为什么&#xff1f; 问题往往出在这里——你设计的是一个 AI Agent&#xff0c;但你并不知道它背后到底在做什么。 一、Agent 其实是个永动机 打个比方&#x…

AI开发新风向!高效智能体技术揭秘,让你的大模型从“吃内存大户“变身“效率王者“,2026年必学技术!

高效智能体不是更小的模型&#xff0c;而是在记忆、工具使用和规划模块上优化&#xff0c;以最大化任务成功率同时最小化资源消耗&#xff08;包括token使用、推理延迟和计算成本&#xff09;的智能体系统。 高效智能体研究的演进轨迹&#xff08;2023-2025&#xff09;。蓝色&…

震惊!中国电信AI新神作TeleMem让大模型“开挂“,记忆暴涨38%!小白程序员也能轻松上手!

思维导图曾被证明可以帮助学习障碍者快速提升成绩&#xff0c;那么当前已经可堪一用的智能体系统如果引入类似工具是否可以帮助改善长期学习记忆能力呢&#xff1f;有研究团队做出了探索性尝试。 在长上下文和Agent应用不断落地的过程中&#xff0c;越来越多研究者开始意识到&…