257 lines
5.4 KiB
Markdown
257 lines
5.4 KiB
Markdown
|
|
# 🐳 Running Real Apps with Docker
|
|||
|
|
|
|||
|
|
The mock backend can run **actual** Docker containers for your apps, not just simulate them!
|
|||
|
|
|
|||
|
|
## Current Status
|
|||
|
|
|
|||
|
|
Check the banner when starting the mock backend:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
🐳 Available (apps will run for real!) ← Docker is running, apps will work!
|
|||
|
|
⚠️ Not available (simulated mode) ← Docker off, apps simulated only
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## Setup for Real Apps
|
|||
|
|
|
|||
|
|
### 1. Start Docker Desktop
|
|||
|
|
|
|||
|
|
Make sure Docker Desktop is running:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# Check if Docker daemon is running
|
|||
|
|
docker ps
|
|||
|
|
|
|||
|
|
# If you see: "Cannot connect to the Docker daemon..."
|
|||
|
|
# → Open Docker Desktop application
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. Build Your App Docker Images
|
|||
|
|
|
|||
|
|
For each app you want to run, you need a Docker image built with the exact name and version:
|
|||
|
|
|
|||
|
|
**For k484:**
|
|||
|
|
```bash
|
|||
|
|
# Assuming you have k484-package/ directory with a Dockerfile
|
|||
|
|
cd ~/k484-package
|
|||
|
|
docker build -t k484:0.1.0 .
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**For atob:**
|
|||
|
|
```bash
|
|||
|
|
# Assuming you have atob-package/ directory with a Dockerfile
|
|||
|
|
cd ~/atob-package
|
|||
|
|
docker build -t atob:0.1.0 .
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**For amin:**
|
|||
|
|
```bash
|
|||
|
|
cd ~/amin-package
|
|||
|
|
docker build -t amin:0.1.0 .
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3. Restart the Dev Server
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
npm stop
|
|||
|
|
npm start
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
You should now see: `🐳 Available (apps will run for real!)`
|
|||
|
|
|
|||
|
|
### 4. Install Apps in the UI
|
|||
|
|
|
|||
|
|
Visit http://localhost:8100, go to Marketplace, and install apps.
|
|||
|
|
|
|||
|
|
You'll see logs like:
|
|||
|
|
```
|
|||
|
|
[Package] 📦 Installing k484...
|
|||
|
|
[Package] 🐳 Docker available, attempting to run container...
|
|||
|
|
[Package] 🐳 Docker container running on port 8103
|
|||
|
|
[Package] ✅ k484 installed and RUNNING at http://localhost:8103
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 5. Launch Apps
|
|||
|
|
|
|||
|
|
Click "Launch" on any installed app - it will open at:
|
|||
|
|
- **atob**: http://localhost:8102
|
|||
|
|
- **k484**: http://localhost:8103
|
|||
|
|
- **amin**: http://localhost:8104
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Port Mapping
|
|||
|
|
|
|||
|
|
The mock backend uses fixed ports for known apps:
|
|||
|
|
|
|||
|
|
| App | Port | Container Name |
|
|||
|
|
|-----|------|----------------|
|
|||
|
|
| atob | 8102 | atob-test |
|
|||
|
|
| k484 | 8103 | k484-test |
|
|||
|
|
| amin | 8104 | amin-test |
|
|||
|
|
| Other apps | 8105+ | {id}-test |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Docker Image Requirements
|
|||
|
|
|
|||
|
|
Each app needs a Docker image with:
|
|||
|
|
- **Name**: `{app-id}:0.1.0`
|
|||
|
|
- **Port**: Expose port 80 inside container
|
|||
|
|
- **Format**: Standard web app serving HTTP
|
|||
|
|
|
|||
|
|
Example Dockerfile:
|
|||
|
|
```dockerfile
|
|||
|
|
FROM nginx:alpine
|
|||
|
|
COPY dist/ /usr/share/nginx/html/
|
|||
|
|
EXPOSE 80
|
|||
|
|
CMD ["nginx", "-g", "daemon off;"]
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Troubleshooting
|
|||
|
|
|
|||
|
|
### "Docker image not found"
|
|||
|
|
|
|||
|
|
**Problem**: App installs but logs show:
|
|||
|
|
```
|
|||
|
|
[Package] ℹ️ Docker image k484:0.1.0 not found, using simulation mode
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Solution**: Build the Docker image first:
|
|||
|
|
```bash
|
|||
|
|
cd ~/k484-package
|
|||
|
|
docker build -t k484:0.1.0 .
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### "Port is already allocated"
|
|||
|
|
|
|||
|
|
**Problem**:
|
|||
|
|
```
|
|||
|
|
Bind for 0.0.0.0:8103 failed: port is already allocated
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Solution**: Stop the existing container:
|
|||
|
|
```bash
|
|||
|
|
docker stop k484-test
|
|||
|
|
docker rm k484-test
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Or use the UI to uninstall the app first, which will clean up the container.
|
|||
|
|
|
|||
|
|
### "Cannot connect to Docker daemon"
|
|||
|
|
|
|||
|
|
**Problem**:
|
|||
|
|
```
|
|||
|
|
⚠️ Not available (simulated mode)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Solution**:
|
|||
|
|
1. Open Docker Desktop
|
|||
|
|
2. Wait for it to fully start (whale icon in menu bar should be steady)
|
|||
|
|
3. Restart dev server: `npm stop && npm start`
|
|||
|
|
|
|||
|
|
### App appears installed but Launch doesn't work
|
|||
|
|
|
|||
|
|
**Simulated mode**: The app is only simulated in the database, no real container is running.
|
|||
|
|
|
|||
|
|
**Check the logs** when installing to see if Docker was used:
|
|||
|
|
```
|
|||
|
|
# Docker mode (good):
|
|||
|
|
[Package] 🐳 Docker container running on port 8103
|
|||
|
|
[Package] ✅ k484 installed and RUNNING at http://localhost:8103
|
|||
|
|
|
|||
|
|
# Simulated mode (no container):
|
|||
|
|
[Package] ℹ️ Docker not available, using simulation mode
|
|||
|
|
[Package] ✅ k484 installed (simulated - no Docker container)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Checking Running Containers
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# List all running containers
|
|||
|
|
docker ps
|
|||
|
|
|
|||
|
|
# Check specific container
|
|||
|
|
docker ps --filter name=k484-test
|
|||
|
|
|
|||
|
|
# View container logs
|
|||
|
|
docker logs k484-test
|
|||
|
|
|
|||
|
|
# Stop a container
|
|||
|
|
docker stop k484-test
|
|||
|
|
|
|||
|
|
# Remove a container
|
|||
|
|
docker rm k484-test
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Benefits of Docker Mode
|
|||
|
|
|
|||
|
|
✅ **Real apps** - Actually test your applications
|
|||
|
|
✅ **Full functionality** - All features work (not just UI)
|
|||
|
|
✅ **Integration testing** - Test API calls, WebSocket, etc.
|
|||
|
|
✅ **Realistic development** - Matches production environment
|
|||
|
|
|
|||
|
|
## Benefits of Simulated Mode
|
|||
|
|
|
|||
|
|
✅ **No Docker required** - Lightweight development
|
|||
|
|
✅ **Fast startup** - No containers to build/start
|
|||
|
|
✅ **UI testing** - Perfect for frontend-only work
|
|||
|
|
✅ **Lower resource usage** - No Docker overhead
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Auto-Detection
|
|||
|
|
|
|||
|
|
The mock backend automatically:
|
|||
|
|
1. Checks if Docker daemon is running
|
|||
|
|
2. Checks if image exists for the app
|
|||
|
|
3. Tries to start container if possible
|
|||
|
|
4. Falls back to simulation if Docker unavailable
|
|||
|
|
|
|||
|
|
This means you can develop with or without Docker, and the system adapts automatically!
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Uninstalling Apps
|
|||
|
|
|
|||
|
|
When you uninstall an app through the UI:
|
|||
|
|
- **Docker mode**: Stops and removes the container
|
|||
|
|
- **Simulated mode**: Just removes from database
|
|||
|
|
|
|||
|
|
Both clean up properly - no manual cleanup needed!
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Quick Reference
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# Start Docker Desktop first
|
|||
|
|
open -a Docker
|
|||
|
|
|
|||
|
|
# Build images (one-time setup)
|
|||
|
|
cd ~/k484-package && docker build -t k484:0.1.0 .
|
|||
|
|
cd ~/atob-package && docker build -t atob:0.1.0 .
|
|||
|
|
|
|||
|
|
# Start dev servers
|
|||
|
|
cd neode-ui
|
|||
|
|
npm start
|
|||
|
|
|
|||
|
|
# Should see: 🐳 Available (apps will run for real!)
|
|||
|
|
|
|||
|
|
# Install apps via UI at http://localhost:8100
|
|||
|
|
# Apps will actually run at their ports!
|
|||
|
|
|
|||
|
|
# Stop everything when done
|
|||
|
|
npm stop
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
Happy coding! 🚀🐳
|
|||
|
|
|