mirror of
https://github.com/johndoe6345789/low-code-react-app-b.git
synced 2026-04-25 06:04:54 +00:00
299 lines
6.9 KiB
Markdown
299 lines
6.9 KiB
Markdown
# Multi-Architecture Build Scripts
|
|
|
|
This directory contains helper scripts for QEMU multi-architecture Docker builds.
|
|
|
|
## Scripts
|
|
|
|
### 🚀 build-multiarch.sh
|
|
|
|
Builds multi-architecture Docker images locally using QEMU and Docker Buildx.
|
|
|
|
**Usage:**
|
|
```bash
|
|
# Make executable
|
|
chmod +x scripts/build-multiarch.sh
|
|
|
|
# Build for local testing (loads into Docker)
|
|
./scripts/build-multiarch.sh myapp latest
|
|
|
|
# Build and push to registry
|
|
./scripts/build-multiarch.sh myapp latest "linux/amd64,linux/arm64" ghcr.io --push
|
|
|
|
# Custom platforms
|
|
./scripts/build-multiarch.sh myapp v1.0 "linux/amd64,linux/arm64,linux/arm/v7" ghcr.io --push
|
|
```
|
|
|
|
**Parameters:**
|
|
1. `IMAGE_NAME` - Docker image name (default: `myapp`)
|
|
2. `IMAGE_TAG` - Image tag (default: `latest`)
|
|
3. `PLATFORMS` - Comma-separated platforms (default: `linux/amd64,linux/arm64`)
|
|
4. `REGISTRY` - Container registry (default: `ghcr.io`)
|
|
5. `--push` - Push to registry (omit to load locally)
|
|
|
|
**Features:**
|
|
- ✅ Automatic QEMU setup
|
|
- ✅ Buildx builder configuration
|
|
- ✅ Color-coded output
|
|
- ✅ Error handling
|
|
- ✅ Progress indicators
|
|
|
|
### 🔍 validate-qemu.sh
|
|
|
|
Validates QEMU installation and multi-architecture build capabilities.
|
|
|
|
**Usage:**
|
|
```bash
|
|
# Make executable
|
|
chmod +x scripts/validate-qemu.sh
|
|
|
|
# Run validation
|
|
./scripts/validate-qemu.sh
|
|
```
|
|
|
|
**Checks:**
|
|
- ✅ Docker installation
|
|
- ✅ Docker Buildx availability
|
|
- ✅ QEMU installation
|
|
- ✅ QEMU binaries functionality
|
|
- ✅ Buildx builder setup
|
|
- ✅ Platform support (AMD64, ARM64)
|
|
- ✅ Test builds for each platform
|
|
- ✅ CI/CD configuration validation
|
|
|
|
**Exit Codes:**
|
|
- `0` - All validations passed
|
|
- `1` - One or more validations failed
|
|
|
|
## Quick Start
|
|
|
|
### First Time Setup
|
|
|
|
```bash
|
|
# 1. Make scripts executable
|
|
chmod +x scripts/*.sh
|
|
|
|
# 2. Validate your environment
|
|
./scripts/validate-qemu.sh
|
|
|
|
# 3. Build your first multi-arch image
|
|
./scripts/build-multiarch.sh codeforge latest
|
|
```
|
|
|
|
### Local Development
|
|
|
|
```bash
|
|
# Build and load into local Docker (AMD64 only for speed)
|
|
./scripts/build-multiarch.sh myapp dev
|
|
|
|
# Run the image
|
|
docker run -p 80:80 ghcr.io/myapp:dev
|
|
```
|
|
|
|
### Production Release
|
|
|
|
```bash
|
|
# Build multi-arch and push to registry
|
|
./scripts/build-multiarch.sh codeforge v1.2.3 "linux/amd64,linux/arm64" ghcr.io --push
|
|
|
|
# Verify the manifest
|
|
docker manifest inspect ghcr.io/codeforge:v1.2.3
|
|
```
|
|
|
|
## Supported Platforms
|
|
|
|
### Default Platforms
|
|
- `linux/amd64` - Intel/AMD 64-bit (x86_64)
|
|
- `linux/arm64` - ARM 64-bit (aarch64)
|
|
|
|
### Additional Platforms (Optional)
|
|
- `linux/arm/v7` - ARM 32-bit (armv7l) - Raspberry Pi 3 and older
|
|
- `linux/arm/v6` - ARM 32-bit (armv6l) - Raspberry Pi Zero
|
|
- `linux/ppc64le` - IBM POWER (Little Endian)
|
|
- `linux/s390x` - IBM Z mainframe
|
|
- `linux/386` - Intel/AMD 32-bit (i386)
|
|
|
|
## CI/CD Integration
|
|
|
|
These scripts are reference implementations. The actual CI/CD pipelines use:
|
|
|
|
### GitHub Actions
|
|
```yaml
|
|
- name: Set up QEMU
|
|
uses: docker/setup-qemu-action@v3
|
|
with:
|
|
platforms: linux/amd64,linux/arm64
|
|
```
|
|
|
|
### CircleCI
|
|
```yaml
|
|
- run:
|
|
name: Install QEMU
|
|
command: docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
|
|
```
|
|
|
|
### GitLab CI
|
|
```yaml
|
|
before_script:
|
|
- docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
|
|
- docker buildx create --name multiarch --driver docker-container --use
|
|
```
|
|
|
|
### Jenkins
|
|
```groovy
|
|
sh 'docker run --rm --privileged multiarch/qemu-user-static --reset -p yes'
|
|
sh 'docker buildx create --name multiarch --driver docker-container --use'
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
### Permission Denied
|
|
|
|
```bash
|
|
# Run with sudo
|
|
sudo ./scripts/build-multiarch.sh myapp latest
|
|
|
|
# Or add your user to docker group
|
|
sudo usermod -aG docker $USER
|
|
newgrp docker
|
|
```
|
|
|
|
### QEMU Not Found
|
|
|
|
```bash
|
|
# Manually install QEMU
|
|
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
|
|
```
|
|
|
|
### Buildx Not Available
|
|
|
|
```bash
|
|
# Install Docker Buildx
|
|
docker buildx install
|
|
|
|
# Verify installation
|
|
docker buildx version
|
|
```
|
|
|
|
### Slow Builds
|
|
|
|
Cross-compilation (especially AMD64 → ARM64) is slower than native builds. This is normal.
|
|
|
|
**Optimization tips:**
|
|
- Use build cache: `--cache-from type=gha --cache-to type=gha,mode=max`
|
|
- Build single platform for development: remove `--platform` or specify one arch
|
|
- Use native runners: GitHub Actions has ARM64 runners available
|
|
|
|
### Platform Not Supported
|
|
|
|
Some base images don't support all platforms. Check the base image documentation.
|
|
|
|
```bash
|
|
# Check available platforms for an image
|
|
docker manifest inspect alpine:latest
|
|
```
|
|
|
|
## Performance Benchmarks
|
|
|
|
Approximate build times for a typical web application:
|
|
|
|
| Configuration | Time | Notes |
|
|
|--------------|------|-------|
|
|
| AMD64 only (native) | 5-8 min | Fastest |
|
|
| ARM64 only (emulated) | 10-15 min | Cross-compiled on AMD64 |
|
|
| AMD64 + ARM64 | 15-20 min | Both platforms |
|
|
| AMD64 + ARM64 + ARMv7 | 20-30 min | Three platforms |
|
|
|
|
## Environment Variables
|
|
|
|
Scripts support these environment variables:
|
|
|
|
```bash
|
|
# Docker registry credentials
|
|
export DOCKER_USERNAME="your-username"
|
|
export DOCKER_PASSWORD="your-token"
|
|
|
|
# Custom registry
|
|
export REGISTRY="ghcr.io"
|
|
|
|
# Build options
|
|
export DOCKER_BUILDKIT=1
|
|
export BUILDKIT_PROGRESS=plain
|
|
```
|
|
|
|
## Examples
|
|
|
|
### Example 1: Development Build
|
|
|
|
```bash
|
|
# Quick local build for testing
|
|
./scripts/build-multiarch.sh myapp dev
|
|
|
|
# Test the image
|
|
docker run -p 3000:80 ghcr.io/myapp:dev
|
|
curl http://localhost:3000
|
|
```
|
|
|
|
### Example 2: Staging Release
|
|
|
|
```bash
|
|
# Build and push to staging
|
|
./scripts/build-multiarch.sh myapp staging "linux/amd64,linux/arm64" ghcr.io --push
|
|
|
|
# Deploy on staging server
|
|
docker pull ghcr.io/myapp:staging
|
|
docker run -d -p 80:80 ghcr.io/myapp:staging
|
|
```
|
|
|
|
### Example 3: Production Release
|
|
|
|
```bash
|
|
# Build with version tag
|
|
./scripts/build-multiarch.sh myapp v2.1.0 "linux/amd64,linux/arm64" ghcr.io --push
|
|
|
|
# Also tag as latest
|
|
docker tag ghcr.io/myapp:v2.1.0 ghcr.io/myapp:latest
|
|
docker push ghcr.io/myapp:latest
|
|
```
|
|
|
|
### Example 4: IoT/Edge Devices
|
|
|
|
```bash
|
|
# Build for Raspberry Pi (ARMv7 + ARM64)
|
|
./scripts/build-multiarch.sh iot-app v1.0 "linux/arm64,linux/arm/v7" ghcr.io --push
|
|
|
|
# Pull on Raspberry Pi
|
|
docker pull ghcr.io/iot-app:v1.0
|
|
docker run ghcr.io/iot-app:v1.0
|
|
```
|
|
|
|
## Additional Resources
|
|
|
|
- [QEMU Integration Guide](../QEMU_INTEGRATION.md) - Full documentation
|
|
- [CI/CD Summary](../QEMU_CI_CD_SUMMARY.md) - Implementation details
|
|
- [Docker Buildx](https://docs.docker.com/buildx/) - Official documentation
|
|
- [QEMU User Static](https://github.com/multiarch/qemu-user-static) - QEMU binaries
|
|
|
|
## Contributing
|
|
|
|
When adding new scripts:
|
|
|
|
1. Follow the existing script structure
|
|
2. Add color-coded output for better UX
|
|
3. Include error handling with meaningful messages
|
|
4. Document usage and parameters
|
|
5. Update this README
|
|
|
|
## Support
|
|
|
|
For issues with multi-architecture builds:
|
|
|
|
1. Run validation: `./scripts/validate-qemu.sh`
|
|
2. Check Docker version: `docker --version` (v20.10+ recommended)
|
|
3. Verify QEMU: `docker run --rm multiarch/qemu-user-static --version`
|
|
4. Review logs for specific error messages
|
|
|
|
---
|
|
|
|
*Last Updated: 2024*
|
|
*Maintained by: Development Team*
|