Migration

From Docker to cardinal.

The mental model is identical — images, containers, ports, volumes, compose. The CLI mirrors docker's flags, your images and docker-compose.yaml keep working, and the daemon is what you don't install.

Command mapping

Same muscle memory, one binary.

Dockercardinal
docker pull nginx:alpinecardinal pull nginx:alpine
docker run -d --name web -p 8080:80 nginxcardinal run -d -n web -p 8080:80 nginx
docker pscardinal ps
docker stop / start / restartcardinal stop / start / restart
docker rm -f webcardinal rm -f web
docker exec -it web shcardinal exec -i -t web sh (or cardinal console web)
docker logs -f webcardinal logs -f web
docker images / docker rmicardinal images / cardinal rmi
docker build -t myapp .cardinal build -t myapp:v1 .
docker commit web img:v1cardinal commit web img:v1
docker login / docker pushcardinal login / cardinal push
docker compose upcardinal up — reads cardinal.toml or compose YAML
docker compose downcardinal down
docker network createcardinal network create
docker volume create / prunecardinal volume create / prune
docker statscardinal stats
docker inspectcardinal inspect
docker system prunecardinal system prune
docker port webcardinal port web — plus cardinal port add/remove without recreating
Steps

The migration path.

1 · install cardinal
curl -fsSL https://raw.githubusercontent.com/animesao/cardinal/main/install.sh | sudo bash
cardinal doctor
2 · stop Docker, reuse your images
sudo systemctl stop docker
sudo systemctl disable docker

# Existing images are pulled again from the same registries:
cardinal pull myapp:v1
cardinal run -d --restart always -n myapp -p 8080:80 -v data:/data \
  -e KEY=value myapp:v1
3 · keep your compose file
# cardinal reads docker-compose.yaml as-is — just point it at the file:
cardinal up -f docker-compose.yaml

# Or convert to the native format with the Stack Builder:
# /stack/  →  cardinal.toml  →  cardinal up -f cardinal.toml
4 · keep your tooling
# Portainer, VS Code Dev Containers, CI — anything that speaks the
# Docker API works against cardinal's compatible endpoint:
cardinal serve -H 127.0.0.1 -p 2375 -d
keep

What stays the same

OCI/Docker images, compose YAML, the -p / -v / -e / --restart flags, volume and network concepts.

drop

What you uninstall

dockerd, containerd and their sockets. No daemon to start, upgrade, or babysit — the binary is the runtime.

gain

What's new

Built-in cluster orchestration, FaaS, AES-256-GCM encrypted backups, audit logging, and a 27-blueprint registry.

Migrate in an afternoon.

The quick start takes under a minute; the full reference is in the docs. Your images and compose files come with you.

Read the docs Full comparison →