106 lines
4.2 KiB
Markdown
106 lines
4.2 KiB
Markdown
# Container Engine Guide
|
|
|
|
Xread ships as a standard OCI image and a Compose stack. Docker, Podman, and `nerdctl` all use the same image, the same `deploy/docker-compose.yml`, the same environment variables, and the same reverse-proxy layout.
|
|
|
|
## Server Runtimes
|
|
|
|
| Runtime | Single container | Compose stack | Notes |
|
|
| ------------------------- | ---------------- | ------------- | --------------------------------------- |
|
|
| Docker Engine | Yes | Yes | Use `docker run` and `docker compose` |
|
|
| Podman | Yes | Yes | Use `podman run` and `podman compose` |
|
|
| containerd with `nerdctl` | Yes | Yes | Use `nerdctl run` and `nerdctl compose` |
|
|
|
|
## Desktop Wrappers
|
|
|
|
| Environment | Single container | Compose stack | Notes |
|
|
| --------------- | ---------------- | ------------- | -------------------------------------------------------------------------------- |
|
|
| Docker Desktop | Yes | Yes | Same commands as Docker Engine |
|
|
| OrbStack | Yes | Yes | Docker-compatible CLI |
|
|
| Colima | Yes | Yes | Docker-compatible CLI after `docker context` is configured |
|
|
| Rancher Desktop | Yes | Yes | Use either Docker-compatible CLI or `nerdctl`, depending on how it is configured |
|
|
|
|
> [!NOTE]
|
|
> The deployment files in [`deploy`](../deploy) stay named `docker-compose.yml` because that filename is still the broadest common denominator across Compose-compatible tooling.
|
|
|
|
## Single-Container Commands
|
|
|
|
### Docker-compatible CLIs
|
|
|
|
These examples work unchanged with:
|
|
|
|
- Docker Engine
|
|
- Docker Desktop
|
|
- OrbStack
|
|
- Colima with Docker context enabled
|
|
|
|
```bash
|
|
docker run --rm -p 8081:8081 ghcr.io/xixu-me/xread:latest
|
|
docker run --rm -p 8081:8081 --entrypoint node ghcr.io/xixu-me/xread:latest build/stand-alone/search.js
|
|
docker run --rm -p 8081:8081 --entrypoint node ghcr.io/xixu-me/xread:latest build/stand-alone/serp.js
|
|
```
|
|
|
|
### Podman
|
|
|
|
```bash
|
|
podman run --rm -p 8081:8081 ghcr.io/xixu-me/xread:latest
|
|
podman run --rm -p 8081:8081 --entrypoint node ghcr.io/xixu-me/xread:latest build/stand-alone/search.js
|
|
podman run --rm -p 8081:8081 --entrypoint node ghcr.io/xixu-me/xread:latest build/stand-alone/serp.js
|
|
```
|
|
|
|
### nerdctl
|
|
|
|
```bash
|
|
nerdctl run --rm -p 8081:8081 ghcr.io/xixu-me/xread:latest
|
|
nerdctl run --rm -p 8081:8081 --entrypoint node ghcr.io/xixu-me/xread:latest build/stand-alone/search.js
|
|
nerdctl run --rm -p 8081:8081 --entrypoint node ghcr.io/xixu-me/xread:latest build/stand-alone/serp.js
|
|
```
|
|
|
|
## Compose Commands
|
|
|
|
The stack in [`deploy/docker-compose.yml`](../deploy/docker-compose.yml) works with Compose-compatible CLIs. All engines use the same file and the same variables from [`deploy/.env.example`](../deploy/.env.example).
|
|
|
|
### Docker / Docker Desktop / OrbStack / Colima
|
|
|
|
```bash
|
|
docker compose pull
|
|
docker compose up -d
|
|
docker compose ps
|
|
```
|
|
|
|
### Podman
|
|
|
|
```bash
|
|
podman compose pull
|
|
podman compose up -d
|
|
podman compose ps
|
|
```
|
|
|
|
### nerdctl
|
|
|
|
```bash
|
|
nerdctl compose pull
|
|
nerdctl compose up -d
|
|
nerdctl compose ps
|
|
```
|
|
|
|
## Shared Deployment Knobs
|
|
|
|
The deployment model stays the same across engines:
|
|
|
|
- `PUBLIC_HTTP_PORT` and `PUBLIC_HTTPS_PORT` control the reverse-proxy entrypoints
|
|
- `XREAD_LOOPBACK_HOST` controls whether backend smoke-test ports stay on loopback
|
|
- `XREAD_CRAWL_LOOPBACK_PORT`, `XREAD_SEARCH_LOOPBACK_PORT`, and `XREAD_SERP_LOOPBACK_PORT` control the three backend check ports
|
|
- `R_HOST`, `S_HOST`, and `ACME_EMAIL` control the public reverse-proxy hostnames and certificate email
|
|
|
|
If your host cannot publish `80` and `443`, use the same fix regardless of engine: set `PUBLIC_HTTP_PORT` and `PUBLIC_HTTPS_PORT` to higher ports, or terminate TLS before the stack.
|
|
|
|
## Practical Recommendation
|
|
|
|
Choose the engine that matches your host standard:
|
|
|
|
- Docker Engine
|
|
- Podman
|
|
- `nerdctl` on containerd
|
|
|
|
For local development, Docker Desktop, OrbStack, Colima, and Rancher Desktop all work with the same image and Compose stack.
|