Configure Linux development environment with Docker and Docker Compose

Beginner 25 min May 05, 2026 72 views
Ubuntu 24.04 Debian 12 AlmaLinux 9 Rocky Linux 9

Set up a complete Docker development environment with Docker Compose for containerized application development. Install Docker Engine, configure user permissions, and establish efficient development workflows.

Prerequisites

  • Root or sudo access
  • Internet connection for package downloads
  • At least 4GB RAM recommended
  • 20GB free disk space

What this solves

This tutorial sets up a complete Docker development environment on Linux with Docker Compose for containerized application development. You'll install Docker Engine, configure proper user permissions, and establish efficient development workflows for building and testing applications locally.

Step-by-step installation

Update system packages

Start by updating your package manager to ensure you get the latest versions and dependencies.

sudo apt update && sudo apt upgrade -y
sudo dnf update -y

Install required dependencies

Install packages needed for Docker repository setup and HTTPS transport.

sudo apt install -y ca-certificates curl gnupg lsb-release
sudo dnf install -y dnf-plugins-core

Add Docker repository

Add the official Docker repository to get the latest stable version.

sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

Install Docker Engine and Docker Compose

Install Docker Engine, CLI tools, containerd runtime, and Docker Compose plugin.

sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Start and enable Docker service

Enable Docker to start automatically on boot and start it immediately.

sudo systemctl enable --now docker
sudo systemctl status docker

Add user to docker group

Add your user to the docker group to run Docker commands without sudo. This avoids permission issues in development workflows.

sudo usermod -aG docker $USER
Note: You need to log out and back in for group changes to take effect, or run newgrp docker in your current session.

Apply group changes

Apply the new group membership without logging out.

newgrp docker

Configure development environment

Create development directory structure

Set up a organized directory structure for your Docker projects.

mkdir -p ~/docker-projects/{web,databases,services}
cd ~/docker-projects

Create a sample development stack

Create a sample Docker Compose file for a typical web development environment with a database.

version: '3.8'

services:
  web:
    image: nginx:alpine
    container_name: dev-web
    ports:
      - "8080:80"
    volumes:
      - ./web:/usr/share/nginx/html
    depends_on:
      - db
    networks:
      - dev-network

  db:
    image: postgres:15-alpine
    container_name: dev-db
    environment:
      POSTGRES_DB: devdb
      POSTGRES_USER: developer
      POSTGRES_PASSWORD: devpass123
    ports:
      - "5432:5432"
    volumes:
      - postgres_data:/var/lib/postgresql/data
    networks:
      - dev-network

  redis:
    image: redis:7-alpine
    container_name: dev-redis
    ports:
      - "6379:6379"
    networks:
      - dev-network

volumes:
  postgres_data:

networks:
  dev-network:
    driver: bridge

Create sample web content

Create a simple HTML file to test the web server container.

mkdir -p ~/docker-projects/web



    Docker Development Environment


    

Welcome to your Docker development environment!

Your containerized stack is running successfully.

  • Web server: Nginx
  • Database: PostgreSQL
  • Cache: Redis

Configure Docker daemon settings

Optimize Docker daemon for development with improved logging and resource limits.

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  },
  "storage-driver": "overlay2",
  "default-address-pools": [
    {
      "base": "172.30.0.0/16",
      "size": 24
    }
  ]
}

Restart Docker to apply configuration

Restart the Docker service to apply the new configuration settings.

sudo systemctl restart docker
sudo systemctl status docker

Set up development workflow

Create development helper scripts

Create convenient scripts for common development tasks.

#!/bin/bash
echo "Starting development environment..."
docker compose up -d
echo "Development stack is running!"
echo "Web: http://localhost:8080"
echo "Database: localhost:5432"
echo "Redis: localhost:6379"
chmod +x ~/docker-projects/dev-start.sh

Create cleanup script

Create a script to cleanly stop and remove development containers.

#!/bin/bash
echo "Stopping development environment..."
docker compose down
echo "Cleaning up unused containers and images..."
docker system prune -f
echo "Development environment stopped and cleaned."
chmod +x ~/docker-projects/dev-stop.sh

Create database backup script

Create a script to backup your development database.

#!/bin/bash
BACKUP_DIR="./backups"
BACKUP_FILE="devdb-$(date +%Y%m%d-%H%M%S).sql"

mkdir -p $BACKUP_DIR
echo "Creating database backup..."
docker compose exec -T db pg_dump -U developer devdb > "$BACKUP_DIR/$BACKUP_FILE"
echo "Backup created: $BACKUP_DIR/$BACKUP_FILE"
chmod +x ~/docker-projects/backup-db.sh

Set up development aliases

Add convenient aliases to your shell configuration for common Docker commands.

# Docker development aliases
alias dcu='docker compose up -d'
alias dcd='docker compose down'
alias dcl='docker compose logs -f'
alias dce='docker compose exec'
alias dcp='docker compose ps'
alias dcr='docker compose restart'

Docker cleanup aliases

alias docker-clean='docker system prune -af' alias docker-clean-volumes='docker volume prune -f' alias docker-clean-all='docker system prune -af --volumes'
source ~/.bashrc

Verify your setup

Test that Docker and Docker Compose are working correctly with your development stack.

# Check Docker installation
docker --version
docker compose version

Test Docker without sudo

docker run --rm hello-world

Start your development stack

cd ~/docker-projects ./dev-start.sh

Check running containers

docker compose ps

Test web server

curl http://localhost:8080

Test database connection

docker compose exec db psql -U developer -d devdb -c "SELECT version();"

Check logs

docker compose logs web

Common issues

SymptomCauseFix
Permission denied when running docker commands User not in docker group or group changes not applied newgrp docker or log out and back in
Cannot connect to the Docker daemon Docker service not running sudo systemctl start docker
Port already in use errors Another service using the same port Change ports in docker-compose.yml or stop conflicting service
Container startup failures Resource constraints or image pull failures Check logs with docker compose logs [service]
Volume mount permission errors Incorrect file ownership or permissions sudo chown -R $USER:$USER ./web and ensure correct permissions

Next steps

Running this in production?

Want this handled for you? This works great for local development. When you run multiple environments or need containers available 24/7, keeping them healthy, monitored, and secure is a different job. See how we run infrastructure like this for European teams.

Automated install script

Run this to automate the entire setup

Need help?

Don't want to manage this yourself?

We handle managed devops services for businesses that depend on uptime. From initial setup to ongoing operations.