Skip to content
JelinaJelina DocumentationTechnical documentation
Back to website

docker-compose compatibility and extensions

JelinaOS provides ready-to-use container orchestration with full docker-compose 2.x syntax compatibility. Orchestration is managed through cloud releases or local management interfaces and deployed automatically by the device agent. It also adds declarative management of non-containerized applications through ProgramSet, bringing configuration-driven management to traditional programs.

Orchestration files are declarative configurations defined in a cloud Release or through a local management interface. The device agent synchronizes and deploys them automatically. Local Docker commands support routine operations on individual containers; multi-service orchestration is executed centrally by the device agent without additional orchestration tools on the device.

JelinaOS implements the 2.x specification to support smooth migration of common orchestration files:

  • Supports common settings for services, networks, volumes, environment variables, and dependencies.
  • Compatible with fields and behavior introduced in 2.x.
  • Fields added in 3.x are not supported; use 2.x syntax when migrating.
version: "2.4"
services:
app:
image: myapp:1.0.0
restart: always
environment:
MODE: production
ports:
- "8080:80"
worker:
image: myworker:1.0.0
restart: on-failure
depends_on:
- app

Non-containerized applications: declarative ProgramSet management

Section titled “Non-containerized applications: declarative ProgramSet management”

Industrial sites run many traditional scripts, daemons, and third-party binaries. JelinaOS brings them into a unified declarative management system whose fields map directly to system service semantics, keeping it easy to learn while providing strong management capabilities.

programs:
myapp:
command: run.sh # Startup command
running: true # Whether to run
restart: always # Restart policy
environment: # Environment variables
MODE: production
working_directory: . # Working directory
user: root # Run as user
pid_file: /var/run/myapp.pid
Field Meaning Description
command Startup command Required program entry point
running Whether to run Defaults to true
restart Restart policy no / on-success / on-failure / on-abnormal / on-watchdog / on-abort / always
environment Environment variables Key-value pairs
kill_signal Stop signal Signal sent when stopping the program
working_directory Working directory Directory in which the program runs
type Service type simple / forking / oneshot / dbus / notify / idle
user / group Execution identity Run as the specified user/group
pid_file PID file Records the process PID
wants / requires Dependencies Weak / strong dependencies
before / after Startup ordering Start before/after the specified service
conflicts Mutual exclusion Conflicts with the specified service
start_limit_interval_sec / start_limit_burst Restart limits Maximum restarts within a time window
start_limit_action Limit action none / reboot / poweroff, etc.
remain_after_exit Remain active after exit Prevents repeated startup
exec_start_pre / exec_start_post Pre/post commands Commands executed before/after startup

ProgramSet also supports advanced system unit configuration, such as boot dependencies and condition checks:

programs:
myapp:
command: run.sh
restart: always
Install:
WantedBy: multi-user.target # Start at boot
Unit:
ConditionPathExists: /data/app/config.json # Condition check
version: "2.4"
services:
# Containerized workload
web:
image: myweb:1.0.0
restart: always
programs:
# Traditional acquisition program
collector:
command: collector --config /data/collector.conf
restart: on-failure
after: web

Containerized applications and native programs work within one orchestration system, with unified dependencies, startup order, and restart policies—a distinctive benefit of JelinaOS application management.