前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用dockerfile构建推流服务器

使用dockerfile构建推流服务器

作者头像
dogfei
发布2020-07-31 13:57:43
1.2K0
发布2020-07-31 13:57:43
举报
文章被收录于专栏:devops探索

介绍

推流服务器上需要安装多个服务和依赖包,以及许多个依赖库,例如:python3,pip3,nginx,ffmpeg,vlc,以及一些依赖:yasm库,libwebp库,libOpenJpeg库等

因为特殊需求,这里需要将这些服务均构建到一个镜像里,具体实现方法如下。

构建

首先随便创建一个目录,用来存放Dockerfile及构建过程中所需要的一些安装包等

代码语言:javascript
复制
# tree 
.
├── Dockerfile
├── Dockerfile.depend
├── Dockerfile.ffmpeg
├── Dockerfile.vlc
├── entrypoints.sh
├── fdk-aac-0.1.6.tar.gz
├── ffmpeg.tar.gz
├── get-pip.py
├── lame-3.100.tar.gz
├── libwebp-1.0.2.tar.gz
├── live-server-new.tar
├── openjpeg-2.3.0.tar.gz
├── pip_requirements.txt
├── SDL2-2.0.9.tar.gz
├── sources.list
├── thrid_lib.tar.gz
├── vlc.tar.gz
├── x264-snapshot-20171002-2245-stable.tar.bz2
└── yasm-1.3.0.tar.gz

为了便于排查问题,我们分为几步来做,首先构建一个具有ssh的基础镜像,然后将所有的依赖包打到镜像里,然后安装ffmpeg,再安装vlc,python3,pip3及一些特殊的模块,最后我们映射端口和目录,以及将entrypoint要执行的脚本放到镜像里去执行。这样做增加了扩展性,比如我们需要再映射其他端口时,不需要重新将所有的Dockerfile执行一遍,只需要以之前构建好的镜像作为基础镜像,再次构建一次即可!

下面是具体的实施方法

构建具有ssh和所需依赖包的镜像

代码语言:javascript
复制
# cat Dockerfile.depend 
FROM ubuntu:16.04
COPY sources.list /etc/apt/
RUN apt-get -y update \
    && apt-get install -y openssh-server vim libtool sudo net-tools make cmake \
    build-essential automake autopoint pkg-config gettext \
    && mkdir /var/run/sshd \
    && echo "root:123321" | chpasswd \
    && sed -ri 's/^#?PermitRootLogin\s+.*/PermitRootLogin yes/' /etc/ssh/sshd_config \
    && sed -ri 's/UsePAM yes/#UsePAM yes/g' /etc/ssh/sshd_config \
    && mkdir /root/.ssh \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* \
    && mkdir -p /data/tmp/
ADD yasm-1.3.0.tar.gz /data/tmp/
ADD SDL2-2.0.9.tar.gz /data/tmp/
ADD openjpeg-2.3.0.tar.gz /data/tmp/
ADD libwebp-1.0.2.tar.gz /data/tmp/
ADD lame-3.100.tar.gz /data/tmp/
ADD fdk-aac-0.1.6.tar.gz /data/tmp/
ADD x264-snapshot-20171002-2245-stable.tar.bz2 /data/tmp/

WORKDIR /data/tmp/yasm-1.3.0/
RUN ./configure && make && make install

WORKDIR /data/tmp/x264-snapshot-20171002-2245-stable/
RUN ./configure --enable-shared --enable-static --enable-yasm \
    && make \
    && make install

WORKDIR /data/tmp/libwebp-1.0.2
RUN ./configure \
    --prefix=/usr \
    --enable-libwebpmux \
    --enable-libwebpdemux \
    --enable-libwebpdecoder \
    --enable-libwebpextras \
    --enable-swap-16bit-csp \
    && make \
    && make install

WORKDIR /data/tmp/lame-3.100   
RUN ./configure && make && make install

WORKDIR /data/tmp/fdk-aac-0.1.6
RUN ./configure && make && make install

