Docker 新手入门:把你的第一个 Python 项目装进容器

举报
yd_251877608 发表于 2026/10/22 12:36:49 2026/10/22
【摘要】 刚学 Docker 的时候,我最大的困惑是:明明本地跑得好好的代码,换一台机器就各种报错,缺依赖、版本对不上、环境变量找不到。后来接触了 Docker 才明白,它的思路很朴素——给应用打包一个“随身小房间”,代码、依赖、运行环境一起装进去,走到哪都能原样启动。Docker 到底是什么一句话:Docker 是一种轻量级的容器技术。很多人拿它和虚拟机对比:虚拟机要完整安装一套操作系统,又重又慢;...

刚学 Docker 的时候,我最大的困惑是:明明本地跑得好好的代码,换一台机器就各种报错,缺依赖、版本对不上、环境变量找不到。后来接触了 Docker 才明白,它的思路很朴素——给应用打包一个“随身小房间”,代码、依赖、运行环境一起装进去,走到哪都能原样启动。

Docker 到底是什么

一句话:Docker 是一种轻量级的容器技术。很多人拿它和虚拟机对比:虚拟机要完整安装一套操作系统,又重又慢;容器只共享宿主机的系统内核,隔离的是进程、网络和文件系统,启动往往只要一秒钟。

先记住三个核心概念:

  • 镜像(Image):只读的模板,比如 python:3.11-slim,相当于装系统的 ISO。
  • 容器(Container):镜像运行起来的实例,可以启动、停止、删除,彼此隔离。
  • Dockerfile:写给 Docker 的“配方”,描述一步步如何构建出镜像。

动手:把一个 Python 小项目装进容器

假设你有一个最简单的 Flask 应用 app.py,依赖写在 requirements.txt 里。先在项目根目录新建一个 Dockerfile:

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

然后三条命令跑起来:

docker build -t myapp:1.0 .
docker run -d -p 5000:5000 --name myapp myapp:1.0
docker ps

浏览器访问 localhost:5000,能看到页面就说明成功了。想看日志就用 docker logs myapp,想进容器里瞧瞧可以用 docker exec -it myapp bash。

新手最容易踩的三个坑

第一,构建太慢。每次 RUN pip install 都要重新下载依赖。解决办法是把 COPY requirements.txt 和安装步骤放在 COPY . . 之前,这样只有依赖变化时才重新安装;网络慢的话可以配置国内镜像加速。

第二,容器一启动就退出。很多时候是 CMD 写错,或者应用本身报错。用 docker logs 看日志定位问题,别急着删容器重建。

第三,端口映射写反。-p 5000:5000 的格式是“宿主机端口:容器端口”,左边是给外面访问的,右边是应用在容器里监听的,搞反了就访问不通。

顺手学点 Linux,事半功倍

Docker 命令都是在终端里敲的,顺手掌握几个 Linux 常用命令会轻松很多:ls、cd 看目录,ps、kill 管进程,tail -f 实时看日志。理解了 Linux“一切皆文件”的思想,再看容器的文件系统隔离和挂载卷(Volume)就很好懂——数据卷就是把宿主机的目录“映射”进容器,容器删了数据还在。

小结

写到这里,你已经掌握了 Docker 最核心的一套流程:写 Dockerfile → 构建镜像 → 运行容器。下一步可以试试 docker-compose,一条命令同时拉起应用和数据库。容器化这条路,动手跑一次胜过看十篇文档,不妨现在就打开终端试试。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。