本文讲的是如何将开源视频剪辑框架FFCreator部署到容器中。
其依赖的运行时较多,在尝试将其打包成单个可执行文件失败后,我决定将整个运行时打入镜像。
创建Dockerfile
下面Dockerfile并非完整的Dockerfile,但是主体部分已经给出
FROM 某个centos镜像
MAINTAINER 你的邮箱地址
# ffcreator依赖 项目安装
RUN yum -y install gcc-c++ cairo-devel pango-devel libjpeg-turbo-devel giflib-devel
RUN yum -y install mesa-dri-drivers Xvfb libXi-devel libXinerama-devel libX11-devel
# 安装gcc 和 make
RUN yum -y install gcc automake autoconf libtool make
# 安装 python3
RUN yum -y install python3
# 更新 gcc 搭配 7.3,自带的4.8不符合后面安装ffcreator的要求
RUN yum -y install centos-release-scl devtoolset-7-gcc devtoolset-7-gcc-c++ devtoolset-7-binutils
RUN echo "source /opt/rh/devtoolset-7/enable" >>/etc/profile
# 增加node运行时
RUN wget https://nodejs.org/dist/v16.15.0/node-v16.15.0-linux-x64.tar.gz
RUN tar -zxvf node-v16.15.0-linux-x64.tar.gz -C /usr/local
RUN ln -s /usr/local/node-v16.15.0-linux-x64/bin/npm /usr/bin/
RUN ln -s /usr/local/node-v16.15.0-linux-x64/bin/node /usr/bin/
# 配置 npm 依赖的python版本
RUN config set python python3.6
## 安装 node-gyp
RUN npm install -g node-gyp
# 增加nodejs项目文件
ADD package.json /
其中package.json
依赖部分如下所示:
"dependencies": {
"canvas": "^2.9.1",
"ffcreator": "^6.6.9"
}
因为在Dockerfile里选择用source改变gcc版本总是不生效,所以,我选择用其他方法解决:
选择生成容器后,进入容器,执行 source /etc/profile
,然后 npm install
, 然后将该container保存为image
docker commit <容器id> <容器名称>:<容器版本>
解决容器内运行ffcreator报错问题
在容器里执行node脚本,使用ffcreator进行视频编辑时,原先在ubuntu环境下可以用的脚本报错了,内容如下:
Cannot read property 'ARRAY_BUFFER' of null
其实就是因为我们的容器属于无显示设备的服务器
,那么按照 github上的issue 解决就好了,即:
无显示设备的服务器请使用xvfb-run命令启动程序:
xvfb-run -s "-ac -screen 0 1280x1024x24" npm start
在原先的命令前面加上这么一句就好了
xvfb-run -s "-ac -screen 0 1280x1024x24"