Add Docker support for x86_64 (amd64) architecture

This commit adds comprehensive Docker support for running Swarms on x86_64 (amd64) architecture.

Changes:
- Updated Dockerfile with explicit platform specification (--platform=linux/amd64)
- Created root-level Dockerfile for easier access
- Created root-level docker-compose.yml with amd64 platform settings
- Updated scripts/docker/Dockerfile and docker-compose.yml for amd64
- Added DOCKER.md with comprehensive documentation
- Created build-docker-amd64.sh script for easy image building
- Created run-docker-amd64.sh script for quick container startup

Key Features:
- Multi-stage build for optimized image size
- Explicit x86_64/amd64 platform targeting
- Health checks for container monitoring
- Non-root user for security
- Development and production configurations
- Comprehensive documentation and examples

The Docker setup uses Python 3.11-slim-bullseye base image and includes
UV package manager for faster dependency installation.
pull/1174/head
Claude 2 months ago
parent 1bb4dab6a1
commit 63954e6f41
No known key found for this signature in database

@ -0,0 +1,225 @@
# Docker Setup for Swarms (x86_64/amd64)
This repository includes Docker support for running Swarms on x86_64 (amd64) architecture.
## Quick Start
### Option 1: Using Docker Compose (Recommended)
```bash
# Build and run the container
docker-compose up -d
# View logs
docker-compose logs -f swarms
# Stop the container
docker-compose down
```
### Option 2: Using Docker Build
```bash
# Build the image
docker build --platform linux/amd64 -t swarms:latest .
# Run the container
docker run --platform linux/amd64 -it swarms:latest bash
# Run with environment variables
docker run --platform linux/amd64 \
-e OPENAI_API_KEY=your_key_here \
-e ANTHROPIC_API_KEY=your_key_here \
-v $(pwd):/app \
swarms:latest
```
### Option 3: Pull from Docker Hub
```bash
# Pull the pre-built image
docker pull swarmscorp/swarms:latest
# Note: The pre-built image may need to be updated for amd64 compatibility
# Use the local build method above for guaranteed amd64 support
```
## Available Services
The `docker-compose.yml` includes two services:
### 1. swarms (Default Service)
- Runs a basic swarms container
- Includes health checks
- Auto-restarts unless stopped
### 2. swarms-dev (Development Service)
- Interactive bash shell
- Ideal for development and testing
- Mounted volumes for live code changes
```bash
# Run development container
docker-compose up -d swarms-dev
# Attach to the container
docker exec -it swarms-dev-container bash
```
## Architecture
This Docker image is explicitly built for **x86_64 (amd64)** architecture using:
- Base image: `python:3.11-slim-bullseye`
- Platform: `linux/amd64`
- Multi-stage build for optimized image size
## Environment Variables
Configure your Swarms instance by setting environment variables:
```bash
# Create a .env file in the root directory
cat > .env << EOF
OPENAI_API_KEY=sk-...
ANTHROPIC_API_KEY=sk-ant-...
GOOGLE_API_KEY=...
EOF
```
Then use with docker-compose:
```bash
docker-compose --env-file .env up -d
```
## Volume Mounts
The docker-compose configuration mounts the following directories:
- `.:/app` - Main application code
- `./data:/app/data` - Data directory
- `./models:/app/models` - Model files
## Building for Different Architectures
While this Dockerfile is optimized for amd64, you can build for other architectures:
```bash
# Build for multiple architectures (requires buildx)
docker buildx create --use
docker buildx build --platform linux/amd64,linux/arm64 -t swarms:multiarch .
```
## Health Checks
The container includes a built-in health check that verifies the swarms package can be imported:
```bash
# Check container health
docker inspect --format='{{.State.Health.Status}}' swarms-container
```
## Troubleshooting
### Issue: Architecture mismatch
If you're getting architecture-related errors, ensure Docker is configured for amd64:
```bash
# Check current architecture
docker info | grep Architecture
# Force amd64 platform
docker run --platform linux/amd64 swarms:latest
```
### Issue: Build fails
If the build fails, try cleaning Docker cache:
```bash
docker system prune -a
docker-compose build --no-cache
```
### Issue: Import errors
If you encounter import errors, rebuild the image:
```bash
docker-compose down
docker-compose build --no-cache
docker-compose up -d
```
## Advanced Usage
### Running Custom Scripts
```bash
# Run a Python script
docker run --platform linux/amd64 -v $(pwd):/app swarms:latest python your_script.py
# Using docker-compose
docker-compose run swarms python your_script.py
```
### Interactive Python Shell
```bash
# Start Python REPL
docker run --platform linux/amd64 -it swarms:latest python
# Or with docker-compose
docker-compose run swarms python
```
### Installing Additional Dependencies
Create a custom Dockerfile extending the base image:
```dockerfile
FROM swarms:latest
USER root
RUN pip install additional-package
USER swarms
```
## Production Deployment
For production deployments:
1. Use specific version tags instead of `latest`
2. Configure proper logging and monitoring
3. Set resource limits in docker-compose.yml
4. Use secrets management for API keys
5. Enable automatic container restarts
Example production configuration:
```yaml
services:
swarms:
image: swarms:1.0.0
deploy:
resources:
limits:
cpus: '2.0'
memory: 4G
reservations:
cpus: '1.0'
memory: 2G
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
```
## Support
For issues or questions:
- GitHub Issues: https://github.com/kyegomez/swarms/issues
- Documentation: https://docs.swarms.world
## License
MIT License - See LICENSE file for details

