giorgiosaints
1/4/2018 - 3:02 PM

Dominando o Docker

Dominando o Docker

Introdução

O Docker é um plataforma (aberta) que permite que você crie, rode e faça deploy de containers. De maneira simples, um container é o empacotamento da sua aplicação mais as dependências dela.

Por exemplo, se você quiser utilizar um Container que possua todas as dependências do Ruby On Rails já instalados sem que você instale essas dependências diretamente na sua máquina, você pode fazer isso com poucos comandos de maneira completamente isolada do seu sistema. Você também pode criar suas próprias imagens personalizadas para gerar seus containers e depois distribuí-las para os outros programadores da sua equipe poderem trabalhar em um ambiente idêntico ao seu, ou seja, em poucos minutos a máquina de qualquer desenvolvedor novo da sua equipe vai estar preparada pra ele começar a trabalhar.

Porque Docker?

A primeira resposta que vem a minha mente é simples, porque você merece ser feliz. Seu tempo é valioso e você não vai querer gastar ainda mais horas do que já gastou na vida configurando máquinas iguais sempre que muda de ambiente de desenvolvimento ou servidor. O Docker vai te ajudar a automatizar e ainda mais, a melhorar todo esse processo e evitar o velho e bom “Na minha máquina estava funcionando, não sei o que houve”.

O que é e o que não é Docker?

Docker é uma ferramenta que serve para você criar rodar e fazer deploy de containers. Containers são conjuntos onde você empacota a sua aplicação e as suas dependências.

A diferença entre o docker e uma máquina virtual:

Porque utilizar?

  • Sempre roda no mesmo ambiente
  • Isola os projetos
  • Acelera o tempo de desenvolvimento (Você instala um novo ambiente em minutos)
  • Reaproveitamento de trabalho

O que é o Docker Compose?

Arquivo responsável por subir todos os containers e eles vão conversar entre si.

Criando um container com Ubuntu

Nesta parte do Screencast nós criamos um container com o Ubuntu dentro onde nós tivemos acesso ao terminal dele, é um bom exemplo para você começar a entender como os ambientes são isolados.

Dependências:

  • Docker
  • Docker Compose
  • Ruby On Rails
  • PostgreSQL

Links:

Para gerar o seu container através da imagem padrão do ubuntu, rode:

  docker run -t -i ubuntu /bin/bash
  • run: Gera um container e roda um comando dentro
  • -t:
  • -i:
  • ubuntu: Nome da imagem que nós vamos usar
  • /bin/bash: Mostrar o shell do ubuntu assim que ele executar

Para verificar que o container esta no ar, em outro console rode docker ps

Agora que seu container está parado, você pode rodar o seguinte comando para listá-lo (junto com todos os outros parados) docker ps -a

Para parar o seu container, pegue o Id do seu container que apareceu depois do comando anterior e rode o seguinte comando

  docker stop id_do_seu_container

Para que seu container parado volte a rodar, pegue novamente o id dele e rode o seguinte comando:

  docker start id_do_seu_container

Para que você possa voltar a ver o bash do seu container ou rodar outro comando, pegue novamente o id e rode:

  docker exec -it id_do_seu_container bash

Agora para finalizar para novamente seu container rodando:

  docker stop id_do_seu_container

E apague ele (se você não for usar seu container é uma boa prática que você apague ele para liberar memória), rode:

  docker rm id_do_seu_container

Criando e subindo um Projeto Rails via Docker

Aqui vimos no Screencast como criar um projeto Rails sem ter o rails instalado na nossa máquina (usando um container que possui o Rails), como criar um Dockerfile para gerar uma imagem personalizada e como subir nosso serviço Rails via Container.

Crie seu projeto Rails rodando:

  docker run -it --rm --user "$(id -u):$(id -g)" -v "$PWD":/usr/src/app -w /usr/src/app rails rails new --skip-bundle my_awesome_app

Agora entre no diretório via console e crie um file nomeado Dockerfile e substitua o conteúdo dele por:

FROM ruby:2.5
 
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
 
RUN apt-get update && apt-get install -y nodejs --no-install-recommends && rm -rf /var/lib/apt/lists/*
RUN apt-get update && apt-get install -y sqlite3 --no-install-recommends && rm -rf /var/lib/apt/lists/*
 
COPY Gemfile /usr/src/app/
 
RUN bundle install
 
COPY . /usr/src/app
 
EXPOSE 3000
CMD puma -C config/puma.rb