Using Docker in Mac for Rails Development

Problem

Setting up a development environment for Rails on a Mac can be challenging due to dependency management and compatibility issues. Docker offers a solution by providing a consistent environment across different machines.

Solution

To use Docker for Rails development on a Mac, follow these steps:

1. Install Docker

First, you need to install Docker Desktop for Mac. You can download it from the official Docker website.

2. Create a Dockerfile

Create a Dockerfile in the root of your Rails project. This file will define the environment for your Rails application.

# Use the official Ruby image as the base image
FROM ruby:3.0.1

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

# Set the working directory
WORKDIR /myapp

# Copy the Gemfile and Gemfile.lock into the image
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock

# Install the Rails dependencies
RUN bundle install

# Copy the rest of the application code into the image
COPY . /myapp

# Precompile assets
RUN bundle exec rake assets:precompile

# Expose port 3000 to the Docker host
EXPOSE 3000

# Specify the command to run when the container starts
CMD ["rails", "server", "-b", "0.0.0.0"]
        

3. Create a docker-compose.yml File

To manage multiple services, such as a PostgreSQL database, create a docker-compose.yml file:

version: '3'
services:
  db:
    image: postgres
    environment:
      POSTGRES_PASSWORD: password
  web:
    build: .
    command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -b '0.0.0.0'"
    volumes:
      - ".:/myapp"
    ports:
      - "3000:3000"
    depends_on:
      - db
        

4. Build and Run Your Containers

Run the following command to build and start your Docker containers:

docker-compose up --build
        

This command will download the necessary images, build your Docker containers, and start the services defined in your docker-compose.yml file.

Conclusion

Using Docker for Rails development on a Mac simplifies the setup process and ensures a consistent environment. By following these steps, you can quickly set up a Dockerized Rails application, making development more efficient and less prone to environment-specific issues.