capistrano-deploy_into_docker

Mini support task file to deploy app into docker.

Installation

Add in your Gemfile

gem 'capistrano-deploy_into_docker'

HowTo: deploy your rails application into docker

add sshkit supports docker backend

Currently docker backend is not merged yet into upsatrem. You need to fetch gem from my github repository.

Add this line to Gemfile:

gem 'sshkit', github: 'sugi/sshkit', branch: 'docker-backend', group: :development

When upstream merges docker backend, you do NOT need this.

require task on Capfile

Add following like to your Capfile;

require 'capistrano/deploy_into_docker'

This just add deploy_into_docker:commit task.

deploy setting

Here is an example for config/deploy/docker.rb;

set :stage, :production
set :branch, 'production'
set :deploy_to, '/var/local/app'
set :git_shallow_clone, 1
fetch(:default_env).merge!(rails_env: :production, SECRET_KEY_BASE: 'dummy', DEVISE_SECRET_KEY: 'dummy')

fetch(:linked_dirs, []).clear
fetch(:linked_files, []).clear

server docker: {
    image: 'sugi/rails-base',
    commit: 'myapp-web',
  }, user: 'rails:rails', roles: %w{web app}

Server definition as Docker host

You need to set docker environment as host infomation hash. The hash requires :image (or :container) key to run.

server docker: {image: 'sugi/rails-base:latest'}

If you set :commit key, run "docker commit" after deploy automatically.

server docker: {
    image: 'sugi/rails-base:latest',
    commit: 'new-image-name:tag',
  }, user: 'nobody:nogroup', roles: %w{web app}

In addtion, you can add any options for "docker run". for example;

server docker: {
    image: 'sugi/rails-base:latest',
    commit: 'new-image-name:tag',
    volume: ['/storage/tmp:/tmp', '/storage/home:/home'],
    network: 'my-net',
    dns: '8.8.8.8',
    dns_search: 'example.com',
    cap_add: ['SYS_NICE', 'SYS_RESOURCE'],
  }, user: 'nobody:nogroup', roles: %w{web app}

License

Author: Tatsuki Sugiura

Files are distributed under MIT License.