Type something to search...

Building, using, and distributing Docker images

Docker Development

Guide for Docker-based development and image distribution.

Using Docker Directly

# Build the image
docker build -f plugins/docker-runner/Dockerfile -t astrolock:latest .

# Run a command
docker run --rm -it \
  -v $(pwd):/site \
  -w /site \
  astrolock:latest \
  astrolock help

# Start dev server
docker run --rm -it \
  -v $(pwd):/site \
  -w /site \
  -p 4321:4321 \
  astrolock:latest \
  astrolock write

Docker Compose

For development workflows:

# Interactive shell
docker-compose run astrolock

# Dev server with hot reload
docker-compose up dev

# Production build
docker-compose run build

Services

ServiceDescriptionCommand
astrolockInteractive CLIdocker-compose run astrolock
devDev serverdocker-compose up dev
buildProduction builddocker-compose run build

Image Details

  • Node.js 18 (Alpine Linux)
  • Yarn package manager
  • Git, jq
  • ffmpeg & lame (audio encoding)
  • AWS CLI

Size: ~500MB compressed, ~1.2GB uncompressed

Volume Mounts

# Site directory
-v $(pwd):/site

# AWS credentials (read-only)
-v ~/.aws:/root/.aws:ro

# SSH keys (for Git)
-v ~/.ssh:/root/.ssh:ro

Building Custom Images

Edit plugins/docker-runner/Dockerfile:

RUN apk add --no-cache \
    imagemagick \
    ghostscript

AWS ECR Distribution

Info

For distributing Docker images to your team, use AWS ECR (Elastic Container Registry).

Prerequisites

  • AWS CLI configured (aws configure)
  • ECR repository created (via Terraform or AWS Console)
  • Docker installed
# Set your ECR details
export ECR_REGION="us-east-1"
export ECR_REGISTRY_URL="123456789012.dkr.ecr.us-east-1.amazonaws.com"
export ECR_REPOSITORY="astrolock-cli"
export IMAGE_TAG="latest"

# Build the image
docker build -f ./Dockerfile -t ${ECR_REGISTRY_URL}/${ECR_REPOSITORY}:${IMAGE_TAG} .

# Authenticate with ECR
aws ecr get-login-password --region ${ECR_REGION} | \
  docker login --username AWS --password-stdin ${ECR_REGISTRY_URL}

# Push to ECR
docker push ${ECR_REGISTRY_URL}/${ECR_REPOSITORY}:${IMAGE_TAG}

echo "Published to ${ECR_REGISTRY_URL}/${ECR_REPOSITORY}:${IMAGE_TAG}"

Multi-Stage Builds

For smaller production images:

FROM astrolock:latest AS builder
WORKDIR /site
COPY . .
RUN astrolock build

FROM nginx:alpine
COPY --from=builder /site/dist /usr/share/nginx/html

Performance Tips

# docker-compose.yml
volumes:
  - ./:/site
  - node_modules:/site/node_modules  # Named volume

Platform-Specific Notes

PlatformNotes
macOSDocker Desktop recommended. Volume mounts slower than Linux.
WindowsUse WSL2 backend for better performance.
LinuxNative performance. No special configuration needed.

Troubleshooting

# Fix ownership
sudo chown -R $USER:$USER .

# Or run as your user
docker run --user $(id -u):$(id -g) ...

Tip

Setting up CI/CD? See Deployment Automation for GitHub Actions workflows.