Dockerizing an existing Rails-Postgresql app with Docker compose

Written by sureshvignesh | Published 2019/01/14
Tech Story Tags: docker | rails | ruby | containerization | docker-swarm

TLDRvia the TL;DR App

A quickstart to dockerizing your existing Rails-Postgresql application with Docker compose

Dockerfiles — Define the project

Create Dockerfile in the app’s root directory, the project is defined by adding the dependencies to the Dockerfile.

FROM ruby:2.5.3

RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs

RUN mkdir /myapp

WORKDIR /myapp

COPY Gemfile /myapp/Gemfile

COPY Gemfile.lock /myapp/Gemfile.lock

RUN bundle install

COPY . /myapp

Make sure add the specific version of ruby that your application uses

Docker-compose — Build the project

Now, create docker-compose.yml file in the root directory. This file does the magic of building your app from the current directory and running the pre-built postgresql image with the web app

version: '3'services:db:image: postgresvolumes:

  • ./tmp/db:/var/lib/postgresql/dataweb:build: .command: bundle exec rails s -p 3000 -b '0.0.0.0'volumes:

  • .:/myappports:

  • "3000:3000"depends_on:

  • db

Database.yml — Configure DB

Now, Change the host to ‘db’ in your database.yml file to point to the docker service

default: &default

adapter: postgresql

encoding: unicode

host: db

username: postgres

password:

pool: 5

development:

<<: *defaultdatabase: myapp_development

The following tasks can be completed be completed by running the respective commands

Build Docker Image

docker-compose build

DB — Create and Migrate

docker-compose run web rake db:create db:migrate

Accessing Rails Console

docker-compose exec web rails console

Start application

docker-compose up

You should now be able to browse to http://localhost:3000 and see your application running.


Published by HackerNoon on 2019/01/14