Skip to content

Commit 0c61392

Browse files
mairasclaude
andcommitted
docs: clarify container app two-phase install process
Explain that .deb packages are small metadata-only packages and that the actual Docker image pull happens on first service start, which is the slow part of installation. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent d88da80 commit 0c61392

2 files changed

Lines changed: 22 additions & 10 deletions

File tree

docs/architecture/package-system.md

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ Each container app package contains:
3030
└── {app-name}.png # Icon for store and dashboard
3131
```
3232

33+
The package is intentionally lightweight — it does **not** contain the Docker image itself. The actual container image is pulled from the registry when the service starts for the first time. This keeps packages small (a few kilobytes) and ensures you always get the exact image version specified in the compose file.
34+
3335
The systemd service runs `docker compose up -d` on start and `docker compose down` on stop.
3436

3537
## App Definition Format
@@ -151,10 +153,13 @@ The CI/CD pipeline builds packages on push to main, publishes to unstable, and p
151153

152154
```
153155
apt install marine-grafana-container
154-
→ dpkg extracts files
156+
→ dpkg extracts files (seconds — package is small)
155157
→ postinst creates data directories, generates secrets
156158
→ systemd starts grafana-container.service
157-
→ docker compose up -d
159+
→ prestart.sh computes runtime configuration
160+
→ docker compose up
161+
→ Docker pulls image layers from registry (may take minutes on first install)
162+
→ Container starts
158163
→ Traefik detects labels, creates route
159164
→ mDNS publisher advertises grafana.halos.local
160165
→ Homarr adapter adds dashboard tile
@@ -178,7 +183,7 @@ apt remove marine-grafana-container
178183
apt upgrade
179184
→ dpkg extracts updated files
180185
→ systemd restarts the service
181-
→ docker compose pulls new image and recreates container
186+
→ docker compose pulls new image (only if upstream version changed) and recreates container
182187
→ Persistent data in /var/lib/container-apps/{app}/ is preserved
183188
```
184189

docs/user-guide/installing-apps.md

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,20 @@ HaLOS provides a container app store — a curated collection of applications pa
66

77
## How it works
88

9-
Each container app is a standard Debian package (`.deb`) that contains:
9+
Installing a container app is a two-phase process:
1010

11-
- A Docker Compose file defining the container(s)
12-
- A systemd service that manages the container lifecycle
13-
- Docker labels for Traefik routing and Homarr dashboard integration
11+
1. **Package install (fast)** — HaLOS downloads and installs a small package that describes how to run the app. This takes only a few seconds.
1412

15-
When you install an app, `apt` downloads the package, `systemd` starts the container, Traefik picks up the routing labels, and the app appears on your [dashboard](dashboard.md) — all automatically.
13+
2. **Image pull (slow)** — The app's actual software is then downloaded from the internet. This can take anywhere from 30 seconds to several minutes depending on the app size and your network speed.
14+
15+
The app only becomes accessible after the download completes and the app starts. It then appears on your [dashboard](dashboard.md) automatically.
16+
17+
??? info "Under the hood"
18+
The package is a standard Debian `.deb` containing a Docker Compose file
19+
(which defines the containers to run), a systemd service (which manages
20+
the app lifecycle), and metadata for routing and dashboard integration.
21+
The heavy download in phase 2 is Docker pulling the container image
22+
layers from a registry.
1623

1724
## Browsing the store
1825

@@ -26,8 +33,8 @@ The store shows apps from all configured stores. The Marine variant adds a dedic
2633

2734
1. Click on an app to view its details (description, version, dependencies).
2835
2. Click **Install**.
29-
3. Wait for the package to download and the container to start (typically 30–60 seconds).
30-
4. The app appears on your Homarr dashboard and is accessible via its subdomain URL.
36+
3. The package installs quickly, but the app needs time to pull its Docker image on first start. Small apps are ready within a minute; larger ones (e.g., Grafana, OpenCPN) may take several minutes on slower connections.
37+
4. Once the image pull completes, the app appears on your Homarr dashboard and is accessible via its subdomain URL.
3138

3239
## Managing installed apps
3340

0 commit comments

Comments
 (0)