262 lines
6.3 KiB
Markdown
262 lines
6.3 KiB
Markdown
# Publishing BDFR Web Interface to Docker Hub
|
|
|
|
This guide covers how to build and push the Docker image to Docker Hub.
|
|
|
|
## Prerequisites
|
|
|
|
1. **Docker Hub Account**: Create one at https://hub.docker.com if you don't have one
|
|
2. **Docker installed**: Ensure Docker is running on your machine
|
|
|
|
## Step 1: Login to Docker Hub
|
|
|
|
Open your terminal and login:
|
|
|
|
```bash
|
|
docker login
|
|
```
|
|
|
|
Enter your Docker Hub username and password when prompted.
|
|
|
|
## Step 2: Build the Image with Proper Tagging
|
|
|
|
Build the image with your Docker Hub username and desired repository name:
|
|
|
|
```bash
|
|
# Replace 'yourusername' with your actual Docker Hub username
|
|
# Replace 'bdfr-web' with your desired repository name (or keep it)
|
|
|
|
docker build -t yourusername/bdfr-web:latest .
|
|
|
|
# You can also add version tags
|
|
docker build -t yourusername/bdfr-web:latest -t yourusername/bdfr-web:1.0.0 .
|
|
```
|
|
|
|
**Example:**
|
|
```bash
|
|
docker build -t danielsmith/bdfr-web:latest -t danielsmith/bdfr-web:1.0.0 .
|
|
```
|
|
|
|
## Step 3: Test the Image Locally (Optional but Recommended)
|
|
|
|
Before pushing, verify the image works:
|
|
|
|
```bash
|
|
docker run -d -p 8000:8000 \
|
|
-v $(pwd)/downloads:/downloads \
|
|
-v $(pwd)/data:/app/data \
|
|
--name bdfr-test \
|
|
yourusername/bdfr-web:latest
|
|
```
|
|
|
|
Visit `http://localhost:8000` to verify it works, then clean up:
|
|
|
|
```bash
|
|
docker stop bdfr-test
|
|
docker rm bdfr-test
|
|
```
|
|
|
|
## Step 4: Push to Docker Hub
|
|
|
|
Push the image to Docker Hub:
|
|
|
|
```bash
|
|
# Push latest tag
|
|
docker push yourusername/bdfr-web:latest
|
|
|
|
# If you created a version tag, push that too
|
|
docker push yourusername/bdfr-web:1.0.0
|
|
```
|
|
|
|
## Step 5: Verify the Push
|
|
|
|
1. Go to https://hub.docker.com
|
|
2. Navigate to your repositories
|
|
3. You should see `bdfr-web` listed
|
|
4. Click on it to see tags and details
|
|
|
|
## Using the Published Image
|
|
|
|
Others can now pull and use your image:
|
|
|
|
```bash
|
|
docker pull yourusername/bdfr-web:latest
|
|
docker run -d -p 8000:8000 -v ./downloads:/downloads yourusername/bdfr-web:latest
|
|
```
|
|
|
|
Or using docker-compose, update [`docker-compose.yml`](docker-compose.yml):
|
|
|
|
```yaml
|
|
services:
|
|
bdfr-web:
|
|
image: yourusername/bdfr-web:latest # Replace 'build:' section with this
|
|
# ... rest of configuration
|
|
```
|
|
|
|
## Automated Build with Docker Hub
|
|
|
|
You can set up automated builds that trigger when you push to GitHub:
|
|
|
|
1. Go to https://hub.docker.com
|
|
2. Navigate to your repository
|
|
3. Click "Builds" tab
|
|
4. Click "Configure Automated Builds"
|
|
5. Connect your GitHub account
|
|
6. Select your repository
|
|
7. Configure build rules (e.g., build on push to main branch)
|
|
|
|
## Multi-Platform Builds (Optional)
|
|
|
|
To build for multiple architectures (amd64, arm64, etc.):
|
|
|
|
### Setup buildx (one-time setup)
|
|
|
|
```bash
|
|
# Create a new builder
|
|
docker buildx create --name multiplatform --use
|
|
|
|
# Bootstrap the builder
|
|
docker buildx inspect --bootstrap
|
|
```
|
|
|
|
### Build and push multi-platform image
|
|
|
|
```bash
|
|
docker buildx build \
|
|
--platform linux/amd64,linux/arm64 \
|
|
-t yourusername/bdfr-web:latest \
|
|
-t yourusername/bdfr-web:1.0.0 \
|
|
--push \
|
|
.
|
|
```
|
|
|
|
This creates images that work on both x86_64 (Intel/AMD) and ARM64 (Apple Silicon, Raspberry Pi, etc.).
|
|
|
|
## Updating Your Published Image
|
|
|
|
When you make changes:
|
|
|
|
1. **Update version**: Increment version in tags (e.g., 1.0.0 → 1.0.1)
|
|
2. **Rebuild**:
|
|
```bash
|
|
docker build -t yourusername/bdfr-web:latest -t yourusername/bdfr-web:1.0.1 .
|
|
```
|
|
3. **Push**:
|
|
```bash
|
|
docker push yourusername/bdfr-web:latest
|
|
docker push yourusername/bdfr-web:1.0.1
|
|
```
|
|
|
|
## Best Practices
|
|
|
|
### Tagging Strategy
|
|
|
|
- `latest`: Always points to the most recent stable build
|
|
- `1.0.0`, `1.0.1`: Specific version tags for reproducibility
|
|
- `1.0`, `1`: Major/minor version tags
|
|
- `dev`: Development/unstable builds
|
|
|
|
Example tagging:
|
|
```bash
|
|
docker build -t yourusername/bdfr-web:latest \
|
|
-t yourusername/bdfr-web:1.0.1 \
|
|
-t yourusername/bdfr-web:1.0 \
|
|
-t yourusername/bdfr-web:1 .
|
|
```
|
|
|
|
### Repository Description
|
|
|
|
Add a good description to your Docker Hub repository:
|
|
|
|
1. Go to your repository on Docker Hub
|
|
2. Click "Description" tab
|
|
3. Add a README with:
|
|
- What the image does
|
|
- How to use it
|
|
- Environment variables
|
|
- Volume mounts
|
|
- Example docker-compose.yml
|
|
|
|
### Size Optimization
|
|
|
|
Current image uses multi-stage builds and is already optimized. To check size:
|
|
|
|
```bash
|
|
docker images yourusername/bdfr-web
|
|
```
|
|
|
|
## Complete Script
|
|
|
|
Here's a complete script to build and push (save as `publish-docker.sh`):
|
|
|
|
```bash
|
|
#!/bin/bash
|
|
set -e
|
|
|
|
# Configuration
|
|
DOCKER_USERNAME="yourusername"
|
|
IMAGE_NAME="bdfr-web"
|
|
VERSION="1.0.0"
|
|
|
|
# Build
|
|
echo "Building Docker image..."
|
|
docker build -t ${DOCKER_USERNAME}/${IMAGE_NAME}:latest \
|
|
-t ${DOCKER_USERNAME}/${IMAGE_NAME}:${VERSION} .
|
|
|
|
# Test
|
|
echo "Testing image..."
|
|
docker run --rm ${DOCKER_USERNAME}/${IMAGE_NAME}:latest bdfr --version
|
|
|
|
# Login (if not already logged in)
|
|
echo "Logging in to Docker Hub..."
|
|
docker login
|
|
|
|
# Push
|
|
echo "Pushing to Docker Hub..."
|
|
docker push ${DOCKER_USERNAME}/${IMAGE_NAME}:latest
|
|
docker push ${DOCKER_USERNAME}/${IMAGE_NAME}:${VERSION}
|
|
|
|
echo "Done! Image published to:"
|
|
echo " docker pull ${DOCKER_USERNAME}/${IMAGE_NAME}:latest"
|
|
echo " docker pull ${DOCKER_USERNAME}/${IMAGE_NAME}:${VERSION}"
|
|
```
|
|
|
|
Make it executable:
|
|
```bash
|
|
chmod +x publish-docker.sh
|
|
./publish-docker.sh
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
### "denied: requested access to the resource is denied"
|
|
|
|
- Make sure you're logged in: `docker login`
|
|
- Verify your username in the image tag matches your Docker Hub username
|
|
- Check that the repository exists or that you have permissions
|
|
|
|
### "image not found" after push
|
|
|
|
- Wait a few minutes - Docker Hub indexing can be delayed
|
|
- Refresh the Docker Hub web page
|
|
- Try pulling: `docker pull yourusername/bdfr-web:latest`
|
|
|
|
### Large image size
|
|
|
|
Current image should be ~500-800MB. If larger:
|
|
- Check that `.dockerignore` is working
|
|
- Verify multi-stage build is being used
|
|
- Clean up any unnecessary files in the image
|
|
|
|
## Private Repositories
|
|
|
|
To make your repository private:
|
|
|
|
1. Go to Docker Hub repository settings
|
|
2. Change visibility to "Private"
|
|
3. Users will need to login to pull: `docker login` before `docker pull`
|
|
|
|
## Additional Resources
|
|
|
|
- [Docker Hub Documentation](https://docs.docker.com/docker-hub/)
|
|
- [Dockerfile Best Practices](https://docs.docker.com/develop/develop-images/dockerfile_best-practices/)
|
|
- [Docker Buildx Documentation](https://docs.docker.com/buildx/working-with-buildx/) |