Skip to content

Instantly share code, notes, and snippets.

@americodls
Last active May 20, 2019 01:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save americodls/80c9e8ae9ccce6da070d56e3b454183a to your computer and use it in GitHub Desktop.
Save americodls/80c9e8ae9ccce6da070d56e3b454183a to your computer and use it in GitHub Desktop.
Docker & Docker Compose para aplicações rails

Desenvolvimento

Para o ambiente de desenvolvimento é utilizado o docker e o docker-compose.

Toda configuração e dependências estão listadas no Dockerfile

Build

Para fazer o build das imagens é necessário que a env var UID esteja disponível, então coloque em seu arquivo de incialização, como o .bashrc por exemplo, o seguinte comando:

export UID

Serviços

Para rodar os serviços utilize o comando abaixo:

docker-compose up -d

Este comando inicia os serviços: web, job, db sftp e redis.

A opção -d faz com que os serviços sejam executados em segundo plano.

Você pode conectar no tty de um dos serviços com o commando:

docker attach <container_id>

Para sair do attach Ctrl+p, Ctrl+q.

Configuração

Com o serviços rodando execute:

docker-compose run --rm web bin/setup

Suíte de testes e controle de qualidade

docker-compose run --rm web rails ci:all
version: '3.5'
x-default: &default
env_file: .env
volumes:
- ".:$HOME/app"
stdin_open: true
tty: true
depends_on:
- db
- redis
services:
web:
<<: *default
command: "rails server --pid /tmp/rails_server.pid"
build:
context: .
args:
user: ${USER}
uid: ${UID}
ports:
- 3000:3000
job:
<<: *default
image: app_web:latest
command: "bundle exec sidekiq"
db:
env_file: .env
image: postgres:9.6-alpine
volumes:
- db-data:/var/lib/postgresql/data
redis:
image: redis:4.0.10-alpine
sftp:
image: atmoz/sftp
volumes:
- ./sftp:/sftp
ports:
- "2222:22"
command: sftp:pass
volumes:
db-data:
FROM ruby:2.5.1
ARG user
ARG uid
RUN test -n "$user"
RUN test -n "$uid"
ENV BUILD_DEPS="build-essential"
ENV RAILS_GEM_DEPS="tzdata less postgresql-client"
ENV UGLIFIER_GEM_DEPS="nodejs"
ENV DOCKER_DEPS="wait-for-it"
ENV LC_ALL C.UTF-8
RUN apt-get update && apt-get install -y \
$BUILD_DEPS \
$RAILS_GEM_DEPS \
$UGLIFIER_GEM_DEPS \
$DOCKER_DEPS \
&& rm -rf /var/lib/apt/lists/*
RUN adduser --gecos "$user" --uid "$uid" --disabled-login "$user"
WORKDIR "/home/$user/app"
USER "$user"
ADD Gemfile .
ADD Gemfile.lock .
RUN bundle install --clean --jobs=$(nproc)
ENTRYPOINT ["wait-for-it", "db:5432", "--"]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment