最近在折腾一个本地ref="/tag/116/" style="color:#2B406D;font-weight:bold;">视频转码工具,想让它在不同机器上都能快速跑起来。试了几种方式,最后还是觉得用 Docker 最省心。装一次环境,到处运行,连配置都不用反复调。
为什么选 Docker 来部署
以前手动安装依赖,FFmpeg、Python 库、各种编解码器,装完一台换下一台还得再来一遍。哪天系统升级出问题,又得重来。Docker 把整个运行环境打包成镜像,启动容器就跟插U盘一样即插即用。
比如你写了个 Python 脚本处理视频封面生成,本地测试没问题,扔到服务器却报错缺库。这种尴尬情况,用 Docker 打包后几乎不会再发生。
基础部署流程走一遍
先在项目根目录写个 Dockerfile,定义运行环境:
FROM python:3.9-slim
RUN apt-get update && \
apt-get install -y ffmpeg && \
rm -rf /var/lib/apt/lists/*
COPY . /app
WORKDIR /app
RUN pip install --no-cache-dir -r requirements.txt
CMD ["python", "video_processor.py"]
然后构建镜像:
docker build -t my-video-tool .
运行容器时挂载视频目录,方便读写文件:
docker run -v /home/user/videos:/app/videos my-video-tool
加点实用配置更顺手
实际用的时候发现,每次敲命令太麻烦。干脆写个 docker-compose.yml 管理服务:
version: '3'
services:
video-tool:
build: .
volumes:
- ./videos:/app/videos
environment:
- LOG_LEVEL=info
以后一键启动:docker-compose up,改代码还能自动重建容器。
如果要在树莓派这类设备跑视频服务,记得用 arm64 镜像基础,不然架构不兼容直接起不来。
遇到的问题和解决办法
一开始没装 ffmpeg,容器里跑转码命令直接报错“command not found”。后来在 Dockerfile 里加上软件源安装步骤才搞定。还有一次是权限问题,宿主机目录没给读写权限,容器进不去文件,加了 --user $(id -u) 指定用户就正常了。
现在家里 NAS 和云服务器都用同一套 Docker 配置,换机器三分钟就能上线,连参数都不用调。