题目
编写一个运行Python应用的Dockerfile
信息
- 类型:问答
- 难度:⭐
考点
Dockerfile基础指令,容器构建流程,镜像分层原理
快速回答
一个基础的Dockerfile应包含以下核心指令:
FROM python:3.8-slim- 指定基础镜像WORKDIR /app- 设置工作目录COPY app.py .- 复制应用文件CMD ["python", "app.py"]- 定义容器启动命令
原理说明
Dockerfile是构建Docker镜像的蓝图,采用分层存储机制。每条指令都会创建一个新的镜像层,层复用可提升构建效率。
完整代码示例
# 使用官方Python轻量镜像
FROM python:3.8-slim
# 设置容器内工作目录
WORKDIR /app
# 将宿主机当前目录的app.py复制到容器工作目录
COPY app.py .
# 容器启动时执行的命令
CMD ["python", "app.py"]最佳实践
- 使用特定版本标签:如
python:3.8-slim而非python:latest,确保环境稳定 - 精简镜像:
-slim版本减少镜像体积 - 明确工作目录:
WORKDIR替代RUN cd,路径更清晰 - 使用数组格式的CMD:避免shell解析问题
常见错误
- 路径错误:
COPY时未注意宿主机和容器的路径对应关系 - 指令混淆:误用
RUN(构建时执行)代替CMD(运行时执行) - 权限问题:未设置
WORKDIR可能导致文件操作在根目录 - 镜像臃肿:使用完整版镜像(如
python:3.8)而非轻量版
扩展知识
- 镜像构建命令:
docker build -t my-python-app . - 运行容器:
docker run --rm my-python-app - 分层验证:执行
docker history my-python-app可查看镜像分层结构 - 多阶段构建:复杂场景可使用多阶段构建进一步优化镜像大小