Docker 入门实战:十分钟用容器跑起一个 Python Web 服务
很多初学者第一次接触后端开发时,最先卡住的往往不是代码本身,而是环境:Python 版本对不上、依赖装到一半报错、在自己电脑能跑、换台机器就跑不起来。我刚开始学的时候也反复踩过这些坑,后来用 Docker 把环境装进容器里,这类问题一下子少了很多。这篇文章把我实际跑通的一套最小流程写下来,适合第一次用 Docker 的朋友照着做一遍。
先说清楚 Docker 解决的是什么问题。它不是虚拟机,不需要在电脑里再装一整套操作系统,而是把应用和它需要的运行环境、依赖库、配置文件一起打包成一个镜像。镜像在哪里运行,行为就基本一致。对个人开发者来说,最直接的好处是三点:环境可复制、清理干净、切换项目不互相污染。
准备工作很简单:安装 Docker Desktop 或在 Linux 服务器上安装 Docker Engine,打开终端执行 docker --version 能看到版本号就说明装好了。接下来新建一个文件夹,在里面放三个文件。第一个是 app.py,用 Python 自带的 http.server 做一个最简服务,不需要额外框架就能先跑通:代码逻辑是定义一个返回“Hello Docker”的处理函数,监听 8000 端口。第二个是 requirements.txt,如果暂时只用标准库,这份文件可以先留空,但保留它是个好习惯,后面加 Flask 等依赖时直接写进去就行。第三个也是最关键的 Dockerfile:第一行写 FROM python:3.12-slim 选择一个体积较小的官方基础镜像;接着 WORKDIR /app 设定工作目录;然后 COPY . . 把代码拷进镜像;最后 CMD ["python", "app.py"] 指定容器启动时执行的命令。
文件准备好后,在该目录执行 docker build -t my-python-web . 构建镜像,句号表示使用当前目录的 Dockerfile。构建完成后执行 docker images 能看到刚生成的镜像。再执行 docker run -d -p 8000:8000 --name web1 my-python-web,-d 是后台运行,-p 是把宿主机的 8000 端口映射到容器的 8000 端口。这时打开浏览器访问 http://localhost:8000,如果看到返回内容,说明第一套容器服务已经跑通了。用 docker ps 可以查看正在运行的容器,用 docker logs web1 看日志,用 docker stop web1 停止,用 docker rm web1 删除容器。镜像还在,下次一条 run 命令就能再拉起来。
实际使用中有几个小经验值得记住。第一,镜像尽量选 slim 或 alpine 这类小基础镜像,下载快、占空间少。第二,不要把密码、密钥写进 Dockerfile,它们会留在镜像历史里,敏感配置应该用环境变量在 run 时通过 -e 传入。第三,一个容器只做一件事,Web 服务和数据库分开两个容器,后面再用 Docker Compose 统一管理,比全塞进一个容器清晰得多。第四,代码改了要重新 build,不要直接进容器里改文件,容器删掉修改就没了。
跑通这个最小例子之后,后续的学习路径就很自然了:先把服务换成 Flask 或 FastAPI,再学用 Compose 同时启动 Web 和 Redis,最后把镜像推到仓库、在云服务器上拉下来运行。整个过程不需要一上来就懂 Kubernetes,先把镜像、容器、端口映射、数据卷这四个概念在动手里弄明白,后面的工具都是在这个基础上的延伸。希望这篇记录能帮第一次接触容器的朋友少绕一点弯路,真正把时间花在写代码上,而不是反复折腾环境上。
- 点赞
- 收藏
- 关注作者
评论(0)