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。

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

文章很值,打赏犒劳作者一下