Escrito por Hemershon Silva
Como dockerizar sua aplicação
Esse tutorial é para ajudar quem tem dificuldade em montar seu ambiente rails no docker, aqui vou abordar técnicas de como usar o docker e docker-compose que ambos trabalham em plena harmonia.
Resumo sobre o docker
Docker é um software contêiner da empresa Docker, Inc, que fornece uma camada de abstração e automação para virtualização de sistema operacional no Windows, Macos e Linux.
Requisitos:
Docker instalado na sua maquina Instalação do docker
Definindo um projeto
Comece configurando os arquivos necessários para construir o aplicativo que será executado dentro de um contêiner do Docker suas dependências.
Os arquivos são:
Dockerfile
docker-compose.yml
Gemfile
Gemfile.lock
Primeiro passo vamos criar o arquivo Dockerfile
FROM ruby:3.0.0
RUN apt-get update -qq && apt-get install -y nodejs postgresql-client
RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \
echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \
apt-get update -qq && apt-get install -y nodejs postgresql-client vim && \
apt-get install -y yarn && \
apt-get install -y imagemagick && \
apt-get install -y libvips-tools && \
apt-get install -y locales
# Instala nossas dependencias
RUN apt-get update && apt-get install -qq -y --no-install-recommends \
nodejs yarn build-essential libpq-dev imagemagick git-all nano
WORKDIR /seuapp
COPY Gemfile /seuapp/Gemfile
COPY Gemfile.lock /seuapp/Gemfile.lock
RUN bundle update mimemagic
RUN bundle install
COPY . /seuapp
Isso colocará o código do seu aplicativo dentro de uma imagem que constrói um contêiner com Ruby, bundler e todas as suas dependências dentro dele.
agora vamos criar o Gemfile
source 'https://rubygems.org'
gem 'rails', '~>6'
como todo projeto rails precisamos também do Gemfile.lock
touch Gemfile.lock
Docker-compose
version : " 3.9"
services :
db :
image : postgres
volumes :
- ./tmp/db:/var/lib/postgresql/data
environment :
POSTGRES_PASSWORD : password
web :
build : .
command : bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
volumes :
- .:/seuapp
ports :
- " 3000:3000"
depends_on :
- db
Agora vamos montar o projeto
docker-compose run --no-deps web rails new . --force --database = postgresql
Primeiro, o Compose cria a imagem para o webserviço usando o Dockerfile. O –no-deps diz ao Compose para não iniciar os serviços vinculados. Em seguida, ele é executado rails newdentro de um novo contêiner, usando essa imagem. Uma vez feito isso, você deve ter gerado um novo aplicativo.
Você irá precisar de uma permissão para manipular os arquivos
sudo chown -R $USER :$USER .
Agora você está com a estrutura montada com todos os arquivos do rails, agora precisamos reconstruir a estrutura para usamos com o docker.
docker-compose build
Configurações de Banco de dados
default : &default
adapter : postgresql
encoding : unicode
host : db
username : postgres
password : password
pool : 5
development :
<< : *default
database : myapp_development
test :
<< : *default
database : myapp_test
Agora você pode inicializar o aplicativo com
docker-compose up
se estiver tudo ok, essa é a mensagem que vai aparecer no terminal
rails_db_1 is up-to-date
Creating rails_web_1 ... done
Attaching to rails_db_1, rails_web_1
db_1 | PostgreSQL init process complete ; ready for start up.
db_1 |
db_1 | 2018-03-21 20:18:37.437 UTC [ 1] LOG: listening on IPv4 address "0.0.0.0" , port 5432
db_1 | 2018-03-21 20:18:37.437 UTC [ 1] LOG: listening on IPv6 address "::" , port 5432
db_1 | 2018-03-21 20:18:37.443 UTC [ 1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
db_1 | 2018-03-21 20:18:37.726 UTC [ 55] LOG: database system was shut down at 2018-03-21 20:18:37 UTC
db_1 | 2018-03-21 20:18:37.772 UTC [ 1] LOG: database system is ready to accept connections
Agora vamos criar o banco de dados
docker-compose run web rake db:create
mensagem que vai aparecer
Starting rails_db_1... done
Created database 'seuapp_development'
Created database 'seuapp_test'
depois vá para o navegador e digite
localhost:3000
Referência estão nos links
O que é Docker
Docker
Docker-compose
Gemfile
Dockerfile