如何打包Docker Unifi-Video?

Docker

1 基础知识

正式安装前,我们建议你先熟悉以下章节,

如何定义一台数字监控主机(Debian+UBNT Unifi-Video)?

2 最佳实践

2.1 部署前的准备

2.1.1 部署Docker环境

本章使用如下Docker环境部署,参阅本章建议你先搭建以下Docker集群环境并熟悉,

如何部署Docker生产环境?

2.1.2 准备系统镜像

In docker01

cd /data/docker/images/
docker load -i debian:8.6.tar
docker tag debian:8.6 docker01.cmdschool.org:5000/debian:8.6
docker push docker01.cmdschool.org:5000/debian:8.6
docker image rm debian:8.6

另外,安装包的离线下载请在能上网的docker环境的机器上使用如下命令,

docker pull debian:8.6
docker save debian:8.6 -o debian:8.6.tar

另外,其他版本请从以下链接下载,
https://hub.docker.com/_/debian

2.2 创建新镜像

2.2.1 创建镜像项目文件夹

mkdir ~/imageProject-Unifi-Video

2.2.2 创建Dockerfile

vim ~/imageProject-Unifi-Video/Dockerfile

加入如下配置,

FROM docker01.cmdschool.org:5000/debian:8.6
MAINTAINER will@cmdschool.org

# Config apt source
RUN echo 'deb http://mirrors.163.com/debian/ jessie main\n \
deb http://mirrors.163.com/debian-security/ jessie/updates main\n \
deb http://mirrors.163.com/debian/ jessie-updates main\n' \
> /etc/apt/sources.list
RUN cat /etc/apt/sources.list
RUN apt update

# install mongodb openjdk unifi-video
RUN apt install -y wget mongodb-server sudo psmisc lsb-release openjdk-7-jre-headless jsvc vim net-tools
WORKDIR /root/
RUN wget http://dl.ubnt.com/firmwares/unifi-video/3.5.2/unifi-video_3.5.2~Debian7_amd64.deb
RUN dpkg -i unifi-video_3.5.2~Debian7_amd64.deb; apt-get install -f; apt-get clean
RUN sed -i 's/ulimit -H -c 200/#ulimit -H -c 200/g' /usr/sbin/unifi-video

# config start
EXPOSE 7080 6666 1935 7440 7443 7445 7446 7447
CMD ["/sbin/init"]

需要注意的是,
– “FROM”指令声明基于“debian:8.6”镜像打包
– “RUN”指令声明容器环境执行的命令
– “EXPOSE ”指令声明容器使用的端口
– “WORKDIR”指令声明切换容器内部的某个目录
– “CMD”指令声明启动容器执行的启动服务命令

2.2.3 执行打包操作

cd ~/imageProject-Unifi-Video
docker build -t build/unifi-video:3.5.2 .

以上“.”指当前目录为编译目录,编译程序会自动加载“Dockerfile”文件定义,可见如下显示,

[...]
Step 12/12 : CMD ["/sbin/init"]
 ---> Using cache
 ---> c9bbf1147aa9
Successfully built c9bbf1147aa9
Successfully tagged build/unifi-video:3.5.2

完成后,可使用如下命令查看镜像,

docker images

可见如下显示,

REPOSITORY                                      TAG        IMAGE ID       CREATED          SIZE
build/unifi-video                               3.5.2      c9bbf1147aa9   8 minutes ago    728MB
[...]

2.2.4 测试软件运行

docker run -d --privileged=true --name Unifi-Video build/unifi-video:3.5.2

以上运行容器环境后,我们使用以下命令登录容器虚拟机,

docker exec -it `docker container ls | grep 'Unifi-Video' | cut -d" " -f1 ` /bin/bash

可通过如下命令查看倾听的端口,

netstat -anp | egrep "unifi-video|evostreamms" | grep "0.0.0.0:"

可见如下显示,

tcp        0      0 0.0.0.0:7080            0.0.0.0:*               LISTEN      145/unifi-video
tcp        0      0 127.0.0.1:7081          0.0.0.0:*               LISTEN      145/unifi-video
tcp        0      0 0.0.0.0:6666            0.0.0.0:*               LISTEN      285/evostreamms
tcp        0      0 0.0.0.0:1935            0.0.0.0:*               LISTEN      285/evostreamms
tcp        0      0 0.0.0.0:7440            0.0.0.0:*               LISTEN      285/evostreamms
tcp        0      0 0.0.0.0:7443            0.0.0.0:*               LISTEN      145/unifi-video
tcp        0      0 0.0.0.0:7445            0.0.0.0:*               LISTEN      285/evostreamms
tcp        0      0 0.0.0.0:7446            0.0.0.0:*               LISTEN      285/evostreamms
tcp        0      0 0.0.0.0:7447            0.0.0.0:*               LISTEN      285/evostreamms
tcp        0      0 127.0.0.1:1112          0.0.0.0:*               LISTEN      285/evostreamms
udp        0      0 172.17.0.2:51396        0.0.0.0:*                           145/unifi-video
udp        0      0 0.0.0.0:10001           0.0.0.0:*                           145/unifi-video

测试完成后可使用如下命令退出容器虚拟机,

exit

另外,你可以使用如下命令查询当前运行的container,

docker ps -a

可见如下显示,

CONTAINER ID   IMAGE                                                 COMMAND                  CREATED              STATUS              PORTS                                                             NAMES
b6480ecf46ac   build/unifi-video:3.5.2                               "/sbin/init"             About a minute ago   Up About a minute   1935/tcp, 6666/tcp, 7080/tcp, 7440/tcp, 7443/tcp, 7445-7447/tcp   Unifi-Video
[...]

然后可以使用如下命令停止并删除,

docker container stop b6480ecf46ac
docker container rm b6480ecf46ac

2.3 部署服务

本章重点是打包镜像,部署请参阅以下章节,

如何部署Docker Unifi-Video?

参阅文档
===============

https://community.ui.com/questions/UniFi-Video-Installation-Scripts-or-UniFi-Lets-Encrypt-or-Ubuntu-16-04-18-04-18-10-19-04-19-10-20-0/c272abf8-7680-4b73-9d10-c876ab86f4c9
https://help.ui.com/hc/en-us/articles/209754018-UniFi-Video-How-to-Install-UFV-version-3-x-on-a-Legacy-airVision-NVR

https://docs.docker.com/engine/reference/builder/

没有评论

发表回复

Docker
如何修复连接Docker容器虚机无响应?

1 前言 一个问题,一篇文章,一出故事。 笔者最近使用如下命令连接容器发现一直没有响应, docke …

Docker
如何打包Docker Nginx?

1 前言 一个问题,一篇文章,一出故事。 由于docker hub原版本的nginx镜像过于精简,于 …

Docker
如何打包Docker MAC-Telnet?

1 基础知识 一款可以使用MikroTik RouterOS MAC-Telnet协议连接Mikro …