WORKDIR /data/tmp/SDL2-2.0.9
RUN ./configure && make && make install

WORKDIR /data/tmp/openjpeg-2.3.0
RUN cmake -DCMAKE_INSTALL_PREFIX=/usr && make && make install

RUN rm -rf /data/tmp/*

构建方式: docker build -t ffmpeg:depend .

构建ffmpeg镜像

代码语言:javascript
复制
# cat Dockerfile.ffmpeg 
FROM ffmpeg:depend         #以上一个步骤做好的镜像作为基础镜像
ADD ffmpeg.tar.gz /data/tmp
WORKDIR /data/tmp/ffmpeg
RUN ./configure \
    --prefix=/usr \
    --enable-shared \
    --enable-yasm \
    --enable-libx264 \
    --enable-avfilter \
    --enable-gpl \
    --enable-sdl \
    --enable-libwebp \
    --enable-avresample \
    --enable-libmp3lame \
    --enable-libfdk-aac \
    --enable-nonfree \
    --enable-libopenjpeg \
    && make -j2 \
    && make install
RUN rm -rf /data/tmp/* \
    && apt-get clean \
    && apt-get autoremove

构建方式: docker build -t ffmpeg:v1 .

构建vlc及python等镜像

代码语言:javascript
复制
# cat Dockerfile.vlc 
FROM ffmpeg:v1
ADD vlc.tar.gz /data/tmp/
COPY get-pip.py /data/tmp/
COPY pip_requirements.txt /data/tmp/
RUN apt-get -y update \
    && apt-get -y install software-properties-common \
    && add-apt-repository ppa:jonathonf/ffmpeg-3 \
    && apt-get -y update \
    && apt-get -y install python3.5-dev htop sysstat rsync nginx-full libavcodec-dev git \
    && apt-get -y build-dep vlc \
    && apt-get -y install bison flex \
    && groupadd www \
    && useradd -rm -d /home/www -s /bin/bash -g root -G sudo -u 1000 www \
    && echo "www:Tccm@2008" | chpasswd \
    && chown -R www.www /data \
    && apt-get clean \
    && apt-get -y autoremove

WORKDIR /data/tmp/
RUN python3 get-pip.py \
    && pip3 install -r pip_requirements.txt

WORKDIR /data/tmp/vlc
RUN ./bootstrap \
    && ./configure \
    --disable-xcb \
    --disable-chromecast \
    --prefix=/usr/local/vlc \
    && make \
    && make install

构建方式: docker build -t ffmpeg:vlc .

最后操作

代码语言:javascript
复制
# cat Dockerfile
FROM ffmpeg:vlc
RUN sed -i 's/Port 22/Port 2222/g' /etc/ssh/sshd_config \
    && rm -rf /data/tmp/* \
    && apt-get -y autoremove \
    && apt-get clean \
    && ln -s /usr/local/vlc/bin/* /usr/local/bin/
ENV PATH=/usr/local/vlc/bin:$PATH #设置环境变量,也可以直接使用软连接,保留一个即可
COPY entrypoints.sh /
EXPOSE 2222
VOLUME ['/data/','/etc/nginx/','/var/log/nginx/']
ENTRYPOINT ["/entrypoints.sh"]

构建方式: docker build -t live-server:v1 .

启动容器

代码语言:javascript
复制
docker run -d -it --net host --name live-server -v /data/volume/live-server:/data/ -v /data/volume/logs/nginx:/var/log/nginx -v /data/volume/conf/nginx:/etc/nginx  live-server:v1 /bin/bash

下面看下几个常用的镜像导入导出命令

导出镜像

查看镜像ID

docker image ls live-server:v1

导出镜像

docker save da5f3eb5d728 > live-server-new.tar

导入镜像

docker load < live-server-new.tar

设置镜像名及标签

docker tag da5f3eb5d728 v1 live-server

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-03-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 构建
  • 构建具有ssh和所需依赖包的镜像
  • 构建ffmpeg镜像
  • 构建vlc及python等镜像
  • 最后操作
  • 启动容器
  • 导出镜像
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档