Docker para Ruby on Rails em um ambiente de desenvolvimento local
Mikhail Tereschenko
2 de novembro de 2022
0 minutos de leituraOlá, pessoal que desenvolve com Ruby! Se você está procurando uma maneira eficaz de configurar o Docker para Ruby on Rails no seu ambiente de desenvolvimento local, este post é para você. Ele dá continuidade ao nosso artigo anterior sobre como instalar Ruby no macOS para desenvolvimento local.
Quem desenvolve com Ruby frequentemente precisa considerar um banco de dados ao criar um projeto Ruby on Rails, além de outros pré-requisitos do ambiente de desenvolvimento. Mas garantir que tudo isso esteja instalado no sistema operacional da máquina host — e com as versões exatas exigidas — pode ser um desafio.
Sempre que tentava criar um projeto novo, sentia falta de um botão que preparasse um ambiente novo e limpo para ele. Então, decidi criar uma configuração baseada em Docker que pode ser iniciada e interrompida facilmente com o docker-compose.yml do Docker.
O que é o Docker Compose?
O Docker Compose é uma ferramenta de Infraestrutura como Código (IaC) que permite configurar e conectar aplicativos e serviços, como proxies, bancos de dados e montagem de volumes, para provisioná-los de forma reutilizável. Ele é instalado como parte do pacote de software do Docker e definido usando YAML.
Esta configuração do Docker Compose para um ambiente de desenvolvimento local pode ser usada em diferentes tipos de projeto, não apenas em projetos Ruby on Rails. Ela também pode ser usada em projetos paralelos ou projetos de front-end do lado do cliente. Estas são as principais razões pelas quais prefiro usar ambientes Docker em vez de alterar o sistema operacional da minha máquina host:
fácil de configurar
fácil de separar a lógica do ambiente
fácil de usar o mesmo ambiente em diferentes projetos
fácil de compartilhar o ambiente com quem precisar de ajuda, sem expor código confidencial
a máquina host permanece limpa
Uma configuração de Docker para Ruby on Rails
Para configurar um ambiente Docker para Ruby on Rails para desenvolvimento local, você precisará de:
Um sistema operacional semelhante ao Unix (uso o macOS, mas você pode usar Ubuntu ou qualquer outra distribuição Linux. O Windows também deve funcionar)
make (3.81 ou posterior)
Docker (19.03.12 ou posterior)
docker-compose (1.26.0 ou posterior)
Seu editor de texto preferido (no meu caso, o Visual Studio Code)
Com tudo isso em mãos, você já pode começar. Se não quiser ler, aqui está o repositório de código aberto com todas as instruções necessárias e o código-fonte completo de todos os trechos que vamos analisar. Mas, como você já está aqui, basta acompanhar este artigo para seguir o passo a passo.
Para começar, vou criar um projeto Ruby on Rails chamado foo_bar_project, para simplificar.
1) Obtenha a configuração do ambiente do Docker Compose e remova o repositório Git. Se quiser manter tudo rastreado em um repositório de código-fonte Git, você poderá criar o seu próprio mais tarde.
As próximas etapas devem ser executadas no diretório ./environment. Portanto, vamos garantir que os comandos sejam executados dentro dele:
2) Agora, você precisa definir um nome de projeto para esta configuração de ambiente. Por padrão, o nome é test_project. Neste exemplo de código, precisamos alterá-lo para foo_bar_project, como mencionado anteriormente. Para isso, edite o arquivo ./environment/.env.example e atualize a variável PROJECT_NAME. É importante usar valores em Snake Case, com letras minúsculas:
3) Agora você já pode criar seu projeto executando o seguinte comando:
Como você pode ver, agora há uma nova pasta chamada application, com o código do Ruby on Rails dentro dela.
4) Agora você precisa criar seu ambiente de desenvolvimento local com o Docker Compose. Esta etapa é obrigatória sempre que houver alterações no Dockerfile ou no Gemfile do seu aplicativo.
5) Agora você pode iniciar o ambiente de desenvolvimento local do Ruby da seguinte forma:
Observe que isso ainda não inicia um aplicativo Ruby on Rails. Para isso, precisamos abrir um shell no ambiente Docker e instruí-lo a iniciar o processo rails. Veja como:
Docker para Ruby on Rails em um ambiente de desenvolvimento local. Por fim, se você abrir o navegador e acessar este URL, http://foo_bar_project.localhost/, deverá ver o projeto Ruby on Rails que acabamos de criar.
Então, o que temos disponível agora?
Temos um projeto com um diretório de ambiente que contém tudo o que precisamos para executá-lo e um diretório de aplicativo com o código da aplicação. Esse diretório é mapeado para o contêiner Docker, dando a você acesso total a partir da imagem Docker do Ruby.
Temos acesso rápido ao shell do Ruby, sem precisar instalar localmente um ambiente Ruby com Rails, Rake, Bundler ou qualquer outra ferramenta do ecossistema Ruby.
Os comandos podem ser executados depois do comando
make shell.Esta configuração do projeto com Docker Compose tem dois estágios predefinidos. Assim, se você precisar implantar seu aplicativo Ruby em algum lugar, poderá criar seu próprio estágio. É simples assim!
Se você quiser entender como funciona o ambiente Docker para Ruby on Rails descrito acima, vamos detalhar a imagem Docker do Ruby, o Makefile e a definição do Docker Compose que faz tudo funcionar em conjunto.
Uma imagem Docker do Ruby
Para começar, a imagem Docker do Ruby é essencial. Criá-la corretamente também é importante para garantir o reaproveitamento eficiente do cache das camadas da imagem Docker e considerar outros aspectos de um ambiente de desenvolvimento local.
Veja a seguir o Dockerfile da imagem Docker do Ruby:
Como você pode ver, ele parte de algumas suposições sobre configurações complementares necessárias para ter um ambiente funcional de aplicativo Ruby on Rails, como:
arquivo
database.yml, com os dados de conexão do Ruby on Rails com o banco de dadosdevelopment.rb, para a configuração do Ruby on Rails em tempo de execução no ambiente de desenvolvimento
Isso é feito usando o script runners.sh no diretório ./environment/containers/ruby/initializers:
Este Dockerfile também usa builds Docker em múltiplas etapas, permitindo reutilizar partes específicas com eficiência em diferentes ambientes, caso você queira usar a mesma configuração em vários fluxos de trabalho, como testes e homologação.
Docker Compose para Rails
O arquivo Docker Compose em `./environment/docker-compose.development.yml` conecta todos os serviços para que um aplicativo Ruby on Rails funcione no Docker:
Um servidor HTTP nginx
Um aplicativo Ruby
Um servidor de banco de dados PostgreSQL
Veja a seguir o arquivo Docker Compose para Rails usado nesta configuração:
Makefile para Docker
Por fim, para criar uma interface acessível que facilite a interação de quem desenvolve com este ambiente de desenvolvimento local em Ruby, usamos um Makefile:
Executando aplicativos Ruby com eficiência
Esperamos que agora você tenha aprendido a executar aplicativos Ruby, como Ruby on Rails, no seu ambiente local usando uma configuração de contêineres Docker. Outra maneira de executar aplicativos Ruby localmente é usar ambientes virtuais de Ruby, tema que abordamos anteriormente no post sobre como instalar Ruby no macOS.
Agora que seu ambiente de desenvolvimento Ruby está pronto, talvez você também queira aprender a proteger seus aplicativos Ruby. Confira os artigos a seguir para saber mais sobre segurança em Ruby:
Segurança de contêineres que prioriza os desenvolvedores
O Snyk encontra e corrige automaticamente vulnerabilidades em imagens de contêiner e workloads do Kubernetes.



