Shipping vs Docker
Ship is the one obvious way to deploy a Buraaq service. A ship is a hashed native bundle (.bur). A dock is a live accept loop on :7422 that receives ships and runs them as processes.
You still write the same Keel program:
fn main() {
page("/", "public/index.html")
api("items", "title, body")
run()
}
Locally:
buraaq up
On a server:
buraaq land user@HOST --cloud hetzner
buraaq ship HOST
Beginner: what you are replacing
Docker's unit of deploy is an image: a guest userspace, layers, a registry, a daemon. You describe a machine, then hope the app inside it is healthy.
Buraaq's unit of deploy is a binary plus its files, hashed. The OS is the host OS. There is no second Linux inside Linux.
| Docker | Buraaq Ship | |
|---|---|---|
| Artifact | Image layers + guest FS | One .bur (exe + public/ + optional certs) |
| Runtime | containerd / dockerd | A child process under Dock |
| Isolation | namespaces, cgroups | Dedicated directory + pid + SHA-256 pin + token |
| Start cost | Pull, extract, overlay | Copy, verify hash, exec |
| Config | Dockerfile, compose, K8s | buraaq pack / ship / dock / land |
| App ports | whatever you map | Keel 8080 / TLS 8443 |
| Control plane | Docker API / K8s | Dock 7422 (HTTP + bearer) |
Use Docker when you need a foreign OS or a distro you do not want on the host. Use Ship when the app is Buraaq: compiled for that host, same ISA, same Keel TLS API.
Intermediate: why it is faster to think
- Same OS as you packed. Windows
.bur→ Windows dock. Linux → Linux. No "works in Alpine." - Integrity is the file. Tamper the bytes, launch refuses. You do not rebuild 40 layers to get a checksum.
- Secrets stay on the host.
BURAAQ_DATABASE_URLis environment, like a well-run VM: not baked into an image unless you packed it on purpose. - Two ports, two jobs. Users never talk to 7422. Browsers talk to Keel.
Advanced: what this is not
Dock is not a sandbox for untrusted tenants. It is not gVisor, not a VM, not Kubernetes. Isolation is process + directory. Share a dock only with code you would run as a service account on that box.
Rollback is "ship the previous .bur hash," not a Deployment object. See advanced shipping.
The user-facing ports
- App:
http://SERVER:8080andhttps://SERVER:8443 - Dock: control only, port 7422
