懒猫微服进阶心得(九):商店 App 如何接管 Docker 引擎?

忘机山人

发布于346天前
博客图片修整中,看不了可以先搜索公众号“忘机山人”看。
在之前的内容中,我们提到过懒猫微服采用三套独立的 Docker 环境来隔离系统组件、Playground Docker 与商店 App 的 Docker 实例。那么问题来了:**如何让商店中上架的 App 操作 Playground 中的 Docker 引擎?**

答案是:**通过挂载 `docker.sock` 文件来实现跨容器控制。**

所以我们可以在商店的APP中操作playground docker,其实也就是Docker面板或者轻量Docker面板做的事情。

为什么不操作其他两个Docker引擎?

- 系统组件Docker无需干预,重启之后可以复原。
- 应用商店有自己的生命周期,也无需干预。

------

### 一、在 `build.yml` 中挂载 Playground 路径

首先,在打包配置 `build.yml` 中新增 `services` 字段,用于将宿主机中的 `/data/playground` 挂载到容器内部:

```yml
manifest: ./lzc-manifest.yml

pkgout: ./
icon: ./logo.png

services:
  containly:
    volumes:
      - bind:
          create_host_path: true
        source: /data/playground
        target: /lzcapp/run/playground
        type: bind
```

打包后会生成一个名为 `compose.override.yml` 的文件。**请注意:即使你手动创建了 `compose.override.yml`,也可能无法直接生效,必须通过打包流程自动生成。**(此结论基于初步测试)

生成后的 `compose.override.yml` 内容如下:

```yml
services:
  containly:
    volumes:
      - bind:
          create_host_path: true
        source: /data/playground
        target: /lzcapp/run/playground
        type: bind
```

------

###  二、修改 `manifest.yml` 实现 `docker.sock` 映射

为了让上架 App 操作 Docker,需要手动编辑 `manifest.yml` 文件,添加以下内容:

```yml
    binds:
      - /lzcapp/run/playground/docker.sock:/var/run/docker.sock
    environment:
      - DOCKGE_STACKS_DIR=/lzcapp/var/stacks
      - DOCKER_HOST=unix:///lzcapp/run/playground/docker.sock
```

这样,容器内的 Docker CLI 或管理面板就可以通过 `DOCKER_HOST` 环境变量,控制宿主机的 Docker 引擎。

------

### 三、完整的 `manifest.yml` 示例

以下是完整可运行的 `manifest.yml` 配置:

```yml
lzc-sdk-version: 0.1
package: xu.deploy.containly
version: 0.0.2
name: Containly
description: >-
  A fancy, easy-to-use and reactive self-hosted docker compose.yaml
  stack-oriented manager.
license: https://choosealicense.com/licenses/mit/
homepage: https://github.com/cloudsmithy/Containly
author: xu
usage: >-
  安装完成后,请重启懒猫微服以启用 Docker。

  此应用将接管懒猫微服的独立 Docker 守护进程,可能存在安全风险。在授予容器 privileged
  等权限之前,请确保容器是安全的,且不会执行危险操作。为了避免潜在风险,请确保:

  1. 您了解容器的行为,并确认它们来自可信的源。
  2. 容器中没有运行高危命令,且没有暴露不必要的端口或服务。

  建议先查阅懒猫微服开发者手册,了解相关特性和限制,并根据手册中的安全建议配置容器。
application:
  subdomain: containly
  routes:
    - /=http://containly.xu.deploy.containly.lzcapp:5000/
services:
  containly:
    image: registry.lazycat.cloud/u04123229/cloudsmithy/containly:896f4251373d0ebe
    binds:
      - /lzcapp/run/playground/docker.sock:/var/run/docker.sock
    environment:
      - DOCKGE_STACKS_DIR=/lzcapp/var/stacks
      - DOCKER_HOST=unix:///lzcapp/run/playground/docker.sock
```

------

###  四、总结

通过挂载 `docker.sock` 文件和设置 `DOCKER_HOST`,我们可以让商店上架的 App 控制懒猫微服的 Playground Docker 实例。我用这个功能上架了自己写的Docker面板,一起来玩一玩嘛?

![](https://raw.githubusercontent.com/cloudsmithy/picgo-imh/master/image-20250520104141112.png)



评论

1
u95011260247天前

赞!

说点什么呢~
收藏
0
1
0