Docker 新手入门:把你的第一个 Python 项目装进容器
刚学 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,一条命令同时拉起应用和数据库。容器化这条路,动手跑一次胜过看十篇文档,不妨现在就打开终端试试。
- 点赞
- 收藏
- 关注作者
评论(0)