Tutorial

How to Deploy a Container for Free: Step-by-Step Technical Guide

SnapDeploy Team 2026-01-06 8 min read
tutorialdockerdeploymentstep-by-stepbeginnersfree container hosting

This hands-on guide walks you through deploying your first Docker container for free. We'll cover project setup, Dockerfile creation, environment configuration, and the actual deployment process with real code examples.

Prerequisites

  • A GitHub account
  • Basic familiarity with the command line
  • A simple application (we'll use a Node.js example)

Step 1: Prepare Your Application

Let's create a simple Express.js application. Create these files in your project:

package.json

{
  "name": "my-free-container",
  "version": "1.0.0",
  "main": "index.js",
  "scripts": {
    "start": "node index.js"
  },
  "dependencies": {
    "express": "^4.18.2"
  }
}

index.js

const express = require('express');
const app = express();
const PORT = process.env.PORT || 3000;

app.get('/', (req, res) => {
  res.json({
    status: 'running',
    message: 'Hello from my free container!',
    timestamp: new Date().toISOString()
  });
});

app.get('/health', (req, res) => {
  res.status(200).send('OK');
});

app.listen(PORT, () => {
  console.log(`Server running on port ${PORT}`);
});

Step 2: Create a Dockerfile

Add a Dockerfile to your project root:

Dockerfile

# Use official Node.js LTS image
FROM node:20-alpine

# Set working directory
WORKDIR /app

# Copy package files first (for better caching)
COPY package*.json ./

# Install dependencies
RUN npm ci --only=production

# Copy application code
COPY . .

# Expose the port your app runs on
EXPOSE 3000

# Start the application
CMD ["npm", "start"]

Dockerfile Best Practices

  • Use Alpine images — Smaller size means faster builds
  • Copy package.json first — Enables Docker layer caching
  • Use npm ci — Faster and more reliable than npm install
  • Don't run as root — Add a non-root user for production

Step 3: Add a .dockerignore File

Create .dockerignore to exclude unnecessary files:

node_modules
npm-debug.log
.git
.gitignore
.env
*.md
.DS_Store

Step 4: Test Locally (Optional)

Before deploying, verify your container works locally:

# Build the image
docker build -t my-app .

# Run the container
docker run -p 3000:3000 my-app

# Test it
curl http://localhost:3000

Step 5: Push to GitHub

Initialize a git repository and push your code:

git init
git add .
git commit -m "Initial commit with Dockerfile"
git remote add origin https://github.com/yourusername/my-app.git
git push -u origin main

Step 6: Deploy to SnapDeploy

Now deploy your containerized application:

  1. Create account — Go to snapdeploy.dev and sign up (no credit card)
  2. New Container — Click "New Container" in the dashboard
  3. Connect GitHub — Authorize access and select your repository
  4. Configure — Set container name (becomes your-app.containers.snapdeploy.dev)
  5. Deploy — Click Deploy and watch the build logs

Step 7: Configure Environment Variables

If your app needs environment variables, add them in the dashboard:

# Example environment variables
NODE_ENV=production
DATABASE_URL=postgresql://user:pass@host:5432/db
API_KEY=your-secret-key

Access them in your code with process.env.VARIABLE_NAME.

Step 8: Verify Deployment

Once deployed, test your live container:

# Test the root endpoint
curl https://your-app.containers.snapdeploy.dev

# Expected response:
{
  "status": "running",
  "message": "Hello from my free container!",
  "timestamp": "2026-01-06T10:30:00.000Z"
}

Troubleshooting Common Issues

Build fails with "npm ERR!"

Ensure package-lock.json is committed. Run npm install locally first.

Container starts but returns 502

Check that your app listens on the PORT environment variable, not a hardcoded port.

Container keeps restarting

Check the logs in the dashboard. Common cause: missing environment variables or database connection failures.

Next Steps

You now have a containerized application running for free. Free deploy includes auto-sleep when idle and auto-wake on traffic — your container is always available. For 24/7 uptime, add Always-On starting at $12/month.

Ready to Deploy?

Deploy free, forever. No credit card required. No time limits.

Get DevOps Tips & Updates

Container deployment guides, platform updates, and DevOps best practices. No spam.

Unsubscribe anytime. We respect your privacy.

More Articles