RouterOS v7.1rc4启用docker运行nginx
RouterOS系统版本v7.1rc3或以上版本,并安装Container package功能包(安装container功能包,可以查看之前的RB5009UG+S+IN开机测试视频),由于RouterOS不支持pull,因此需要通过其他系统安装有docker的设备,提取对应平台的文件。测试平台是RB5009UG+S+IN,具备1G内存和1G存储,自身条件满足运行docker。
特别提示:7.1rc5暂时取消了docker功能,7.4.beta4恢复,仅支持ARM、ARM64和x86平台,恢复后的配置可以参见官方文档
基于x86运行docker镜像是无法在ARM平台上运行,因此我将闲置的树莓派3B(ARM32构架),用来生成docker镜像文件,RB5009UG+S+IN是ARM64构架,从我测试结果看是兼容ARM32的镜像文件。
通过树莓派3B,安装docker,输入下面的命令自动安装:
sudo curl -sSL https://get.docker.com | sh
安装完成后,运行docker pull命令,获取nginx
[root@localhost ~]# docker pull nginx
nginx安装成功后,通过save命令,将nginx镜像文件保存
[root@localhost ~]# docker save nginx > arm32nginx.tar [root@localhost ~]# ls anaconda-ks.cfg auto_cactix86 arm32nginx.tar
从树莓派下载文件后,通过winbox将arm32nginx.tar上传到RB5009上,同时上传做好的index.html文件
当前container只能通过CLI命令操作,在创建nginx的docker前需要配置虚拟接口,我规划的docker网络采用桥接,IP地址段为172.16.0.0/24
首先创建veth虚拟以太网接口IP
[admin@MikroTik] /interface/veth>add address=172.16.0.3/24 gateway=172.16.0.1 name=veth1
创建bridge桥接,目的是通过桥接访问docker网络
[admin@MikroTik] /interface/bridge>add name=docker [admin@MikroTik] /interface/bridge/port>add bridge=docker interface=veth1
为桥接的docker接口配置IP,作为网关
[admin@MikroTik] /ip/address>add address=172.16.0.1/24 interface=docker
在mount下,为nginx载入index.html文件,dst是指定docker中的nginx网页路径,规则取名nginx
[admin@MikroTik] /container/mounts>add dst=/usr/share/nginx/html/index.html name=nginx src=/index.html
我这里进指定了网页文件,需要载入自己的nginx配置文件,路径是在/etc/nginx/nginx.conf和/etc/nginx/config.d/default.conf,配置文件如何修改,是你自己决定。
注意:src=指向RouterOS的存储路径(例如,决定把配置文件放在外部USB存储,可以是src=disk1/index.html), dst=指向docker配置文件的路径(具体位置根据不同应用决定,请参考docker相关手册,例如:https://hub.docker.com/)。如果src目录在使用时不存在,那将被dst路径中的默认配置填充。
给容器加载nginx镜像文件,并指定veth1网卡和指定mount载入配置规则nignx
[admin@MikroTik] /container> add file=arm32nginx.tar interface=veth1 mounts=nginx hostname=mynginx
查看配置
[admin@MikroTik] /container> print 0 file=arm32nginx.tar name="c4893373-6af0-4d06-9c62-88000c507447" tag="nginx:latest" os="linux" arch="arm" interface=veth1 mounts=nginx dns="" hostname="mynginx" status=stopped
通过start命令启动
[admin@MikroTik] /container>start 0
第一次启动,需要提取配置,等待大于1-2分钟
[admin@MikroTik] /container> print 0 file=arm32nginx.tar name="c4893373-6af0-4d06-9c62-88000c507447" tag="nginx:latest" os="linux" arch="arm" interface=veth1 mounts=nginx dns="" hostname="mynginx" status=extracting
提取完成后,status会显示running
[admin@MikroTik] /container> print 0 file=arm32nginx.tar name="c4893373-6af0-4d06-9c62-88000c507447" tag="nginx:latest" os="linux" arch="arm" interface=veth1 mounts=nginx dns="" hostname="mynginx" status=running
当前nginx的IP是172.16.0.3,我接入的RB5009的bridge内网192.168.88.0/24,查看路由表
[admin@MikroTik] /ip/route> print Flags: D - DYNAMIC; A - ACTIVE; c, d, y - COPY Columns: DST-ADDRESS, GATEWAY, DISTANCE DST-ADDRESS GATEWAY DISTANCE DAd 0.0.0.0/0 192.168.99.1 1 DAc 172.16.0.0/24 docker 0 DAc 192.168.88.0/24 bridge 0 DAc 192.168.99.0/24 ether1
路由表可以看到172.16.0.0/24的路由,通过浏览器输入172.16.0.3,打开做好的web页面:
这个仅仅是简单网页,如果要建站,肯定还需要php和mysql等,就需要单独为他们搭建docker。