Rajeev Kannav Sharma

Posts About

Dockerization a rails application with docker-compose

02 Dec 2016

Docker-compose

Compose is a tool for defining and running multi-container Docker applications.

use Docker Compose to set up and run a Rails app

Define the project

Create a Dockerfile for Rails app

FROM ruby:2.3.3
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
RUN mkdir /myapp
WORKDIR /myapp
ADD Gemfile /myapp/Gemfile
ADD Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
ADD . /myapp

Create a Gemfile

source 'https://rubygems.org'
gem 'rails', '5.0.0.1'

Create a Gemfile.lock

touch Gemfile.lock

Create docker-compose.yml

version: '2'
services:
  db:
    image: mysql
  web:
    build: .
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    volumes:
      - .:/myapp
    ports:
      - "3000:3000"
    depends_on:
      - db
Build the project
docker-compose build

Connect the database Replace the contents of config/database.yml with the following:

development: &default
  adapter: mysql2
  encoding: unicode
  database: myapp_development
  pool: 5
  username: mysql_user_name
  password: mysql_password
  host: db

test:
  <<: *default
  database: myapp_test
Boot Application
docker-compose up

if you’re done everthing correctly, You must have seen something like following on terminal

myapp_web_1 | [2014-01-17 17:16:29] INFO  WEBrick 1.3.1
myapp_web_1 | [2014-01-17 17:16:29] INFO  ruby 2.2.0 (2014-12-25) [x86_64-linux-gnu]
myapp_web_1 | [2014-01-17 17:16:29] INFO  WEBrick::HTTPServer#start: pid=1 port=3000
Setup DataBase
docker-compose run web rake db:create
Get Set go

VISIT http://localhost:3000/

General Error(s)
A server is already running. Check /myapp/tmp/pids/server.pid. 
delete the file tmp/pids/server.pid to fix this
And if you get stuck… Ask Here

email me rajeevsharma86@gmail.com

Tweet to me at @rajeevkannav.