169 lines
3.4 KiB
Markdown
169 lines
3.4 KiB
Markdown
|
|
# LinuxKit VMs
|
||
|
|
|
||
|
|
Deploy applications using lightweight, immutable LinuxKit VMs. VMs run using QEMU or HyperKit depending on your system.
|
||
|
|
|
||
|
|
## Running VMs
|
||
|
|
|
||
|
|
### From Image File
|
||
|
|
|
||
|
|
Run pre-built images in `.iso`, `.qcow2`, `.vmdk`, or `.raw` format:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Run ISO image
|
||
|
|
core vm run server.iso
|
||
|
|
|
||
|
|
# Run with more resources
|
||
|
|
core vm run -d --memory 4096 --cpus 4 server.qcow2
|
||
|
|
|
||
|
|
# Custom SSH port
|
||
|
|
core vm run --ssh-port 2223 server.iso
|
||
|
|
```
|
||
|
|
|
||
|
|
### From Template
|
||
|
|
|
||
|
|
Build and run from a LinuxKit template in one command:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Run template with SSH key
|
||
|
|
core vm run --template server-php --var SSH_KEY="$(cat ~/.ssh/id_rsa.pub)"
|
||
|
|
|
||
|
|
# Multiple variables
|
||
|
|
core vm run --template server-php \
|
||
|
|
--var SSH_KEY="$(cat ~/.ssh/id_rsa.pub)" \
|
||
|
|
--var DOMAIN=example.com
|
||
|
|
```
|
||
|
|
|
||
|
|
## Options
|
||
|
|
|
||
|
|
| Flag | Description | Default |
|
||
|
|
|------|-------------|---------|
|
||
|
|
| `--template` | Run from a LinuxKit template | - |
|
||
|
|
| `--var` | Template variable (KEY=VALUE) | - |
|
||
|
|
| `--name` | VM name | auto |
|
||
|
|
| `--memory` | Memory in MB | 1024 |
|
||
|
|
| `--cpus` | CPU count | 1 |
|
||
|
|
| `--ssh-port` | SSH port for exec | 2222 |
|
||
|
|
| `-d` | Detached mode (background) | false |
|
||
|
|
|
||
|
|
## Managing VMs
|
||
|
|
|
||
|
|
### List Running VMs
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Show running VMs
|
||
|
|
core vm ps
|
||
|
|
|
||
|
|
# Include stopped VMs
|
||
|
|
core vm ps -a
|
||
|
|
```
|
||
|
|
|
||
|
|
Output:
|
||
|
|
```
|
||
|
|
ID NAME IMAGE STATUS STARTED PID
|
||
|
|
abc12345 myvm server-php.qcow2 running 5m 12345
|
||
|
|
def67890 devbox core-dev.iso stopped 2h -
|
||
|
|
```
|
||
|
|
|
||
|
|
### Stop a VM
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Full ID
|
||
|
|
core vm stop abc12345678
|
||
|
|
|
||
|
|
# Partial ID match
|
||
|
|
core vm stop abc1
|
||
|
|
```
|
||
|
|
|
||
|
|
### View Logs
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# View logs
|
||
|
|
core vm logs abc12345
|
||
|
|
|
||
|
|
# Follow logs (like tail -f)
|
||
|
|
core vm logs -f abc12345
|
||
|
|
```
|
||
|
|
|
||
|
|
### Execute Commands
|
||
|
|
|
||
|
|
Run commands in a VM via SSH:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# List files
|
||
|
|
core vm exec abc12345 ls -la
|
||
|
|
|
||
|
|
# Check services
|
||
|
|
core vm exec abc12345 systemctl status php-fpm
|
||
|
|
|
||
|
|
# Open interactive shell
|
||
|
|
core vm exec abc12345 /bin/sh
|
||
|
|
```
|
||
|
|
|
||
|
|
## Building Images
|
||
|
|
|
||
|
|
Build LinuxKit images with `core build`:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Build ISO from config
|
||
|
|
core build --type linuxkit --config .core/linuxkit/server.yml
|
||
|
|
|
||
|
|
# Build QCOW2 for QEMU/KVM
|
||
|
|
core build --type linuxkit --config .core/linuxkit/server.yml --format qcow2-bios
|
||
|
|
|
||
|
|
# Build for multiple platforms
|
||
|
|
core build --type linuxkit --targets linux/amd64,linux/arm64
|
||
|
|
```
|
||
|
|
|
||
|
|
### Output Formats
|
||
|
|
|
||
|
|
| Format | Description | Use Case |
|
||
|
|
|--------|-------------|----------|
|
||
|
|
| `iso-bios` | Bootable ISO | Physical servers, legacy VMs |
|
||
|
|
| `qcow2-bios` | QEMU/KVM image | Linux hypervisors |
|
||
|
|
| `raw` | Raw disk image | Cloud providers |
|
||
|
|
| `vmdk` | VMware image | VMware ESXi |
|
||
|
|
| `vhd` | Hyper-V image | Windows Server |
|
||
|
|
|
||
|
|
## LinuxKit Configuration
|
||
|
|
|
||
|
|
Example `.core/linuxkit/server.yml`:
|
||
|
|
|
||
|
|
```yaml
|
||
|
|
kernel:
|
||
|
|
image: linuxkit/kernel:5.15
|
||
|
|
cmdline: "console=tty0"
|
||
|
|
|
||
|
|
init:
|
||
|
|
- linuxkit/init:v0.8
|
||
|
|
- linuxkit/runc: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: php
|
||
|
|
image: dunglas/frankenphp:latest
|
||
|
|
|
||
|
|
files:
|
||
|
|
- path: /etc/ssh/authorized_keys
|
||
|
|
contents: |
|
||
|
|
{{ .SSH_KEY }}
|
||
|
|
- path: /etc/myapp/config.yaml
|
||
|
|
contents: |
|
||
|
|
server:
|
||
|
|
port: 8080
|
||
|
|
domain: {{ .DOMAIN }}
|
||
|
|
```
|
||
|
|
|
||
|
|
## See Also
|
||
|
|
|
||
|
|
- [Templates](templates) - Pre-configured VM templates
|
||
|
|
- [LinuxKit Publisher](/publish/linuxkit) - Publish LinuxKit images
|
||
|
|
- [CLI Reference](/build/cli/vm/) - Full VM command documentation
|