当前位置: 首页 > news >正文

如何使用 Docker 打包一个简单的应用程序:简易指南

大家好!我是大聪明-PLUS

今天我将向大家展示如何使用这四个左手手指在 Docker 中构建应用程序(我们可是在进行严肃的研究,还能用别的方法吗?)。

为了回答这个未被提出的问题,我大胆地说,有时候你需要将你简单但功能强大的应用程序放在容器中运行,以便:

  • 到处都是同样的情况(甚至在齐娜阿姨的车里也是如此);

  • 它可以部署到云端或存储桶中;

  • 不要考虑依赖关系、版本、环境等等这些东西。

正如您可能已经注意到的,我们已经得出了其中一个操作原则的结论:“容器主要是应用程序交付的产物,只有这样它才能起到隔离作用”,并且我们已经朝着大型 K8S 编排器迈出了重要一步。 

让我们进入正题。

举个简单的例子:我们有一个 Python 应用程序,运行命令是`python app.py。没什么特别的。假设根据 TIOBE 的数据,截至 2025 年 7 月,Python 是世界上最流行的编程语言。但这项研究的严谨性也就到此为止了,我们不能再指望它有什么权威性可言。

第一步:准备项目

以下是项目结构:

我的应用/

├── app.py

├── requirements.txt

app.py文件可以是任何东西,从一个简单的“Hello, world!”应用程序到 Web 应用程序——这并不重要。关键是它能够启动并运行。如果它无法启动和运行,那么恐怕你的应用程序还不够完善,需要进行一些改进。

Requirements.txt 文件列出了依赖项,例如:

请求

总的来说,这是一个完整的项目,名副其实的“大项目”。

步骤 2:编写 Dockerfile

现在让我们在项目根目录下创建一个 Dockerfile:

FROM python:3.13-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "app.py"]

这里发生了什么:

  • 我们采用官方的 Python 镜像,但要轻量级(精简版);

  • 进入容器内的 /app 目录;

  • 复制依赖项并通过 pip 安装;

  • 将整个项目复制到容器内;

  • 容器启动时运行app.py。

Dockerfile 是一个配方文件,就像宜家的组装说明书,只不过是针对应用程序的。你需要指定构建镜像的依据(例如,使用 Ubuntu 并安装 Python,或者只使用 Python 并安装依赖项)、要复制的内容、要运行的命令,以及如何运行所有这些操作。

这有很多好处:构建选项的版本控制、构建和交付到测试环境的自动化(这是我们最喜欢的 CI/CD),而且无需向新手解释如何使用“docker build”构建项目。

我们实际上已经编写了一个文件,其中包含有关如何将我们引以为豪的应用程序打包到容器中(包括依赖项)以及如何运行它的说明。

诸如从零开始、为什么选择 Python 而不是 Alpine、为什么显示的是版本而不是最新版本、以及什么是最新版本等问题,都被省略了,但我相信,只要你保持好奇心,就能找到这些问题的答案。

步骤 3. 组装图像

在终端中,进入 Dockerfile 所在的目录,运行:

docker build -t myapp .

这将构建一个带有 myapp 标签的镜像。Docker 将执行 Dockerfile 中的步骤,并为每个步骤创建一个镜像层。

等等,这是几层?我们要做馅饼吗?

是的,Docker 中的层就像千层蛋糕,只不过我们用 Dockerfile 中的命令代替了面团和馅料。

每条指令(FROM、COPY、RUN、CMD)都代表一个单独的层。Docker 会逐层构建镜像。每当你在 Dockerfile 中编写内容时,它都会基于前一层创建一个新层。

这一切究竟是为什么?

Docker 会缓存构建层。如果您没有更改任何代码,只是重新启动构建,它不会重新安装 Python 或依赖项——它只会使用缓存中预构建的构建层。更快、更便宜、更方便。

没错:图片更新起来更容易。只改了一行代码?只需要重建一个图层,其余部分保持不变。当然,前提是你的代码是最后加载的,而不是最先加载的。

因此,分层是为了优化、重用,以及容器生命周期中的秩序。

我们也可以在这里讨论其他装配工具,但这与手指无关。

步骤 4. 启动容器

现在我们可以在容器中运行我们的应用程序了:

docker run --rm myapp

如果一切正常,我们将看到app.py的输出。如果应用程序是基于 Web 的,您可以转发端口:

docker run -p 8000:8000 myapp

同样,底层和幕后有很多有趣的东西:cgroup、命名空间——但今天我们只谈“傻瓜式的 4 个简单步骤”。

你还可以添加`-d`参数强制它在后台运行。如果你有多个服务、数据库和其他网络需求,或者可以用 Compose 将其封装起来。此外,你还可以解释 Git 仓库、持续集成 (CI) 等环境中的文件存储结构。

但基本上,就是这样,简单而又不带任何狂热,我们就把应用程序塞进了一个容器里。 

现在,我们可以开始了吗?其实还不行,因为这其中有很多细微之处,而且这个领域的知识浩瀚无垠。但这可以作为我们进入儿童收纳容器世界的起点,一个开始。

最重要的是,不要害怕 Dockerfile。它只是从表面上看比较吓人。实际上,它就像一份食谱,一步一步地指导你完成操作。 

http://www.dtcms.com/a/606244.html

相关文章:

  • Hyper-V Windows 11 Pro x64 开局问题
  • 长沙外贸建站土地 水利 勘测设计 公司宣传册设计样本
  • Cursor区域限制解决方法, Cursor 提示:“Model not available“的原因
  • 自签名证书需要手动确认风险导致nginx转发无效问题
  • 重庆市建设工程安全网站广告营销公司
  • 编译型语言有哪些 | 深入了解编译型语言的工作原理和特点
  • 实践教程|如何创建一个WhatsApp AI Chatbot
  • 网站流量分成专题制作 wordpress
  • 深度学习中适合长期租用的高性价比便宜的GPU云服务器有哪些?
  • 【DaisyUI】如何覆盖 dropdown 下拉效果?
  • 个人网站可以挂广告吗网站开发项目合同书
  • 网站建设前提企业信息管理
  • 每日两题day42
  • 最优惠的手机网站建设wordpress页面访问量
  • AI提效前端开发
  • 建立主题网站的知识点东莞市做网站公司
  • 怎么重启电脑的网卡(Windows系统)?
  • 【STM32】串口
  • 杭州建网站装修材料
  • 从U盘损坏中恢复视频文件并修复修改日期的完整解决方案
  • 网站建设人员wordpress个人
  • 免费项目网站wordpress如何导入模板数据库
  • 三坐标测量软件路径仿真和碰撞检测功能
  • K8s Ingress 与 Ingress API 全解析:外部访问集群的统一入口
  • kubernetes部署
  • 【2025最新】05 Spring Security 构建 RESTful Web 注册服务 - 2
  • 《C++在LLM系统底座中的深度赋能逻辑》
  • 做网站没有数据库wordpress导航主题haow
  • 如何选择企业微信SCRM?2025年3个选型参考维度
  • Biotin-Gln,谷氨酰胺-生物素,Biotin-谷氨酰胺,偶联反应