小王刚写完一个Python写的天气查询API,想让同事在公司内网直接试用,又不想折腾ref="/tag/414/" style="color:#874873;font-weight:bold;">服务器环境。他打开终端,敲了几行命令,不到两分钟,服务就跑起来了——靠的就是Docker部署应用。
为什么不用手动装环境?
以前部署一个Node.js项目,得先确认服务器有没有装Node、版本对不对、npm依赖装全没、端口被占没……光是配环境就能耗掉半天。Docker把整个运行环境(代码+依赖+配置+系统库)打包成镜像,像U盘插上就能用,不挑机器,不踩坑。
三步走,部署一个Flask应用
假设你有个简单Flask项目,结构长这样:
.
├── app.py
├── requirements.txt
└── Dockerfile在项目根目录写个 Dockerfile:
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
EXPOSE 5000
CMD ["gunicorn", "--bind", "0.0.0.0:5000", "app:app"]再建个 requirements.txt,写上:
flask==2.3.3
gunicorn==21.2.0然后终端里执行:
docker build -t weather-api .
docker run -d -p 8080:5000 --name weather weather-api浏览器打开 http://localhost:8080,服务已经在线了。改代码?重新build再run,旧容器自动停,新容器顶上,不冲突、不留残渣。
上线前顺手加个.dockerignore
就像Git有.gitignore,Docker也建议配个 .dockerignore,把 __pycache__、.git、venv 这些不用打进镜像的文件夹列进去,镜像更干净、构建更快。
实际用起来的小经验
开发时常用 docker run -it --rm -p 5000:5000 -v $(pwd):/app weather-api 启动——带 -v 挂载本地代码,改完保存直接生效,不用反复build;上线用 -d 后台跑,加 --restart=unless-stopped,服务器重启后服务自动拉起;日志看 docker logs -f weather,比翻log文件直观多了。