项目组开发过程用因为要使用音频格式转换功能,通过查阅相关资料,最终选择使用 FFmpeg。关于ffmpeg的安装,有的人可能要折腾很久,甚至折腾一个礼拜,究其原因,基本都是编译安装惹的祸。
项目开发团队成员中,有使用Windows、Ubuntu、macOS等系统进行开发,测试、生产环境可能是CentOS、Fedora、Ubuntu、Windows等系统的情况。考虑到未来可能有其他成员接手项目,如果每个人都花时间安装FFmpeg,因为环境差异不知道得折腾多久。为了提高生产率(降本增效),于是决定使用docker安装ffmpeg。
1. 搜索镜像
前提:已经安装docker
使用 docker search --no-trunc ffmpeg
命令搜索 ffmpeg 并查看完整镜像描述
(base) mjl@ubuntu:~$ docker search --no-trunc ffmpeg
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
jrottenberg/ffmpeg FFmpeg 2.8 - 3.x - 4.x Copyright (c) 2000-2017 the FFmpeg developers 419 [OK]
linuxserver/ffmpeg 106
opencoconut/ffmpeg Minimal FFmpeg Docker image built on Alpine Linux 30 [OK]
nachochip/ffmpeg ffmpeg (x264, fdk-aac) inside debian 14 [OK]
nightseas/ffmpeg FFmpeg with CUDA encoder/decoder support. 8 [OK]
selenium/video Image with ffmpeg meant to be used with a Dynamic Grid 7
alfg/ffmpeg An FFmpeg Dockerfile from source. Built on Alpine Linux. 6 [OK]
jellyfin/ffmpeg 4
datarhei/ffmpeg FFmpeg Development Image for H.264-Processing 4
rafalkrypa/ffmpeg Latest FFmpeg static build on minimal Alpine Linux container 3
sjourdan/ffmpeg FFmpeg on Alpine Docker Image 3 [OK]
ffmpeg/coverity Environment for automated coverity testing of FFmpeg. 2 [OK]
mycujoo/ffmpeg-docker ffmpeg docker container 0 [OK]
krickwix/ffmpeg 0
nicholasrobinson/ffmpeg-homebridge A Homebridge Dockerfile built on oznu/docker-homebridge with FFmpeg copied from alfg/ffmpeg. 0
azamserver/nextcloud-imagemagick-ffmpeg A Nextcloud docker image with ImageMagick & FFmpeg preinstalled 0
jamesarems/ffmpeg CentOS 8 based ffmpeg server 0
onlinetvrecorder/ffmpeg 0
vulhub/ffmpeg 0
ffmpegextrah/ffmpeg 0
ffmpegclearu/ffmpeg 0
thinkz/ffmpeg ffmpeg with librtmp 0
umnelevator/ffmpeg 0
nicolasarnaud4viseo/ffmpeg 0
chpkg/ffmpeg-to-s3
2. 拉取镜像
从上面的搜索结果中我们可以看到第一行 jrottenberg/ffmpeg 的 Stars 最多, 果断就用它了。
使用 docker pull jrottenberg/ffmpeg
命令拉取镜像(提前换好速度快的镜像源,否则就耐心等待吧):
(base) mjl@ubuntu:~$ docker pull jrottenberg/ffmpeg
Using default tag: latest
latest: Pulling from jrottenberg/ffmpeg
7b722c1070cd: Pull complete
5fbf74db61f1: Pull complete
ed41cb72e5c9: Pull complete
7ea47a67709e: Pull complete
c56548ea744b: Pull complete
24130a6ef4f3: Pull complete
2d757c4d9a11: Pull complete
Digest: sha256:21eb739725c43bd7187982e5fa4b5371b495d1d1f6f61ae1719ca794817f8641
Status: Downloaded newer image for jrottenberg/ffmpeg:latest
docker.io/jrottenberg/ffmpeg:latest
3. 导出镜像
拉取完成后,使用 docker image ls
列出本地已经下载的镜像。我们看到有一个jrottenberg/ffmpeg
镜像,大小为218MB。
(base) mjl@ubuntu:~$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
jrottenberg/ffmpeg latest 2100506dfbea 4 years ago 218MB
我们需要将该镜像导出成 tar 包。可以使用以下命令导出:
(base) mjl@ubuntu:~$ docker save -o ffmpeg.tar jrottenberg/ffmpeg:latest
导出为 ffmpeg.tar
文件:
(base) mjl@ubuntu:~$ ll
-rw------- 1 mjl mjl 222621696 5月 3 22:27 ffmpeg.tar
导出的 tar 包可以通过 scp 或者 ftp 将其传输至离线服务器。
4. 加载镜像
在服务器中,使用 docker image ls
列出本地已经下载的镜像,可以看到服务器上只有一个 hello-word
镜像(如下所示)。
(base) [root@10-23-2-211 ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest bf756fb1ae65 3 years ago 13.3kB
接下来使用 docker load -i ffmpeg.tar
将 tar 包导入 Docker 中:
(base) [root@10-23-2-211 ~]# docker load -i ffmpeg.tar
0de2edf7bff4: Loading layer [==================================================>] 121.3MB/121.3MB
b2fd8b4c3da7: Loading layer [==================================================>] 15.87kB/15.87kB
f67191ae09b8: Loading layer [==================================================>] 11.78kB/11.78kB
68dda0c9a8cd: Loading layer [==================================================>] 3.072kB/3.072kB
1c86e8f0fce5: Loading layer [==================================================>] 2.048kB/2.048kB
e38e18db08fb: Loading layer [==================================================>] 31.93MB/31.93MB
b0e2549b869a: Loading layer [==================================================>] 69.36MB/69.36MB
Loaded image: jrottenberg/ffmpeg:latest
导入完成后,我们继续使用 docker image ls
命令查询是否成功导入:
(base) [root@10-23-2-211 ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest bf756fb1ae65 3 years ago 13.3kB
jrottenberg/ffmpeg latest 2100506dfbea 4 years ago 218MB
从上面的输出结果中可以看出多了一个 jrottenberg/ffmpeg
镜像,大小218MB,说明导入成功。
5. 启动容器
使用 docker ps
查看运行的容器:
(base) [root@10-23-2-211 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
启动容器:
(base) [root@10-23-2-211 ~]# docker run -itd --name app_ffmpeg -p 8066:8080 -v /home/mjl/ffmpeg/:/mnt/app/ --entrypoint='bash' jrottenberg/ffmpeg
2cd7573a3c44da0ccfacd1e46cb40a523dfaf99dc0e298db3053f473a0ecd11e
再次使用 docker ps
查看运行的容器:
(base) [root@10-23-2-211 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2cd7573a3c44 jrottenberg/ffmpeg "bash" 4 seconds ago Up 3 seconds 0.0.0.0:8066->8080/tcp app_ffmpeg
此时容器已启动。
作者:mjl
来源: 十年磨一剑2020
原文:https://mp.weixin.qq.com/s/xjiv0QcV0Tx-ysipOkSZeA
版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。