
Introdução
Porque Docker?
O que vamos Aprender?
- Como gerenciar nossos containers usando o Docker (3 exemplos)
- 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:
- Como instalar o Docker: https://docs.docker.com/engine/installation/
- Como instalar o Docker Compose https://docs.docker.com/compose/
- Docker Hub https://hub.docker.com/
- Documentação do Docker https://docs.docker.com/
Ingredientes:
- Docker
- Docker Compose
- Ruby On Rails
- 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.
- Para gerar o seu container através da imagem padrão do ubuntu, rode:
1docker run -t -i ubuntu /bin/bash
- Para verificar que o container esta no ar, em outro console rode:
1docker ps - Para parar o seu container, pegue o Id do seu container que apareceu depois do comando anterior e rode o seguinte comando:
1docker stop id_do_seu_container - Agora que seu container está parado, você pode rodar o seguinte comando para listá-lo (junto com todos os outros parados):
1docker ps -a - Para que seu container parado volte a rodar, pegue novamente o id dele e rode o seguinte comando:
1docker 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:
1docker exec -it id_do_seu_container bash - Agora para finalizar para novamente seu container rodando:
1docker 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:
1docker rm id_do_seu_container
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.
- Crie seu projeto Rails rodando:
1docker 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 chama “Dockerfile” e substitua o conteúdo dele por:
12345678910111213141516FROM ruby:2.3RUN mkdir -p /usr/src/appWORKDIR /usr/src/appRUN 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 installCOPY . /usr/src/appEXPOSE 3000CMD puma -C config/puma.rb - Agora que criamos nosso Dockerfile podemos fazer o Build da nossa imagem (Construir nossa imagem personalizada), dentro da pasta do seu projeto rode:
1docker build -t my_awesome_app . - Depois disso podemos pegar a imagem que geramos e criar nosso container para subir nossa aplicação, no seu console rode:
1docker run -v "$PWD":/usr/src/app -p 3000:3000 my_awesome_app
*Mais detalhes sobre os comandos no Screencast - Pronto \o/, agora acesse no seu Browser http://localhost:3000
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 🙂
- Crie seu projeto Rails rodando:
1docker run -it --rm --user "$(id -u):$(id -g)" -v "$PWD":/usr/src/app -w /usr/src/app rails rails new --skip-bundle my_awesome_app2 - Agora entre no diretório via console e crie um file chamado “Dockerfile” e substitua o conteúdo dele por:
12345678910111213141516FROM ruby:2.3RUN mkdir -p /usr/src/appWORKDIR /usr/src/appRUN 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 postgresql-client --no-install-recommends && rm -rf /var/lib/apt/lists/*COPY Gemfile /usr/src/app/RUN bundle installCOPY . /usr/src/appEXPOSE 3000CMD puma -C config/puma.rb - Agora que criamos nosso Dockerfile podemos fazer o Build da nossa imagem (Construir nossa imagem personalizada), dentro da pasta do seu projeto rode:
1docker build -t my_custom_image_2 . - 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:
1docker network create my_awesome_network - Agora vamos subir um container com o PostgreSQL dentro, rode:
1docker run --name db -d --network=my_awesome_network postgres - 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:
12345678910default: &defaultadapter: postgresqlencoding: unicodepool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %># Apenas acrescentamos o nosso container como Hosthost: db# E colocamos o usuário default do postgreSQLuser: postgresdevelopment: - Agora nós precisamos criar o banco de dados, rode:
1docker run -v "$PWD":/usr/src/app --network=my_awesome_network my_custom_image_2 rake db:create - E subir nosso servidor:
1docker run -v "$PWD":/usr/src/app -p 3000:3000 --network=my_awesome_network my_custom_image_2
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).
- 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:
12345678910111213141516171819version: '2'services:db:image: 'postgres:9.5'volumes:- 'postgres:/var/lib/postgresql/data'website:depends_on:- 'db'build: .ports:- '3000:3000'volumes:- '.:/usr/src/app'volumes:postgres:
* Explicações sobre esse arquivo no Screencast - Para fazer o Build de todos os nossos containers basta rodar (dentro do projeto):
1docker-compose build - 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:
1docker-compose run website rake db:create - Para subir nossos containers, rode no console:
1docker-compose up
Comandos do Docker (Lista de comandos úteis)
- Gera um container e roda um comando dentro:
1docker run [OPTIONS] IMAGE [COMMAND] [ARG...] - Visualiza os containers rodando:
1docker ps - Visualizando todos os containers:
1docker ps -a - Parando um container:
1docker stop id_do_container - Parando TODOS os containers que estão rodando:
1docker stop $(docker ps -a -q) - Dando um start em um container parado:
1docker start id_do_container - Apagando um container:
1docker rm id_do_container - Apagando TODOS os containers:
1docker rm $(docker ps -a -q) - Executando um comando dentro de um container que já está rodando:
1docker exec [OPTIONS] CONTAINER COMMAND [ARG...] - Vendo as imagens que você tem instaladas:
1docker images - Apagando uma imagem:
1docker rm id_do_container - Fazendo o Build das imagens usando o Docker Compose:
1docker-compose build - Criando e subindo os containers via Docker Compose:
1docker-compose up - Parando os containers via Docker Compose:
1docker-compose stop - Executando um comando dentro de um container via Docker Compose:
1docker-compose run namo_do_service comando - Vendo a sua configuração do Docker Compose:
1docker-compose config - Vendo os logs dos containers via Docker Compose:
1docker-compose logs - Matando os containers via Docker Compose:
1docker-compose kill - Escalando seus containers (Aumentando a quantidade de containers para o mesmo service) via Docker Compose:
1docker-compose scale [SERVICE=NUM...] - Parando e removendo containers usando Docker Compose:
1docker-compose down - Startando os containers:
1docker-compose start
Se você quiser conhecer mais comandos do Docker https://onebitcode.com/what-is-pof-dating/, do Docker Compose https://onebitcode.com/online-dating-simulator/.

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.
Quer se tornar um Programador Full Stack Javascript em 8 semanas? 😀
Nós desenvolvemos um treinamento completo onde você vai aprender desde a base da Web (HTML5, CSS, Bulma,
Javascript e Es6+) até React e ExpressJs totalmente do zero!
Nele você também vai desenvolver um projeto do inicio até o Deploy (clone do Evernote) e irá
aprender como conseguir as melhores vagas no módulo carreira de Programador.
Se você não quer mais perder oportunidades, clique aqui e saiba mais 💪
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!
Estamos aqui para você 🙂
Bem-vindo à família OneBitCode o/
o meu apareceu esse erro ao iniciar o app
Permission denied @ dir_s_mkdir – /usr/src/app/my_awesome_app2 (Errno::EACCES)
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
obrigado
Ó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!
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.
O comando de geração do projeto dá erro no docker pra windows… Não consigo utilizar!
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’.
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
Olá,
tive um pequeno problema ao tentar roda o Dockerfile utilizando a linha “RUN apt-get update &&” porém , ao remover o && de todo o código consegui rodar a imagem sem problema.
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)?