如何打包Docker Unifi-WiFi?

Docker

1 基础知识

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

如何基于Debian部署UBNT Unifi控制器?

2 最佳实践

2.1 部署前的准备

2.1.1 部署Docker环境

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

如何部署Docker生产环境?

2.1.2 准备系统镜像

In docker01

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

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

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

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

2.2 创建新镜像

2.2.1 创建镜像项目文件夹

mkdir ~/imageProject-Unifi-WiFi

2.2.2 创建Dockerfile

vim ~/imageProject-Unifi-WiFi/Dockerfile

加入如下配置,

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

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

# Base config
RUN apt install -y wget vim curl net-tools systemd procps

# install mongodb
RUN apt install -y gnupg ca-certificates apt-transport-https
RUN wget -qO - https://www.mongodb.org/static/pgp/server-3.4.asc | apt-key add -
RUN echo "deb http://mirrors.163.com/mongodb/apt/debian jessie/mongodb-org/3.4 main" > /etc/apt/sources.list.d/mongodb-org-3.4.list
RUN echo "deb http://mirrors.163.com/debian-security jessie/updates main" >> /etc/apt/sources.list.d/debian.list
RUN apt update
RUN apt install -y mongodb-org-server
RUN systemctl enable mongod.service

# install openjdk
RUN apt install -y openjdk-11-jdk-headless binutils jsvc logrotate
COPY jdk-8u151-linux-x64.tar.gz /root/
WORKDIR /root/
RUN tar -xf jdk-8u151-linux-x64.tar.gz
RUN mkdir /usr/java
RUN mv jdk1.8.0_151 /usr/java/
RUN echo 'export JAVA_HOME=/usr/java/jdk1.8.0_151' > /etc/profile.d/jdk.sh
RUN echo 'export JRE_HOME=${JAVA_HOME}/jre' >> /etc/profile.d/jdk.sh
RUN echo 'export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib' >> /etc/profile.d/jdk.sh
RUN echo 'export PATH=${JAVA_HOME}/bin:$PATH' >> /etc/profile.d/jdk.sh
RUN echo "JAVA_HOME=/usr/java/jdk1.8.0_151" | tee -a /etc/default/unifi

# install unifi
WORKDIR /root/
ENV DEBIAN_FRONTEND noninteractive
RUN wget https://dl.ui.com/unifi/5.12.72/unifi_sysvinit_all.deb
RUN dpkg -i unifi_sysvinit_all.deb; apt-get install -f; apt-get clean
RUN systemctl enable unifi.service

# config start
EXPOSE 8443 6789 8843 8880 8080 3478/udp 10001/udp
CMD ["/sbin/init"]

需要注意的是,
– “FROM”指令声明基于“debian:10.10”镜像打包
– “RUN”指令声明容器环境执行的命令
– “COPY”指令声明复制当前目录的具体文件到打包的镜像
– “EXPOSE ”指令声明容器使用的端口
– “WORKDIR”指令声明切换容器内部的某个目录
– “CMD”指令声明启动容器执行的启动服务命令
根据打包文件的需要,我们需要使用如下命令准备java安装包,

cd ~/imageProject-Unifi-WiFi
wget http://download.oracle.com/otn-pub/java/jdk/8u111-b14/jdk-8u65-linux-x64.tar.gz?AuthParam=1479977626_06aed8a715c8fbbc10f72c89ee38910b -O jdk-8u65-linux-x64.tar.gz

以上只是演示,如果不能下载请从JDK历史版本下载,
https://www.oracle.com/technetwork/java/javase/archive-139210.html
更新版本的JDK下载页面请参阅,
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

2.2.3 执行打包操作

cd ~/imageProject-Unifi-WiFi
docker build -t build/unifi-wifi:5.12.72 .

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

[...]
Removing intermediate container a4dadbf9cd87
 ---> e0bc3cb56791
Successfully built e0bc3cb56791
Successfully tagged build/unifi-wifi:5.12.72

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

docker images

可见如下显示,

REPOSITORY                                      TAG        IMAGE ID       CREATED          SIZE
build/Unifi-WiFi                                     5.12.72     e0bc3cb56791   25 seconds ago   2.14GB
[...]

2.2.4 测试软件运行

docker run -d --privileged=true --name Unifi-WiFi build/unifi-wifi:5.12.72

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

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

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

netstat -anp | grep java

可见如下显示,

tcp        0      0 0.0.0.0:8880            0.0.0.0:*               LISTEN      360/java
tcp        1      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      360/java
tcp        0      0 127.0.0.1:44778         127.0.0.1:27117         ESTABLISHED 360/java
tcp        0      0 127.0.0.1:44780         127.0.0.1:27117         ESTABLISHED 360/java
unix  2      [ ]         STREAM     CONNECTED     1718985  360/java

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

exit

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

docker ps -a

可见如下显示,

CONTAINER ID   IMAGE                                                 COMMAND                  CREATED          STATUS          PORTS                                                                                                                                                                                NAMES
6fff47b49759   build/unifi-wifi:5.12.72                                    "/sbin/init"             31 seconds ago   Up 29 seconds   8080/tcp, 8880/tcp                                                                                                                                                                   Unifi-WiFi
[...]

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

docker container stop 6fff47b49759
docker container rm 6fff47b49759

2.3 部署服务

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

如何部署Docker Unifi-WiFi?

参阅文档
===============
下载链接
————
https://www.ui.com/download/unifi/

版本需求
———-
https://community.ui.com/releases/UniFi-Network-Application-6-2-26/0dfcbc77-8a4f-4e20-bb93-07bbb0237e3a

没有评论

发表回复

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

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

Docker
如何打包Docker Nginx?

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

Docker
如何打包Docker MAC-Telnet?

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