NJet Docker镜像介绍与运行

🙈 By 刘琪 2024-03-13

NJet Docker镜像介绍与运行


镜像简介

镜像内NJet文件说明

NJet镜像中NJet安装目录为/usr/local/njet/,如下图所示:

img

Njet镜像文件介绍
文件名(相对于/usr/local/njet/) 描述 备注
conf NJet启动需要的配置
data NJet运行时产生的数据 docker run 时,可以挂载宿主机文件到容器内,便于配置、日志、数据持久化到宿主机
logs NJet运行时产生的日志
modules NJet动态模块 实现NJet特性
lualib NJet依赖的lua
sbin NJet二进制可执行程序

镜像参数说明

label信息

label名 含义 示例 备注
njet.org.cn.image.build.target 构建镜像的主机系统架构 linux/amd64
njet.org.cn.image.build.os 基础镜像镜像 ubuntu
njet.org.cn.image.njet.revision NJet commit id 44661bb6fae0ecee4d1c28dee53a3f06582a7e05
njet.org.cn.image.njet.version NJet版本,即TAG latest 构建时人为指定的,可能与njet -V不一致

img

镜像内NJet二进制也可以查看源码commit id

img

运行NJet容器

容器启动后,NJet默认监听的端口如下表所述:

端口 描述
8080 NJet数据面端口,实现业务请求处理
8081 NJet控制面端口,实现NJet动态API处理

最小特权

出于安全考虑,在运行NJet容器时,我们推荐使用最小特权启动容器。容器具有指定的能力。 执行如下命令启动NJet。

docker run  -d --rm --cap-drop=ALL --cap-add=cap_dac_override --cap-
add=cap_dac_read_search --cap-add=cap_setuid --cap-
add=cap_net_bind_service --cap-add=cap_net_admin --cap-add=cap_net_raw --
cap-add=cap_setgid --cap-add=cap_audit_write tmlake/njet:latest

–cap-add=cap_setgid 与

–cap-add=cap_audit_write 是为了有权限使用sudo,比如sudo iptables -t nat -S

挂载宿主机文件,执行如下命令启动NJet。

docker run -v /root/liuqi/njet/njet.conf:/usr/local/njet/conf/njet.conf -v
/root/liuqi/njet/njet_ctrl.conf:/usr/local/njet/conf/njet_ctrl.conf -v 
/root/liuqi/njet/logs:/usr/local/njet/logs -v
/root/liuqi/njet/data:/usr/local/njet/data  -d  --rm --cap-drop=ALL --cap-
add=cap_dac_override --cap-add=cap_dac_read_search --cap-add=cap_setuid --
cap-add=cap_net_bind_service --cap-add=cap_net_admin --cap-add=cap_net_raw 
--cap-add=cap_setgid --cap-add=cap_audit_write tmlake/njet:latest

根据自己host目录修改。

-v 宿主机(使用绝对路径,相对路径低版本docker不支持):容器,挂载宿主机文件到容器内

-p 宿主机:容器,将容器端口暴露到宿主机

所有特权

也可以使用privileged启动容器,容器继承内核所有的能力。 执行如下命令启动NJet。

docker run  -d --rm --privileged  tmlake/njet:latest

测试案例

Docker版本

img

最小特权运行

使用镜像内配置启动

执行docker run启动NJet容器,成功运行后屏幕会输出容器id

img

登录容器内,查看NJet运行情况

//登录容器
docker exec -it d7aad0334008 /bin/bash

img

请求测试 容器中执行如下指令

curl http://127.0.0.1:8080/

img

使用宿主机配置启动

执行如下指令启动

img

img

根据自己host目录修改。

-v 宿主机(使用绝对路径,相对路径地版本docker不支持):容器,挂在宿主机文件到容器内

-p 宿主机:容器,>将容器端口暴露到宿主机

登录容器内,查看NJet运行情况

//登录容器
docker exec -it b2b6134b22e2 /bin/bash

img

img

img

请求测试 在宿主机访问/lua

curl http://192.168.40.209:8080/lua

img

range测试

curl http://192.168.40.209:8081/config/2/config/range | jq

img

添加range规则

{
    "action": "add",
    "type": "tcp",
    "src_ports": "11000:13000",
    "dst_port": 10001
}

curl -X PUT http://192.168.40.209:8081/config/2/config/range -d @range.json

img

登录容器内查看规则

docker exec -it b2b6134b22e2 /bin/bash
sudo iptables -t nat -S

img