Skip to content

Templates

Pre-configured LinuxKit templates for common deployment scenarios.

Available Templates

TemplateDescriptionPlatforms
core-devFull development environment with 100+ toolslinux/amd64, linux/arm64
server-phpFrankenPHP production serverlinux/amd64, linux/arm64
edge-nodeMinimal edge deploymentlinux/amd64, linux/arm64

Using Templates

List Templates

bash
core vm templates list

Output:

Available Templates:

  core-dev
    Full development environment with 100+ tools
    Platforms: linux/amd64, linux/arm64

  server-php
    FrankenPHP production server
    Platforms: linux/amd64, linux/arm64

  edge-node
    Minimal edge deployment
    Platforms: linux/amd64, linux/arm64

Show Template Details

bash
core vm templates show server-php

Output:

Template: server-php

Description: FrankenPHP production server

Platforms:
  - linux/amd64
  - linux/arm64

Formats:
  - iso
  - qcow2

Services:
  - sshd
  - frankenphp
  - php-fpm

Size: ~800MB

Show Template Variables

bash
core vm templates vars server-php

Output:

Variables for server-php:
  SSH_KEY      (required)  SSH public key
  DOMAIN       (optional)  Server domain name
  MEMORY       (optional)  Memory in MB (default: 2048)
  CPUS         (optional)  CPU count (default: 2)

Run Template

bash
# With required variables
core vm run --template server-php --var SSH_KEY="$(cat ~/.ssh/id_rsa.pub)"

# With all variables
core vm run --template server-php \
  --var SSH_KEY="$(cat ~/.ssh/id_rsa.pub)" \
  --var DOMAIN=example.com \
  --var MEMORY=4096

Template Locations

Templates are searched in order:

  1. .core/linuxkit/ - Project-specific templates
  2. ~/.core/templates/ - User templates
  3. Built-in templates

Creating Templates

Create a LinuxKit YAML file in .core/linuxkit/:

Development Template

.core/linuxkit/dev.yml:

yaml
kernel:
  image: linuxkit/kernel:5.15
  cmdline: "console=tty0"

init:
  - linuxkit/init:v0.8
  - linuxkit/runc:v0.8
  - linuxkit/containerd:v0.8

onboot:
  - name: sysctl
    image: linuxkit/sysctl:v0.8
  - name: dhcpcd
    image: linuxkit/dhcpcd:v0.8
    command: ["/sbin/dhcpcd", "--nobackground", "-f", "/dhcpcd.conf"]

services:
  - name: sshd
    image: linuxkit/sshd:v0.8
  - name: docker
    image: docker:dind
    capabilities:
      - all
    binds:
      - /var/run:/var/run

files:
  - path: /etc/ssh/authorized_keys
    contents: |
      {{ .SSH_KEY }}

Production Template

.core/linuxkit/prod.yml:

yaml
kernel:
  image: linuxkit/kernel:5.15
  cmdline: "console=tty0 quiet"

init:
  - linuxkit/init:v0.8
  - linuxkit/runc:v0.8

onboot:
  - name: sysctl
    image: linuxkit/sysctl:v0.8
    binds:
      - /etc/sysctl.d:/etc/sysctl.d
  - name: dhcpcd
    image: linuxkit/dhcpcd:v0.8
    command: ["/sbin/dhcpcd", "--nobackground", "-f", "/dhcpcd.conf"]

services:
  - name: sshd
    image: linuxkit/sshd:v0.8
  - name: app
    image: myapp:{{ .VERSION }}
    capabilities:
      - CAP_NET_BIND_SERVICE
    binds:
      - /var/data:/data

files:
  - path: /etc/ssh/authorized_keys
    contents: |
      {{ .SSH_KEY }}
  - path: /etc/myapp/config.yaml
    contents: |
      server:
        port: 443
        domain: {{ .DOMAIN }}
      database:
        path: /data/app.db

Run with:

bash
core vm run --template prod \
  --var SSH_KEY="$(cat ~/.ssh/id_rsa.pub)" \
  --var VERSION=1.2.3 \
  --var DOMAIN=example.com

Template Variables

Variables use Go template syntax with double braces:

yaml
# Required variable
contents: |
  {{ .SSH_KEY }}

# With default value
contents: |
  port: {{ .PORT | default "8080" }}

# Conditional
{{ if .DEBUG }}
  debug: true
{{ end }}

See Also

Released under the EUPL-1.2 License.