algorithmic_trading / DOCKER_HUB_SETUP.md
Edwin Salguero
Add comprehensive Docker Hub integration with deployment scripts and documentation
9fb1755
# Docker Hub Setup Guide
This guide will help you deploy your algorithmic trading system to Docker Hub and use it from the cloud.
## Prerequisites
1. **Docker Hub Account**: Create an account at [hub.docker.com](https://hub.docker.com)
2. **Docker CLI**: Ensure Docker is installed and running
3. **Repository**: Create a repository on Docker Hub (optional, will be created automatically)
## Quick Start
### 1. Set Environment Variables
```bash
# Set your Docker Hub username
export DOCKER_USERNAME=yourusername
# Optionally set your password/token (for automated login)
export DOCKER_PASSWORD=yourpassword
```
### 2. Deploy to Docker Hub
```bash
# Deploy with default settings
./scripts/docker-build.sh deploy
# Or use the dedicated deployment script
./scripts/docker-hub-deploy.sh -u yourusername
# Deploy with custom image name and tag
./scripts/docker-hub-deploy.sh -u yourusername -i my-trading-system -t v1.0.0
```
### 3. Use from Docker Hub
```bash
# Start services using Docker Hub images
./scripts/docker-build.sh hub
# Or manually pull and run
docker pull yourusername/algorithmic-trading:latest
docker run -p 8000:8000 yourusername/algorithmic-trading:latest
```
## Detailed Instructions
### Step 1: Create Docker Hub Account
1. Go to [hub.docker.com](https://hub.docker.com)
2. Click "Sign Up" and create an account
3. Verify your email address
4. Create a repository (optional):
- Click "Create Repository"
- Name: `algorithmic-trading`
- Description: "Algorithmic Trading System with FinRL"
- Visibility: Public or Private
### Step 2: Generate Access Token (Recommended)
1. Go to Docker Hub β†’ Account Settings β†’ Security
2. Click "New Access Token"
3. Name: `algorithmic-trading-deploy`
4. Permissions: Read & Write
5. Copy the token (you won't see it again)
### Step 3: Configure Environment
```bash
# Add to your ~/.bashrc or ~/.zshrc
export DOCKER_USERNAME=yourusername
export DOCKER_PASSWORD=your_access_token
```
### Step 4: Deploy
```bash
# Build and deploy
./scripts/docker-hub-deploy.sh -u yourusername
# The script will:
# 1. Build the Docker image
# 2. Run tests (optional)
# 3. Login to Docker Hub
# 4. Tag the image
# 5. Push to Docker Hub
```
### Step 5: Verify Deployment
1. Check your Docker Hub repository: `https://hub.docker.com/r/yourusername/algorithmic-trading`
2. You should see your image with the latest tag
## Usage Examples
### Local Development with Docker Hub
```bash
# Start development environment
DOCKER_USERNAME=yourusername ./scripts/docker-build.sh hub
# Access services:
# - Jupyter Lab: http://localhost:8888
# - Trading System: http://localhost:8000
```
### Production Deployment
```bash
# Deploy to production
docker run -d \
--name trading-prod \
-p 8000:8000 \
-v $(pwd)/data:/app/data \
-v $(pwd)/logs:/app/logs \
-v $(pwd)/config.yaml:/app/config.yaml:ro \
yourusername/algorithmic-trading:latest
```
### Using Docker Compose
```bash
# Create .env file
echo "DOCKER_USERNAME=yourusername" > .env
echo "TAG=latest" >> .env
# Start services
docker compose -f docker-compose.hub.yml up -d
```
## Advanced Usage
### Multiple Tags
```bash
# Deploy with version tags
./scripts/docker-hub-deploy.sh -u yourusername -t v1.0.0
./scripts/docker-hub-deploy.sh -u yourusername -t v1.1.0
./scripts/docker-hub-deploy.sh -u yourusername -t latest
```
### Custom Image Names
```bash
# Deploy with custom name
./scripts/docker-hub-deploy.sh -u yourusername -i my-trading-bot -t production
```
### Automated Deployment
```bash
# Create a deployment script
cat > deploy.sh << 'EOF'
#!/bin/bash
export DOCKER_USERNAME=yourusername
export DOCKER_PASSWORD=your_token
./scripts/docker-hub-deploy.sh -u $DOCKER_USERNAME -t $(date +%Y%m%d)
EOF
chmod +x deploy.sh
./deploy.sh
```
## Troubleshooting
### Login Issues
```bash
# Manual login
docker login -u yourusername
# Check login status
docker info | grep Username
```
### Push Failures
```bash
# Check if repository exists
curl https://hub.docker.com/v2/repositories/yourusername/algorithmic-trading/
# Create repository manually if needed
# Go to Docker Hub β†’ Create Repository
```
### Permission Issues
```bash
# Check Docker permissions
docker ps
# If permission denied, add user to docker group
sudo usermod -aG docker $USER
# Log out and back in
```
### Network Issues
```bash
# Check Docker Hub connectivity
curl -I https://hub.docker.com
# Use different DNS if needed
echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf
```
## Best Practices
### 1. Use Access Tokens
- Never use your password in scripts
- Generate access tokens with limited permissions
- Rotate tokens regularly
### 2. Tag Strategically
- Use semantic versioning: `v1.0.0`, `v1.1.0`
- Keep `latest` tag updated
- Use date tags for testing: `2024-01-15`
### 3. Security
- Don't commit credentials to git
- Use environment variables
- Consider private repositories for sensitive code
### 4. Automation
- Set up CI/CD pipelines
- Automate testing before deployment
- Use GitHub Actions or similar
## CI/CD Integration
### GitHub Actions Example
```yaml
# .github/workflows/docker-hub.yml
name: Deploy to Docker Hub
on:
push:
tags: ['v*']
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Login to Docker Hub
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Build and push
run: |
docker build -t ${{ secrets.DOCKER_USERNAME }}/algorithmic-trading:${{ github.ref_name }} .
docker push ${{ secrets.DOCKER_USERNAME }}/algorithmic-trading:${{ github.ref_name }}
```
## Support
- **Docker Hub Documentation**: [docs.docker.com/docker-hub](https://docs.docker.com/docker-hub/)
- **Repository Issues**: Create an issue in this repository
- **Community**: Join Docker Hub community forums
## Next Steps
1. **Set up automated deployment** with CI/CD
2. **Create multiple environments** (dev, staging, prod)
3. **Monitor usage** with Docker Hub analytics
4. **Share with team** by adding collaborators
5. **Scale deployment** to multiple servers