Create ruby on rails app using docker
Today we will learn how to create a ruby on rails using docker and docker-compose. I was waiting to publish this tutorial from long time. This tutorial will help in creating ruby on rails app using docker from scratch.
Prerequisites
- Docker and docker-compose must be installed or use this tutorial to install docker
- I am using MacBook and i have installed docker for mac
Create application directory
Firstly create an application directory. I am using MacBook for this tutorial. I mostly use docker directory to create docker projects in my home directory.
mkdir ~/docker/docker-rails
cd ~/docker/docker-rails
Create Gemfile
Now create a Gemfile in our project directory and add the following contents in the file
vim Gemfile
source 'https://rubygems.org'
gem 'rails', '4.2.0'
Create empty Gemfile.lock
Now create a empty Gemfile.lock in the project directory using touch file.
touch Gemfile.lock
Create Dockerfile
Now we will create a file named Dockerfile in the project directory in order to build docker image. Create a file and add this:
vim Dockerfile
FROM ruby:2.2.0
MAINTAINER Chetan Kapoor (chetan@installvirtual.com)
RUN apt-get update -qq
RUN apt-get install -y build-essential libpq-dev
RUN mkdir /app
WORKDIR /app
ADD Gemfile /app/Gemfile
ADD Gemfile.lock /app/Gemfile.lock
RUN bundle install
ADD . /app
Create docker-compose.yml file
Now we will create the docker-compose.yml file. Create a file and add this in the file:
vim docker-compose.yml
postgres:
image: postgres
web:
build: .
command: bundle exec rails s -p 3000 -b '0.0.0.0'
volumes:
- .:/app
ports:
- "3000:3000"
links:
- postgres
Create the rails app
Now we will create the rails app using docker-compose. Execute the following command to create rails app:
docker-compose run web rails new . --skip-bundle --database=postgresql
The docker-compose run command will create a rails app in the current directory. Once the docker-compose finishes you can see rails app by executing following command:
ls -la
Build the app
Now we will build our app using docker-compose. Before open the Gemfile and uncomment the following line:
gem 'therubyracer', platforms: :ruby
Then execute the following command to build the app.
docker-compose build
Database connection
We need to change config for database connection. Open config/database.yml with your favourite editor and replace the lines with following:
development: &default
adapter: postgresql
encoding: unicode
database: postgres
pool: 5
username: postgres
password:
host: postgres
test:
<<: *default
database: web_test
Start the rails app with docker-compose
Now we can start our rails app using docker-compose. Docker-compose will spin up web and postgres container. Just execute the following command:
docker-compose up -d
View the app
Now our app is up and running, we can view the app in the browser. If you are creating app on locally then go to http://localhost:3000