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 vamos Aprender?
  1. Como gerenciar nossos containers usando o Docker (3 exemplos)
  2. Como dockerizar um Projeto Rails usando Docker-Compose

Também vamos ver uma lista com os comandos mais usados do Docker e do Docker Compose para facilitar sua vida 🙂

Links falados no Screencast:
  1. Como instalar o Docker: https://docs.docker.com/engine/installation/
  2. Como instalar o Docker Compose https://docs.docker.com/compose/
  3. Docker Hub https://hub.docker.com/
  4. Documentação do Docker https://docs.docker.com/
Ingredientes:
  1. Docker
  2. Docker Compose
  3. Ruby On Rails
  4. PostgreSQL
PARTE 1 – Criando um container com o 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.

 

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

    docker rails
  2. Para verificar que o container esta no ar, em outro console rode:
  3. Para parar o seu container, pegue o Id do seu container que apareceu depois do comando anterior e rode o seguinte comando:
  4. Agora que seu container está parado, você pode rodar o seguinte comando para listá-lo (junto com todos os outros parados):
  5. Para que seu container parado volte a rodar, pegue novamente o id dele e rode o seguinte comando:
  6. Para que você possa voltar a ver o bash do seu container ou rodar outro comando, pegue novamente o id e rode:
  7. Agora para finalizar para novamente seu container rodando:
  8. E apague ele (se você não for usar seu container é uma boa prática que você apague ele para liberar memória), rode:

 

PARTE 2 – 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.

  1. Crie seu projeto Rails rodando:
  2. Agora entre no diretório via console e crie um file chama “Dockerfile” e substitua o conteúdo dele por:
  3. Agora que criamos nosso Dockerfile podemos fazer o Build da nossa imagem (Construir nossa imagem personalizada), dentro da pasta do seu projeto rode:
  4. Depois disso podemos pegar a imagem que geramos e criar nosso container para subir nossa aplicação, no seu console rode:

    *Mais detalhes sobre os comandos no Screencast
  5. Pronto \o/, agora acesse no seu Browser http://localhost:3000
    Usando Docker

 

PARTE 3 – Criando e subindo um Projeto Rails via Docker + PostgreSQL + Network

Novamente nesta parte nós subimos um servidor Rails, porém dessa vez vamos usar também um container com o PostgreSQL (Banco de Dados) e vamos usar um network do docker para ligar tudo isto 🙂

  1. Crie seu projeto Rails rodando:
  2. Agora entre no diretório via console e crie um file chamado “Dockerfile” e substitua o conteúdo dele por:
  3. Agora que criamos nosso Dockerfile podemos fazer o Build da nossa imagem (Construir nossa imagem personalizada), dentro da pasta do seu projeto rode:
  4. Nós precisamos criar agora uma network (uma rede interna do docker que vai conectar nossos containers para que um possa acessar o outro livremente), no seu console rode:
  5. Agora vamos subir um container com o PostgreSQL dentro, rode:
  6. Para que o nosso APP Rails se conecte ao PostgreSQL disponível nós precisamos editar o arquivo ‘/config/database.yml’, do nosso projeto, neste arquivo substitua o conteúdo por:
  7. Agora nós precisamos criar o banco de dados, rode:
  8. E subir nosso servidor:

    docker postgresql
PARTE 4 – Usando o Docker Compose para organizar nossos containers

Agora sim entramos no modo de uso do Docker que eu acho mais útil, via docker compose. O Docker Compose é uma ferramenta para orquestrar todos os nossos containers (Vai nos ajudar a subir eles juntos, vai gerar uma network e vai nos permitir gerenciar melhor nossos volumes).

  1. No mesmo projeto que trabalhamos na Parte 3 (Apenas para reaproveitar o trabalho) vamos criar um arquivo chamado “docker-compose.yml” e ele vai gerenciar nossos containers para gente. Crie o arquivo e coloque o seguinte conteúdo dentro dele:

    * Explicações sobre esse arquivo no Screencast
  2. Para fazer o Build de todos os nossos containers basta rodar (dentro do projeto):
  3. Agora como nós criamos um novo container para o PostgreSQL nós precisamos criar nosso banco de dados de novo, porém agora vamos usar os comandos do docker-compose para fazer isso de maneira fácil. No console rode:
  4. Para subir nossos containers, rode no console:

    Captura de tela de 2017-01-17 12-52-29
Comandos do Docker (Lista de comandos úteis)
  1. Gera um container e roda um comando dentro:
  2. Visualiza os containers rodando:
  3. Visualizando todos os containers:
  4. Parando um container:
  5. Parando TODOS os containers que estão rodando:
  6. Dando um start em um container parado:
  7. Apagando um container:
  8. Apagando TODOS os containers:
  9. Executando um comando dentro de um container que já está rodando:
  10. Vendo as imagens que você tem instaladas:
  11. Apagando uma imagem:
  12. Fazendo o Build das imagens usando o Docker Compose:
  13. Criando e subindo os containers via Docker Compose:
  14. Parando os containers via Docker Compose:
  15. Executando um comando dentro de um container via Docker Compose:
  16. Vendo a sua configuração do Docker Compose:
  17. Vendo os logs dos containers via Docker Compose:
  18. Matando os containers via Docker Compose:
  19. Escalando seus containers (Aumentando a quantidade de containers para o mesmo service) via Docker Compose:
  20. Parando e removendo containers usando Docker Compose:
  21. Startando os containers:

 

Se você quiser conhecer mais comandos do Docker https://onebitcode.com/what-is-pof-dating/, do Docker Compose https://onebitcode.com/online-dating-simulator/.



