docker

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > 云和虚拟化 > docker > OpenWrt搭建Docker环境

在OpenWrt设备上搭建Docker环境的完整方案

作者:码农阿豪@新空间

OpenWrt 作为一个高度可定制的嵌入式 Linux 发行版,其模块化设计为 Docker 容器化部署提供了可能性,将 Docker 引入 OpenWrt 环境,能够带来许多优势,所以本文给大家分享了在 OpenWrt 设备上搭建 Docker 环境的完整方案,需要的朋友可以参考下

前言

OpenWrt 作为一个高度可定制的嵌入式 Linux 发行版,其模块化设计为 Docker 容器化部署提供了可能性。

将 Docker 引入 OpenWrt 环境,能够带来以下优势:

然而,受限于默认内核配置和硬件资源,在 OpenWrt 上运行 Docker 需解决内核功能支持存储架构适配两大核心问题。本文将基于技术实践,分享在 OpenWrt 设备上搭建 Docker 环境的完整方案,涵盖从内核编译到容器优化的全流程。

一、OpenWrt 与 Docker 的集成前提

1.1 硬件与内核要求

# 必需内核选项
CONFIG_CGROUPS=y          # 控制组资源隔离
CONFIG_NAMESPACES=y       # 容器命名空间
CONFIG_VETH=y             # 虚拟以太网设备
CONFIG_BRIDGE=y           # 网桥支持
CONFIG_OVERLAY_FS=y       # Overlay 文件系统

1.2 软件依赖

# 添加 ARM 架构源示例
echo "src/gz istore https://istore.linkease.com/repo/arm_cortex-a9" >> /etc/opkg/customfeeds.conf
opkg update
opkg install docker dockerd
mkdir -p /mnt/docker
mount /dev/sda1 /mnt/docker  # 假设 sda1 为扩展存储设备
dockerd --data-root=/mnt/docker &

二、Docker 环境部署与验证

2.1 基础服务配置

# 启动 Docker 守护进程(指定存储路径)
/etc/init.d/docker start --data-root=/mnt/docker

# 验证 Docker 安装
docker info | grep "Storage Driver"  # 应返回 overlay2

2.2 存储驱动适配

若使用 overlay2 驱动,需确保:

三、容器化应用部署实践

3.1 资源限制策略

通过 cgroups 控制容器资源开销:

# 限制容器内存为 256MB,CPU 权重为 50%
docker run -d --name my_app \
  --memory=256m \
  --cpu-shares=512 \
  -p 8080:80 \
  nginx:alpine

3.2 Docker Compose 适配

OpenWrt 需手动安装 Python 环境:

opkg install python3 python3-pip
pip3 install docker-compose

编写 docker-compose.yml

version: "3.8"
services:
  web:
    image: nginx:alpine
    ports:
      - "8080:80"
    deploy:
      resources:
        limits:
          cpus: "0.5"
          memory: 256M

四、性能优化与监控

4.1 容器资源监控

# 实时查看容器资源占用
docker stats --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}"

# 生成性能报告
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \
  docker.io/docker/docker-bench-security

4.2 镜像精简策略

示例 Dockerfile:

FROM golang:1.18 AS builder
WORKDIR /app
COPY . .
RUN CGO_ENABLED=0 go build -o main .

FROM alpine:3.15
COPY --from=builder /app/main /
CMD ["/main"]

五、典型问题解决方案

5.1 端口冲突处理

禁用 OpenWrt 默认占用的 80 端口服务:

/etc/init.d/uhttpd stop
/etc/init.d/uhttpd disable

5.2 低性能设备适配

docker run --log-driver=json-file \
  --log-opt max-size=10m \
  --log-opt max-file=3

六、内网穿透远程访问

如果想实现出门在外,也能随时随地访问家中的OpenWRT软路由系统,但因为没有公网IP而无法实现。可以借助cpolar内网穿透工具来实现公网访问!接下来介绍一下如何安装cpolar内网穿透并实现公网访问!

首先需要在终端SSH连接OpenWRT系统,输入OpenWRT登录时的root账号密码password即可成功连接。

6.1 下载公钥

首先执行下方命令下载公钥:

wget -O cpolar-public.key http://openwrt.cpolar.com/releases/public.key

6.2 将cpolar源添加至包管理器

echo "src/gz cpolar_packages http://openwrt.cpolar.com/releases/packages/$(. /etc/openwrt_release ; echo $DISTRIB_ARCH)"  >>  /etc/opkg/customfeeds.conf

6.3 更新包管理器

opkg update

image-20240417113415168

6.4 安装cpolar插件

opkg install cpolar
opkg install luci-app-cpolar
opkg install luci-i18n-cpolar-zh-cn

image-20240417154604437

image-20240417154621079

image-20240417154643961

6.5 重启OpenWRT

reboot

然后可以看到OpenWRT重启,重启后重新登录OpenWRT后台,在左侧菜单的服务中就会出现cpolar服务,绑定token即可正常使用:

image-20240417121451765

6.6 为OpenWRT Web管理界面配置公网地址

首先,在OpenWRT管理界面左侧菜单中进入服务,选择cpolar内网穿透。

image-20240417155727891

然后,点击打开webui管理界面:http://localhost:9200,在跳转的浏览器网页中输入你注册的cpolar账号密码进行登录:

image-20240417155834051

登录后,点击左侧仪表盘的隧道管理——创建隧道,

创建一个 OpenWRT Web管理界面的公网http地址隧道

点击创建

image-20240417160315275

隧道创建成功后,点击左侧的状态——在线隧道列表,查看所生成的公网访问地址,有两种访问方式,一种是http 和https,任选其一即可。

image-20240417160543521

使用Cpolar生成的公网地址,在手机或任意设备的浏览器进行登录访问,即可成功看到 OpenWRT Web管理界面,这样一个可以远程访问的公网地址就创建好了,使用了cpolar的公网域名,无需自己购买云服务器,即可到公网访问本地内网的openwrt系统了!

ps:如果我们需要长期异地远程访问OpenWRT Web管理界面,由于刚才创建的是随机的地址,24小时会发生变化。另外它的网址是由随机字符生成,不容易记忆。如果想把域名变成固定的二级子域名,并且不想每次都重新创建隧道来远程访问,我们可以选择创建一个固定不变的公网地址来解决这个问题。

总结

在 OpenWrt 上部署 Docker 需克服内核适配与资源限制两大挑战。通过自定义编译内核、扩展存储设备、限制容器资源,可在低功耗设备上实现轻量级容器化应用的稳定运行。建议优先部署无状态服务(如 HTTP API 代理),并严格监控资源使用情况。对于高负载场景,仍推荐使用 x86 架构设备作为生产环境载体。

附:硬件兼容性测试列表

设备型号CPU 架构内存Docker 运行状态
Raspberry Pi 4BARM Cortex-A724GB稳定
GL-iNet MT1300ARM Cortex-A71GB需关闭 Swap
x86 工控机Intel Celeron8GB最佳性能

以上就是在OpenWrt设备上搭建Docker环境的完整方案的详细内容,更多关于OpenWrt搭建Docker环境的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文