MikroTik RouterOS 运行 docker 容器

环境准备

软件以及系统信息

系统 版本 备注
RouterOS 7.10.2 x86架构
container 7.10.2 注意此版本一定要和ROS版本一致

网络说明

网卡名称 IP地址 备注
WAN 192.168.159.254/24 模拟光猫拨号,从光猫上自动获取IP
LAN 10.31.0.254/24 内网网关地址, 是一个 bridge 设备
LAN1 LAN bridge 舍中的 ports
LAN2 LAN bridge 舍中的 ports
docker 172.17.0.0/24 容器使用的网断,是一个 bridge 设备 <\br> 此设备可以不创建,直接使用 LAN 设备
veth-NX 172.17.0.X/24 容器使用的网卡,名称可以自定义, 按需配置, 比如 veth-nginx0, 172.17.0.2/24

安装 container

1. 下载 ROS 7.10.2 的 Extra packages

官网上下载 Extra packages; 注意下载对应架构以及版本的 Extra packages.

20230808161915.png

2. 上传 container 包 到 ROS 上

将下载的 Extra packages(all_packages-x86-7.10.2.zip) 解压, 解压后 all_packages-x86-7.10.2 目录下的 所有以 .npk 结尾的文件或者 container-7.10.2.npk 文件上传至 ROS 的 file 中;

20230808162927.png

3. 安装 container

3.1 重启 ROS
/system/reboot

ROS 重启时会自动安装 file.npk 文件

3.2 重启确认是否安装成功
/system/package/print

20230808163709.png

4. 启动容器

# 1. 查看 ROS 的 device-mode 模式
/system/device-mode/print

# 2. 在 enterprise 模式下开启容器
/system/device-mode/update container=yes

20230808164226.png

注意:
当执行完 /system/device-mode/update container=yes 命令后,需要在5分钟内断电重启,此时直接执行 /system/reboot 命令是不行的, 必须直接拔电源才能进入容器模式(虚拟机直接关机再开机即可); 如果直接执行重启命令或者5分钟内没有任何操作, 更新命令会被取消.

Tips:
新版的ROS新增了 device-mode 来对设备功能进行限制;其有两种模式: enterprise(企业模式)home(家庭模式); 默认情况下都是限制使用container

5. 配置容器使用的网络

# 1. 创建容器使用的bridge设备
# 可以不用为容器专门创建一个bridge,使用内网的 `LAN` brigade设备,缺点是容器使用内网IP
/interface/bridge/add name=docker

# 2. 配置 docker bridge 的IP
/ip/address/add address=172.17.0.1/24 interface=docker

# 3. 创建防火墙规则, 运行容器访问外网
/ip/firewall/nat/add chain=srcnat src-address=172.17.0.0/24 action=masquera
de

20230808170923.png

6. 容器基础配置

# 1. 配置容器镜像地址
# tmpdir: 表示容器存储位置
/container/config/set registry-url=https://docker.mirrors.ustc.edu.cn tmpdir=containers

7. 启动测试容器

# 1. 创建容器使用的网卡
/interface/veth/add name=veth-nginx0 address=172.17.0.2/24 gateway=172.17.0.1

# 1.1 将容器的网卡加入到 docker bridge 设备中
# 注意:只有将网卡加入到bridge中, 容器才能访问外网
/interface/bridge/port add interface=veth-nginx0 bridge=docke

# 2. 创建容器
# ROS创建容器的同时会下载镜像,因此有2种方式创建容器

# 方式一:在线自动下载镜像
/container/add remote-image=nginx:1.18.0 interface=veth-nginx0 dns=10.31.0.254 hostname=test-nginx logging=yes

# 方式二: 上传镜像文件到 ROS `file` 中,使用本地镜像运行容器
/container/add file=nginx-1.18.0.tar.gz interface=veth-nginx0 dns=10.31.0.2
54 hostname=test-nginx logging=yes

# 3. 查看容器
/container/print

# 4. 启动容器
/container/start number=0

# 5. 进入容器
/container/shell number=0

8. 访问容器服务

此时, 内网客户端可以直接访问容器服务了;

20230808173553.png

如果外网想要访问容器的服务需要做端口转发;

/ip/firewall/nat/add chain=dstnat dst-address=192.168.159.254 dst-port=8081 protocol=tcp to-addresses=172.17.0.2 to-ports=80 action=dst-nat 
上一篇
下一篇