@ -0,0 +1,49 @@
# Multi-stage build for optimized Docker image
# Explicitly target x86_64 (amd64) architecture
FROM --platform=linux/amd64 python:3.11-slim-bullseye as builder
# Install system dependencies for building
RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential gcc curl \
&& rm -rf /var/lib/apt/lists/*
# Install UV for faster package management
RUN curl -LsSf https://astral.sh/uv/install.sh | sh
ENV PATH="/root/.cargo/bin:${PATH}"
# Create a virtual environment and install dependencies
RUN uv venv /opt/venv
ENV PATH="/opt/venv/bin:$PATH"
# Install the swarms package using UV
RUN uv pip install --system -U swarms
# Final stage
FROM --platform=linux/amd64 python:3.11-slim-bullseye
# Environment config for speed and safety
ENV PYTHONDONTWRITEBYTECODE=1 \
PYTHONUNBUFFERED=1 \
PATH="/opt/venv/bin:${PATH}" \
PYTHONPATH="/app:${PYTHONPATH}" \
USER=swarms
# Set working directory
WORKDIR /app
# Copy virtual environment from builder stage
COPY --from=builder /opt/venv /opt/venv
# Add non-root user
RUN useradd -m -s /bin/bash -U $USER && \
chown -R $USER:$USER /app
# Copy application code
COPY --chown=$USER:$USER . .
# Switch to non-root
USER $USER
# Optional health check
HEALTHCHECK --interval=30s --timeout=30s --start-period=5s --retries=3 \
CMD python -c "import swarms; print('Health check passed')" || exit 1

@ -0,0 +1,45 @@
#!/bin/bash
# Build script for Swarms Docker image (x86_64/amd64)
# This script builds the Swarms Docker image specifically for amd64 architecture
set -e
echo "=========================================="
echo "Building Swarms Docker Image for amd64"
echo "=========================================="
# Colors for output
GREEN='\033[0;32m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Check if Docker is installed
if ! command -v docker &> /dev/null; then
echo "Error: Docker is not installed. Please install Docker first."
exit 1
fi
# Check current architecture
ARCH=$(uname -m)
echo -e "${BLUE}Current system architecture: $ARCH${NC}"
# Build image
echo -e "${BLUE}Building Docker image for linux/amd64...${NC}"
docker build --platform linux/amd64 -t swarms:amd64 -t swarms:latest .
# Verify the build
echo -e "${BLUE}Verifying the build...${NC}"
docker images swarms
echo -e "${GREEN}=========================================="
echo "Build completed successfully!"
echo "==========================================${NC}"
echo ""
echo "To run the container:"
echo " docker run --platform linux/amd64 -it swarms:latest bash"
echo ""
echo "Or use docker-compose:"
echo " docker-compose up -d"
echo ""
echo "For more information, see DOCKER.md"

@ -0,0 +1,58 @@
version: '3.8'
services:
swarms:
platform: linux/amd64
build:
context: .
dockerfile: Dockerfile
platforms:
- linux/amd64
image: swarms:latest
container_name: swarms-container
environment:
- PYTHONUNBUFFERED=1
- PYTHONPATH=/app
# Add your API keys here or use .env file
# - OPENAI_API_KEY=${OPENAI_API_KEY}
# - ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY}
# - GOOGLE_API_KEY=${GOOGLE_API_KEY}
volumes:
- .:/app
- ./data:/app/data
- ./models:/app/models
working_dir: /app
command: python -c "import swarms; print('Swarms container is running successfully!')"
restart: unless-stopped
healthcheck:
test: ["CMD", "python", "-c", "import swarms; print('Health check passed')"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
swarms-dev:
platform: linux/amd64
build:
context: .
dockerfile: Dockerfile
platforms:
- linux/amd64
image: swarms:dev
container_name: swarms-dev-container
environment:
- PYTHONUNBUFFERED=1
- PYTHONPATH=/app
volumes:
- .:/app
- ./data:/app/data
- ./models:/app/models
working_dir: /app
command: bash
stdin_open: true
tty: true
restart: unless-stopped
networks:
default:
name: swarms-network

@ -0,0 +1,49 @@
#!/bin/bash
# Quick start script for Swarms Docker container (x86_64/amd64)
set -e
# Colors for output
GREEN='\033[0;32m'
BLUE='\033[0;34m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
echo "=========================================="
echo "Swarms Docker Quick Start (amd64)"
echo "=========================================="
# Check if Docker is installed
if ! command -v docker &> /dev/null; then
echo "Error: Docker is not installed. Please install Docker first."
exit 1
fi
# Check if image exists
if ! docker image inspect swarms:latest &> /dev/null; then
echo -e "${YELLOW}Swarms image not found. Building image...${NC}"
./build-docker-amd64.sh
fi
echo -e "${BLUE}Starting Swarms container...${NC}"
# Check if using docker-compose or docker run
if [ "$1" == "compose" ]; then
echo -e "${BLUE}Using docker-compose...${NC}"
docker-compose up -d
echo -e "${GREEN}Container started! View logs with: docker-compose logs -f${NC}"
else
echo -e "${BLUE}Using docker run...${NC}"
docker run --platform linux/amd64 \
--name swarms-container \
-v $(pwd):/app \
-e PYTHONUNBUFFERED=1 \
-it \
--rm \
swarms:latest bash
fi
echo -e "${GREEN}=========================================="
echo "Swarms is ready!"
echo "==========================================${NC}"

@ -1,5 +1,6 @@
# Multi-stage build for optimized Docker image
FROM python:3.11-slim-bullseye as builder
# Explicitly target x86_64 (amd64) architecture
FROM --platform=linux/amd64 python:3.11-slim-bullseye as builder
# Install system dependencies for building
RUN apt-get update && apt-get install -y --no-install-recommends \
@ -18,7 +19,7 @@ ENV PATH="/opt/venv/bin:$PATH"
RUN uv pip install --system -U swarms
# Final stage
FROM python:3.11-slim-bullseye
FROM --platform=linux/amd64 python:3.11-slim-bullseye
# Environment config for speed and safety
ENV PYTHONDONTWRITEBYTECODE=1 \

@ -2,9 +2,12 @@ version: '3.8'
services:
swarms:
platform: linux/amd64
build:
context: .
dockerfile: Dockerfile
context: ../..
dockerfile: scripts/docker/Dockerfile
platforms:
- linux/amd64
image: swarms:latest
container_name: swarms-container
environment:
@ -29,9 +32,12 @@ services:
start_period: 40s
swarms-dev:
platform: linux/amd64
build:
context: .
dockerfile: Dockerfile
context: ../..
dockerfile: scripts/docker/Dockerfile
platforms:
- linux/amd64
image: swarms:dev
container_name: swarms-dev-container
environment:
@ -48,9 +54,12 @@ services:
restart: unless-stopped
swarms-api:
platform: linux/amd64
build:
context: .
dockerfile: Dockerfile
context: ../..
dockerfile: scripts/docker/Dockerfile
platforms:
- linux/amd64
image: swarms:api
container_name: swarms-api-container
environment:

Loading…
Cancel
Save