How to set up a Rails development environment with Docker

Getting a Rails application’s codebase running shouldn’t be difficult. Yet developers spend hours troubleshooting environment issues. Docker solves this.

Why Docker for Development?

  • Consistent environments - Works the same on every machine
  • Easy onboarding - New devs run one command
  • Isolated dependencies - No conflicts with other projects
  • Production parity - Develop in an environment similar to production

Basic Setup

Create a Dockerfile:

FROM ruby:3.2

RUN apt-get update -qq && apt-get install -y nodejs postgresql-client

WORKDIR /app

COPY Gemfile Gemfile.lock ./
RUN bundle install

COPY . .

CMD ["rails", "server", "-b", "0.0.0.0"]

Create a docker-compose.yml:

version: '3.8'

services:
  db:
    image: postgres:15
    environment:
      POSTGRES_PASSWORD: password
    volumes:
      - postgres_data:/var/lib/postgresql/data

  web:
    build: .
    command: bash -c "rm -f tmp/pids/server.pid && rails server -b 0.0.0.0"
    volumes:
      - .:/app
    ports:
      - "3000:3000"
    depends_on:
      - db
    environment:
      DATABASE_URL: postgres://postgres:password@db/app_development

volumes:
  postgres_data:

Running Your App

docker compose build
docker compose up

Visit http://localhost:3000 and you’re ready to develop.

Tips

  • Use volume mounts for live code reloading
  • Add Redis, Sidekiq as needed
  • Create a bin/docker-dev script for common commands

Docker removes the “it works on my machine” problem and lets your team focus on building features.