环境准备
软件以及系统信息
系统 | 版本 | 备注 |
---|---|---|
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.
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
中;
3. 安装 container
3.1 重启 ROS
/system/reboot
ROS 重启时会自动安装
file
中.npk
文件
3.2 重启确认是否安装成功
/system/package/print
4. 启动容器
# 1. 查看 ROS 的 device-mode 模式
/system/device-mode/print
# 2. 在 enterprise 模式下开启容器
/system/device-mode/update container=yes
注意:
当执行完/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
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. 访问容器服务
此时, 内网客户端可以直接访问容器服务了;
如果外网想要访问容器的服务需要做端口转发;
/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