12 formas de vencer o bloqueio criativo e escrever textos memoráveis (e 6 dicas extras)

Não perca nenhum conteúdo

Receba nosso resumo semanal com os novos posts, cursos, talks e vagas o/



Reveja o Screencast anterior: Dominando o Atom [12 pacotes Incríveis!] e aproveite para se inscrever em nossa newsletter do lado direito do blog em “se inscreva” e receba o Resumo Semanal One Bit Code 🙂

Conclusão

Neste Screncast nós falamos sobre o Workflow do Docker e também sobre o Docker Compose, se você não viu o vídeo, apenas viu o texto, eu recomendo que você assista ao vídeo, lá tem muito mais informações 🙂

Se você ainda não se inscreveu no canal se inscreve que em breve teremos mais vídeos. E aproveita e dá um like lá nesse vídeo \o/

Se você ficou com alguma dúvida comenta aí em baixo ou me adicione no Facebook clicando aqui.

Muito Obrigado por acompanhar este Blog!
Sua presença aqui é uma honra para mim,

Abraços,
Leonardo Scorza.

 





 


Primeira vez no OneBitCode? Curtiu esse conteúdo?
O OneBitCode tem muito mais para você!


O OneBitCode traz conteúdos de qualidade, e em português, sobre programação com foco em Ruby on Rails e também JavaScript.
Além disso, aqui sempre levamos à você conteúdos valiosos sobre a carreira de programação, dicas sobre currículos, portfólios, perfil profissional, soft skills, enfim, tudo o que você precisa saber para continuar evoluindo como Programador(a)!

Fique por dentro de todos os conteúdos o/

 

Nossas redes sociais:

📹 • https://youtube.com/Onebitcode [Live todas as terças-feiras às 19h)
💻 • https://linkedin.com/company/onebitcode
🙂 • https://facebook.com/onebitcode
 📱  • https://instagram.com/one_bit_code
🐦 • https://twitter.com/onebitcode

 

Nossos cursos:

🥇 • Programador Full Stack Javascript em 8 Semanas
💎 • Curso Completo de Ruby
 ⚙  • Minicurso: API Rails 5 Completo
🐞 • Minicurso de Testes para Ruby on Rails com RSpec

 

Espero que curta nossos conteúdos e sempre que precisar de ajuda, fala com a gente!
E
stamos aqui para você 🙂

Bem-vindo à família OneBitCode o/

0 0 votes
Article Rating
Subscribe
Notify of
guest
10 Comentários
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Richard
5 anos atrás

o meu apareceu esse erro ao iniciar o app
Permission denied @ dir_s_mkdir – /usr/src/app/my_awesome_app2 (Errno::EACCES)

Luís
Luís
5 anos atrás
Reply to  Richard

provavelmente você não habilitou a permissão ao Composer, para ter acessoa a pasta, se for isto basta digitar o comando: sudo chmod +x /usr/local/bin/docker-compose

kkk
kkk
5 anos atrás
Reply to  Richard

obrigado

João Pereira
João Pereira
4 anos atrás

Ótimo material Leornado!
fiz todo tutorial no Windows 7 utilizando o Docker Toolbox. A única coisa que precisei modificar o comando:
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

retirando o parametro: –user “$(id -u):$(id -g)”
docker run -it –rm -v “$PWD”:/usr/src/app -w /usr/src/app rails rails new –skip-bundle my_awesome_app

outro detalhe foi que acessando o localhost:3000 não linkou com o container.. mas pelo IP do docker, funcionou.

Abraço!

Alexandre Ferreira
Alexandre Ferreira
4 anos atrás

Léo, esse tuto tá simplesmente demais, passo-a-passo simples de entender as funcionalidades do Docker.

Fiquei com uma pequena a dúvida na última parte com a utilização do docker-compose se não era necessário criar a network na “unha” com você havia feito na etapa 2 usando:
> docker network create my_awesome_network

Mas observei depois aqui que o docker-compose já cria uma network automaticamente entre os containers.

Marcos Souza
4 anos atrás

O comando de geração do projeto dá erro no docker pra windows… Não consigo utilizar!

cassio
cassio
3 anos atrás

Ao executar o comando:
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

Recebo o erro:
docker: Error response from daemon: create $PWD: “$PWD” includes invalid characters for a local volume name, only “[a-zA-Z0-9][a-zA-Z0-9_.-]” are allowed. If you intended to pass a host directory, use absolute path.
See ‘docker run –help’.

cassio
cassio
3 anos atrás
Reply to  cassio

Aparentemente consegui, estou com o SO windows, então executei o comando…
docker run -it –rm -v c:\Users\Kcio\DockerCompartilhado:/usr/src/app -w /usr/src/app rails rails new –skip-bundle my_awesome_app

Joao Paulo
Joao Paulo
3 anos atrás

Olá,
tive um pequeno problema ao tentar roda o Dockerfile utilizando a linha “RUN apt-get update &&amp” porém , ao remover o &&amp de todo o código consegui rodar a imagem sem problema.

Fernando
Fernando
2 anos atrás

Nesta postagem esta sendo utilizado a imagem “rails” do dockerhub (https://hub.docker.com/_/rails), porém essa imagem foi descontinuada, sendo assim teria alguma outra imagem para usar no lugar (já que a versão atual do Rails é a 6 e essa imagem está com a versão do 5 do Rails)?

Feito com s2 por OneBitCode

10
0
Would love your thoughts, please comment.x
()
x
%d blogueiros gostam disto: