linktools-cntr
Docker / Podman 容器部署和管理工具,为 homelab 及服务器环境提供统一的容器生命周期管理(命令前缀 ct-cntr)。
开始使用
以基于 Debian 的系统为例,先安装运行环境:
# 安装 Python3、Git、Docker、Docker Compose
wget -qO- get.docker.com | bash
sudo apt-get update
sudo apt-get install -y python3 python3-pip git docker-compose-plugin
安装 linktools-cntr:
python3 -m pip install -U linktools linktools-cntr
# 安装 GitHub 最新开发版
python3 -m pip install --ignore-installed \
"linktools@ git+https://github.com/linktools-toolkit/linktools.git@master#subdirectory=linktools" \
"linktools-cntr@ git+https://github.com/linktools-toolkit/linktools.git@master#subdirectory=linktools-cntr"
容器部署示例
All in one 环境
PVE、OpenWRT、飞牛 OS、WAF、SSO、导航页等等
👉 搭建文档
Xray Server
gRPC + SSL + VLESS
👉 搭建文档
Redroid
Docker 版 Android 容器,以及编译环境
👉 搭建文档
内置容器
linktools-cntr 内置了常用容器定义,开箱即用:
| 容器 | 说明 |
|---|---|
| nginx | 反向代理(含 ACME 自动证书) |
| lldap | 轻量级 LDAP 目录服务 |
| authelia | 单点登录 / 双因素认证 |
| safeline | Web 应用防火墙 |
| portainer | 容器可视化管理界面 |
更多容器可通过添加外部仓库获取(参见下方仓库管理命令)。
内置配置项
首次部署时会引导填写配置项,内置的全局配置参数包括:
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
CONTAINER_TYPE |
str | — | 容器运行时:docker / docker-rootless / podman |
DOCKER_USER |
str | 当前用户 | 部分 rootless 容器使用此用户权限运行 |
DOCKER_HOST |
str | /var/run/docker.sock |
Docker Daemon 地址 |
DOCKER_APP_PATH |
str | ~/.linktools/data/container/app |
容器数据持久化目录(建议置于 SSD) |
DOCKER_APP_DATA_PATH |
str | 默认同DOCKER_APP_PATH |
不频繁读写的持久化目录(可置于 HDD) |
HOST |
str | 当前局域网 IP | 宿主机 IP 地址 |
常用命令
# 查看帮助(每个子命令均支持 -h 参数)
ct-cntr -h
#######################
# 仓库管理(支持 git 链接和本地路径)
#######################
# 添加容器仓库
ct-cntr repo add https://github.com/linktools-toolkit/linktools-homelab
# 拉取仓库最新代码
ct-cntr repo update
# 删除仓库
ct-cntr repo remove
#######################
# 容器安装列表管理
#######################
# 添加要部署的容器
ct-cntr add nginx lldap authelia portainer
# 从部署列表移除容器
ct-cntr remove nginx
#######################
# 容器生命周期管理
#######################
# 启动容器
ct-cntr up
# 重启容器
ct-cntr restart
# 停止容器
ct-cntr down
#######################
# 配置管理
#######################
# 查看当前 docker compose 配置
ct-cntr config
# 列出所有配置变量
ct-cntr config list
# 设置配置变量
ct-cntr config set NGINX_ROOT_DOMAIN=example.com ACME_DNS_API=dns_ali Ali_Key=xxx Ali_Secret=yyy
# 删除配置变量
ct-cntr config unset NGINX_ROOT_DOMAIN ACME_DNS_API Ali_Key Ali_Secret
# 使用编辑器直接编辑配置文件
ct-cntr config edit --editor vim
# 重新加载配置
ct-cntr config reload
容器事件时序
linktools-cntr 通过一套生命周期事件系统统一管理容器的启动、停止流程。Manager 按依赖顺序对目标容器依次触发各阶段事件,再驱动 Docker Compose 执行。
target_containers:默认为全部已安装容器;指定容器名(如
ct-cntr up nginx)时仅为指定的子集。
sequenceDiagram
autonumber
actor User
participant CLI
participant ContainerManager
participant Container
%% ─── 初始化 & 准备 ───
rect rgb(240, 240, 220)
Note over CLI,Container: 初始化阶段(每次执行任意 ct-cntr 命令)
User->>CLI: ct-cntr <command>
CLI->>ContainerManager: 扫描 container.py / docker-compose.yml
loop 每个容器
ContainerManager->>Container: on_init()
end
end
rect rgb(230, 235, 245)
Note over CLI,Container: 准备阶段(up / restart / down / config / exec 等)
CLI->>ContainerManager: prepare_installed_containers()
ContainerManager->>ContainerManager: resolve_depend_containers()(依赖解析 & 排序)
loop 每个容器(逆序,低优先级先写默认配置)
ContainerManager->>Container: configs(写入全局默认配置)
end
loop 每个容器
ContainerManager->>Container: on_prepare()
end
loop 每个容器(正序)
ContainerManager->>Container: docker_file(渲染 Dockerfile 模板)
ContainerManager->>Container: docker_compose(渲染 docker-compose.yml 模板)
ContainerManager->>Container: exposes(加载对外服务链接)
end
end
%% ─── 启动流程 ───
rect rgb(220, 240, 220)
Note over CLI,Container: ct-cntr up
loop 每个容器(正序)
ContainerManager->>Container: on_check(ctx)
ContainerManager->>Container: on_starting(ctx)
ContainerManager->>Container: start_hooks[i]()(mkdir / chown / 写 Nginx 配置…)
end
ContainerManager->>ContainerManager: manager.start_hooks[i]()
ContainerManager->>CLI: yield
CLI->>CLI: docker compose build / up --detach
loop 每个容器(逆序)
ContainerManager->>Container: on_started(ctx)
end
alt is_full_containers == True
ContainerManager->>Container: on_removed(ctx)(孤立容器清理)
end
end
%% ─── 停止流程 ───
rect rgb(240, 220, 220)
Note over CLI,Container: ct-cntr down
loop 每个容器(逆序)
ContainerManager->>Container: on_stopping(ctx)
end
ContainerManager->>CLI: yield
CLI->>CLI: docker compose stop / down
loop 每个容器(正序)
ContainerManager->>Container: on_stopped(ctx)
ContainerManager->>Container: stop_hooks[i]()
end
ContainerManager->>ContainerManager: manager.stop_hooks[i]()
alt is_full_containers == True
ContainerManager->>Container: on_removed(ctx)(孤立容器清理)
end
end
%% ─── 重启流程 ───
rect rgb(235, 225, 245)
Note over CLI,Container: ct-cntr restart(= down 流程 + up 流程)
loop 每个容器(逆序)
ContainerManager->>Container: on_stopping(ctx)
end
ContainerManager->>CLI: yield
CLI->>CLI: docker compose stop
loop 每个容器(正序)
ContainerManager->>Container: on_stopped(ctx)
ContainerManager->>Container: stop_hooks[i]()
end
ContainerManager->>ContainerManager: manager.stop_hooks[i]()
loop 每个容器(正序)
ContainerManager->>Container: on_check(ctx)
ContainerManager->>Container: on_starting(ctx)
ContainerManager->>Container: start_hooks[i]()
end
ContainerManager->>ContainerManager: manager.start_hooks[i]()
ContainerManager->>CLI: yield
CLI->>CLI: docker compose build / up --detach
loop 每个容器(逆序)
ContainerManager->>Container: on_started(ctx)
end
alt is_full_containers == True
ContainerManager->>Container: on_removed(ctx)(孤立容器清理)
end
end
相关链接
Metadata
Release files for linktools-cntr 0.9.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| linktools_cntr-0.9.1.tar.gz | 42.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| linktools_cntr-0.9.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 95.8 kB
Release files / linktools_cntr-0.9.1.tar.gz
| Download URL | linktools_cntr-0.9.1.tar.gz |
|---|---|
| Size | 42.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
5046b741708931aecfde7174e890580b7d864ea74f79a8c85d26b204f3259fa7
|
|
BLAKE2b-256 checksum How to use checksums |
cbb16b581aa6819fc876ec110b0c7063605d73fe88176115c1799f9c5c4da9d0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / linktools_cntr-0.9.1-py3-none-any.whl
| Download URL | linktools_cntr-0.9.1-py3-none-any.whl |
|---|---|
| Size | 53.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
9fed6c204eb6222ef9c02b6beb0fff72b0606510a6e62539ad467222cf459491
|
|
BLAKE2b-256 checksum How to use checksums |
af68c02e2ae99649f7d130b27ca75efd4f225451910cabae5966f63dce518fab
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|