Domino Container Project – Proxmox LXC Mode
Overview
The Domino Container project traditionally builds container images for Docker and Kubernetes environments. With the introduction of Proxmox LXC mode, the build system now supports generating native LXC templates that integrate tightly with Proxmox VE and ZFS.
This approach combines:
- Container-style deployment logic
- Native Linux runtime (systemd, SSH)
- ZFS-optimized storage architecture
The result is a highly efficient, low-overhead alternative to VM-based or Docker-based deployments, specifically optimized for Domino workloads.
Key Features
- Native Proxmox LXC template generation
- systemd-based runtime environment
- Reuse of Domino container deployment logic
- ZFS-native storage model
- Versioned, shared
/optdatasets - Domino-aware
/localdata layout - Automatic deployment via data tar mechanism
Architecture Overview
+------------------------------------------------------------+
| Domino Container Build System |
+------------------------------------------------------------+
| | |
v v v
+----------------+ +----------------------+ +------------------+
| LXC Template | | /opt ZFS Dataset | | Domino Data Tar |
| | | (versioned) | | |
| - Base OS | | - Domino binaries | | - notes.ini |
| - systemd | | - Install resources | | - /local layout |
| - SSH enabled | | - Install tar | | |
+----------------+ +----------------------+ +------------------+
\_____________________|_____________________/
|
v
+----------------------------------+
| Proxmox LXC Container |
|----------------------------------|
| - systemd |
| - SSH |
| - /opt (read-only mount) |
| - /local (ZFS subvolume) |
+----------------------------------+
|
v
+----------------------------------+
| systemd Service |
| (Domino start script wrapper) |
+----------------------------------+
|
v
+----------------------------------+
| Domino Start Script |
|----------------------------------|
| - Check for new data tar |
| - Deploy/update /local |
| - Start Domino |
+----------------------------------+
|
+--------------+--------------+
| |
v v
+------------------------+ +------------------------+
| Deploy Domino Data | | Start Existing Instance|
+------------------------+ +------------------------+
\______________________/
|
v
+------------------------+
| Domino Server |
+------------------------+
Startup Logic
Docker / Kubernetes
- Uses
/entrypoint.sh -
Handles:
- Data deployment
- Domino startup
Proxmox LXC
- Uses systemd service and Domino start script
Startup flow:
Container Boot
|
v
systemd
|
v
Domino Service
|
v
Check for new data tar in /opt
|
+----+----+
| |
Deploy Start
to /local Existing
| |
+----+----+
|
v
Domino running
ZFS Storage Architecture
Dataset Layout
ZFS Pool: rpool
│
├── rpool/data/domino-opt-20260413-1005
│ └── /opt
│
├── rpool/data/subvol-101-disk-0
│ └── /local
│ ├── notesdata
│ ├── translog
│ ├── daos
│ ├── nif
│ └── ft
│
├── rpool/data/subvol-102-disk-0
│ └── /local
│ ├── notesdata
│ ├── translog
│ ├── daos
│ ├── nif
│ └── ft
│
└── rpool/data/vm-200-disk-0
└── ext4/xfs
/opt – Shared Binary Layer
Naming Convention
rpool/data/domino-opt-<timestamp>
Example:
rpool/data/domino-opt-20260413-1005
Characteristics
- Independent ZFS dataset
- Versioned
- Mounted read-only
- Shared across multiple containers
Contents
/opt
├── domino/
├── domino-container/
│ └── install_data_domino.taz
├── node_exporter/
└── nashcom/
All runtime components are contained in /opt:
- Domino binaries
- Deployment data tar
- Prometheus node exporter
- NashCom start logic
/local – Domino Data Layer
Directory Structure
/local
├── notesdata
├── translog
├── daos
├── nif
└── ft
Characteristics
- ZFS subvolume per container
- Read-write
- Native ZFS behavior
Data Roles
| Directory | Purpose | I/O Pattern | Rebuildable |
|---|---|---|---|
| notesdata | Core databases | Mixed | No |
| translog | Transaction logging | Sequential write | No |
| daos | Attachments | Large objects | No |
| nif | View indexes | Random R/W | Yes |
| ft | Full-text indexes | Batch/sequential | Yes |
Storage Model Comparison
Docker / Kubernetes Proxmox LXC
zvol (block device) ZFS subvolume
↓ ↓
ext4/xfs native ZFS
↓ ↓
mounted volume direct mount
Higher overhead Lower overhead
Indirect ZFS usage Native ZFS usage
/opt Sharing Model
rpool/data/domino-opt-20260413-1005
(read-only)
|
+-----------------+-----------------+
| |
LXC CT 101 LXC CT 102
| |
/opt (RO) /opt (RO)
/local (RW) /local (RW)
/opt Version Switching (Atomic Upgrades)
Principle
A new /opt dataset is created for each build. Containers switch to the new dataset and restart. All binaries including the Domino Start Script are located in /opt. Template Notes data tar is also located in /opt.
Versioned Datasets
rpool/data/domino-opt-20260413-1005
rpool/data/domino-opt-20260420-0915
Switching Workflow
Prepare new /opt
zfs create rpool/data/domino-opt-20260420-0915
Populate with:
- HCL Domino binaries (/opt/hcl/domino)
/opt/domino-container/install_data_domino.taz- Prometheus Node Exporter
- Nash!Com Dominoi Start Script
Update container mount
pct set <CTID> -mp0 /rpool/data/domino-opt-20260420-0915,mp=/opt,ro=1
Restart container
pct restart <CTID>
Runtime Behavior After Switch
On restart:
- systemd starts the Domino service
- Domino start script runs
- Script checks:
/opt/domino-container/install_data_domino.taz
-
If updated:
- Deploys to
/local
- Deploys to
-
Starts Domino
Rollback
Switch back to previous dataset:
pct set <CTID> -mp0 /rpool/data/domino-opt-20260413-1005,mp=/opt,ro=1
pct restart <CTID>
Multi-Container Upgrade
Old version New version
domino-opt-20260413 domino-opt-20260420
| |
CT101 CT101
CT102 CT102
Containers can be switched independently or in groups.
Advantages of LXC Mode
Performance
- No block device overhead
- Direct filesystem access
Storage Efficiency
- Shared
/opt - No duplication of binaries
- ZFS compression and deduplication
Flexibility
- Instant snapshots and clones
- Independent lifecycle for
/optand/local
Operational Simplicity
- No Docker runtime required
- systemd and SSH available
- Native Proxmox integration
- SSH access for Domino admins to container without access to Proxmox host
Architecture Summary
This design introduces three layers:
-
Immutable shared layer
/optas versioned ZFS dataset -
Mutable instance layer
/localas per-container ZFS subvolume -
Execution layer LXC container with systemd and Domino start logic
Final Summary
The Proxmox LXC mode extends the Domino Container project by:
- Bringing container-style deployment into a native LXC environment
- Leveraging ZFS datasets and subvolumes directly
- Preserving consistent startup and deployment logic
- Aligning with Domino’s internal data architecture
This results in a deployment model that is efficient, flexible, and optimized for Domino workloads leveraging LXC technology – One of the two native Proxmox server deployment methods.