Bye heroku
Hello Docker
Heroku
- Simple
- Easy
- Many extensions
- Quite expensive
- Has constraints
- Extensions are dependecies
- SSL is 20$/mo
Docker
- Uses LXC, runC, AuFS
- Encapsulated containers
Docker Compose
- Handles multiple containers management
- Gives a build system
- Hot swapping built containers
Docker Machine
- Docker is based on Linux kernel
- Requires Virtualbox on Mac/Windows
- Wizard installer
Dockerfile
- Contains the build instructions of a container
- Well documented
- Placed in project's root (like Gemfile, Vagrantfile etc)
FROM ruby:2.2.2
Dockerfile
FROM ruby:2.2.2
# deps
RUN apt-get update -qq && apt-get install -y build-essential nodejs npm nodejs-legacy mysql-client vim
Dockerfile
FROM ruby:2.2.2
# deps
RUN apt-get update -qq && apt-get install -y build-essential nodejs npm nodejs-legacy mysql-client vim
RUN mkdir /lunchiatto
Dockerfile
FROM ruby:2.2.2
# deps
RUN apt-get update -qq && apt-get install -y build-essential nodejs npm nodejs-legacy mysql-client vim
RUN mkdir /lunchiatto
WORKDIR /tmp
COPY Gemfile Gemfile
COPY Gemfile.lock Gemfile.lock
RUN bundle install --without development test
Dockerfile
FROM ruby:2.2.2
# deps
RUN apt-get update -qq && apt-get install -y build-essential nodejs npm nodejs-legacy mysql-client vim
RUN mkdir /lunchiatto
WORKDIR /tmp
COPY Gemfile Gemfile
COPY Gemfile.lock Gemfile.lock
RUN bundle install --without development test
ADD . /lunchiatto
Dockerfile
FROM ruby:2.2.2
# deps
RUN apt-get update -qq && apt-get install -y build-essential nodejs npm nodejs-legacy mysql-client vim
RUN mkdir /lunchiatto
WORKDIR /tmp
COPY Gemfile Gemfile
COPY Gemfile.lock Gemfile.lock
RUN bundle install --without development test
ADD . /lunchiatto
WORKDIR /lunchiatto
RUN npm install -g bower
RUN bower install --allow-root
Dockerfile
FROM ruby:2.2.2
# deps
RUN apt-get update -qq && apt-get install -y build-essential nodejs npm nodejs-legacy mysql-client vim
RUN mkdir /lunchiatto
WORKDIR /tmp
COPY Gemfile Gemfile
COPY Gemfile.lock Gemfile.lock
RUN bundle install --without development test
ADD . /lunchiatto
WORKDIR /lunchiatto
RUN npm install -g bower
RUN bower install --allow-root
RUN bundle exec rake assets:clobber
RUN bundle exec rake assets:precompile --trace
Dockerfile
docker-compose.yml
- Maintains multiple container environment
- Placed in project's root (like Gemfile, Vagrantfile etc)
- docker-compose ships with docker by default
db:
image: postgres:9.4.1
ports:
- "5432:5432"
docker-compose.yml
db:
image: postgres:9.4.1
ports:
- "5432:5432"
web:
build: .
docker-compose.yml
db:
image: postgres:9.4.1
ports:
- "5432:5432"
web:
build: .
command: bundle exec puma -C config/puma.rb
docker-compose.yml
db:
image: postgres:9.4.1
ports:
- "5432:5432"
web:
build: .
command: bundle exec puma -C config/puma.rb
ports:
- "3000:3000"
links:
- db
env_file: .prod-env
docker-compose.yml
LANG=en_US.UTF-8
NEW_RELIC_APP_NAME=
NEW_RELIC_LICENSE_KEY=
NEW_RELIC_LOG=
RACK_ENV=production
RAILS_ENV=production
AIRBRAKE_API_KEY=
SECRET_KEY_BASE=
SENDGRID_PASSWORD=
SENDGRID_USERNAME=
.prod-env
workers Integer(ENV['WEB_CONCURRENCY'] || 3)
threads_count = Integer(ENV['MAX_THREADS'] || 1)
threads threads_count, threads_count
preload_app!
rackup DefaultRackup
port ENV['PORT'] || 3000
environment ENV['RACK_ENV'] || 'development'
on_worker_boot do
ActiveRecord::Base.establish_connection
end
config/puma.rb
Starting it all up
Bye Heroku Hello Docker
By Bartek Kruszczyński
Bye Heroku Hello Docker
- 1,276