SlideShare uma empresa Scribd logo
Ambiente de Desenvolvimento com
Docker e Ruby on Rails
Prof. Fabricio Bizotto - 2018
Um Problema
» Colocar um sistema em produção
⋄ S.O. específico
⋄ Compilador
⋄ Bibliotecas
⋄ O seu sistema desenvolvido
⋄ Diversos serviços em uma máquina
Dependency Hell
» Uma forma de evitar esse tipo de problema?
» Evitar o famoso “na minha máquina funciona”, “ontem funcionava”
» Fácil de fazer deploy?
» Não precisa-se instalar tudo de novo após formatar a máquina?
» Como garantir que o software que roda no ambiente de desenvolvimento,
vai rodar em produção?
» Como não colocar “todos os ovos” em uma só cesta?
⋄ servidor de banco de dados (postgres)
⋄ servidor web (apache)
Não seria legal se existisse...
Ambiente de desenvolvimento com  docker e ruby on rails
» dotcloud, uma empresa de Paas (2010)
» Versão 0.9 liberada como Open Source em 2013 (a empresa ia falir)
» Já recebeu mais de $50 milhões em investimento
» Parceria com várias empresas:
⋄ Microsoft
⋄ IBM
⋄ Google
História
O que é?
» Ferramenta que empacota uma aplicação e suas
dependências em um container virtual com linux
Docker é uma VM?
Docker é uma VM?
OUTRO SISTEMA OPERACIONAL
COMPARTILHA O KERNEL COM O HOST
O que é um container?
Uma caixa de metal em que você pode colocar o que couber.
Tudo precisa ser muito bem gerenciado para não dar problema.
O que é um container?
Tudo precisa ser muito bem gerenciado para não dar problema.
Docker em funcionamento
Instalação
» https://docs.docker.com/install
» Multiplataforma
Ambiente de desenvolvimento com  docker e ruby on rails
Primeiros comandos
1. docker run --rm --name c1 ubuntu /bin/echo 'Olá Mundo!'
» Container só fica em pé enquanto o comando estiver ativo.
Primeiros comandos
1. docker run --rm --name c1 ubuntu /bin/echo 'Olá Mundo!'
2. docker run --rm -it --name c1 ubuntu bash
Observação:
★ o parâmetro --rm elimina o container depois de ser usado.
Todas as alterações são perdidas
» Container só fica em pé enquanto o comando estiver ativo.
Primeiros comandos
1. docker run --rm --name c1 ubuntu /bin/echo 'Olá Mundo!'
2. docker run --rm -it --name c1 ubuntu bash
3. docker run -it --name c1 ubuntu bash
4. docker ps
5. docker ps -a
» Container só fica em pé enquanto o comando estiver ativo.
Primeiros comandos
1. docker run --rm --name c1 ubuntu /bin/echo 'Olá Mundo!'
2. docker run --rm -it --name c1 ubuntu bash
3. docker run -it --name c1 ubuntu bash
4. docker ps
5. docker ps -a
6. docker images
» Uma imagem é uma “ISO”/”VDI”, somente leitura, que é utilizada para criar
containers
Primeiros comandos
1. docker ps -a
2. docker start/stop/restart c1
3. docker exec -it c1 bash
» Iniciando/parando containers. Executando comandos
1. apt update
2. apt install -y vim
3. touch teste
4. ls -la
Primeiros comandos
# Criando uma pasta vazia
1. docker exec -it c1 mkdir /opt/exemplos
» Executando comandos
Primeiros comandos
# Criando uma pasta vazia
1. docker exec -it c1 mkdir /opt/exemplos
# Aplicando permissões para o usuário externo
1. docker exec -it c1 chown $(id -g):$(id -u) /opt/exemplos
» Executando comandos
Primeiros comandos
1. docker exec -it c1 mkdir /opt/exemplos
2. docker exec -it c1 chown $(id -g):$(id -u) /opt/exemplos
# Escrevendo dentro do arquivo
1. docker exec -it --user=$(id -g):$(id -u) c1 bash -c 'echo Olá
Mundo IF! >> /opt/exemplos/teste1'
» Executando comandos
Commit da imagem
1. docker commit c1 ifc/c1:1.0
2. docker images
» Salvando nossa imagem com as alterações
Clonando nossa imagem
1. docker run -it --name c2 ifc/c1:1.0
Instalando um programa na nova imagem
1. apt install -y cowsay
2. docker start c2
# Agora temos dois containers em pé
1. docker ps
Testando
1. docker exec -it c1 /usr/games/cowsay Olá!
2. docker exec -it c2 /usr/games/cowsay Olá!
» O primeiro comando não vai funcionar!
Testando
1. docker exec -it c1 /usr/games/cowsay Olá!
2. docker exec -it c2 /usr/games/cowsay Olá!
3. docker exec -it --user=$(id -g):$(id -u) c2 bash -c 'echo Mais
texto na nova imagem! >> /opt/exemplos/teste1'
Adicionando mais texto no arquivo teste1
Testando
1. docker exec -it c1 /usr/games/cowsay Olá!
2. docker exec -it c2 /usr/games/cowsay Olá!
3. docker exec -it --user=$(id -g):$(id -u) c2 bash -c 'echo Mais
texto na nova imagem! >> /opt/exemplos/teste1'
4. docker exec -it --user=$(id -g):$(id -u) c1 cat
/opt/exemplos/teste1
5. docker exec -it --user=$(id -g):$(id -u) c2 cat
/opt/exemplos/teste1
Finalizamos o primeiro passo!
Aprendemos a
● Criar/clonar imagens
● Criar containers
● Executar comandos
● UP/DOWN containers
Configurando o Ambiente
Docker + Ruby on Rails
Configurando o Ambiente
Podemos configurar nosso ambiente RoR manualmente, instalando as
bibliotecas no nosso container c2.
Porém, é mais simples utilizar
uma imagem rails existente no repositório do docker hub.
Docker + Ruby on Rails
1. docker run -it --rm 
--user $(id -u):$(id -g) 
--volume "$PWD:/usr/src/app" 
--workdir /usr/src/app 
rails 
rails new --skip-bundle notesapp
» Baseado na imagem rails
Docker + Ruby on Rails
1. docker run -it --rm 
--user $(id -u):$(id -g) 
--volume "$PWD:/usr/src/app" 
--workdir /usr/src/app 
rails 
rails new --skip-bundle notesapp
1. docker images
» Projeto Ruby on Rails criado a partir da imagem rails!
Dockerfile
Arquivo de configuração
Dockerfile
1. cd notesapp
2. touch
Dockerfile
» Criando e configurando o arquivo Dockerfile
Dockerfile
1. cd notesapp
2. touch
Dockerfile
» Projeto Ruby on Rails criado a partir da imagem rails!
FROM rails
MAINTAINER Fabricio Bizotto
RUN apt-get update
RUN apt-get install -y nodejs
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
Arquivo Dockerfile
Parte 1
Dockerfile
#construindo uma imagem docker com Dockerfile
1. docker build -t fabriciobizotto/notesapp:1.0 .
2. docker images
# Testando a imagem
1. docker run -it --rm fabriciobizotto/notesapp:1.0 bash -c 'ls
/usr/src/app/'
» Criando nossa imagem
Dockerfile
1. cd notesapp
2. touch
Dockerfile
» Projeto Ruby on Rails criado a partir da imagem rails!
COPY Gemfile /usr/src/app/
RUN bundle install
COPY . /usr/src/app
EXPOSE 3000
CMD ["rails", "server", "-b", "0.0.0.0"]
Arquivo Dockerfile
Parte 2
Dockerfile
#construindo uma imagem docker com Dockerfile, nova versão
1. docker build -t fabriciobizotto/notesapp:1.1 .
2. docker images
# Testando a imagem
1. docker run -it --rm fabriciobizotto/notesapp:1.1 bash -c 'ls
/usr/src/app/'
» Criando nossa imagem, nova versão
Dockerfile - Executando a aplicação
# roda a aplicação na porta 3000
1. docker run --rm -p 3000:3000 fabriciobizotto/notesapp:1.1
2. verificar: http://localhost:3000
# aponta a pasta externa para dentro do docker
1. docker run --rm -v "$PWD:/usr/src/app" -p 12345:3000
fabriciobizotto/notesapp:1.1
» Criando nossa imagem, nova versão
Dockerfile:
Rails + Postgres
Adicionando um container com postgres
Dockerfile - Postgres
# Pasta com os dados vai ficar fora do container
1. mkdir -p $HOME/docker/volumes/postgres
2. docker run -d --name db -e POSTGRES_PASSWORD=docker -p
5432:5432 -v
$HOME/docker/volumes/postgres:/var/lib/postgresql/data
postgres:10
» Postgres instalado e configurado
Dockerfile - Postgres
1. docker start db
2. docker exec -it db bash
Testando o postgres
# psql -U postgres
# l
» Postgres instalado e configurado
Novo projeto
Agora com Postgres
Vamos criar uma nova aplicação RoR, com o banco de
dados POSTGRES.
#Voltando a pasta anterior
$ cd ..
docker run -it --rm 
--user $(id -u):$(id -g) 
--volume "$PWD:/usr/src/app" 
--workdir /usr/src/app 
rails 
rails new --skip-bundle notesapp2 --database=postgresql
RoR + Postgres
# acessando o projeto
cd notesapp2
# copiando Dockerfile criado anteriormente
cp ../notesapp/Dockerfile .
RoR + Postgres
FROM rails
MAINTAINER Fabricio
Bizotto
RUN apt-get update
RUN apt-get install -y nodejs
RUN mkdir -p /usr/src/app2
WORKDIR /usr/src/app2
Alterando Dockerfile
COPY Gemfile /usr/src/app2/
RUN bundle install
COPY . /usr/src/app2
EXPOSE 3000
CMD ["rails", "server", "-b", "0.0.0.0"]
RoR + Postgres
#construindo uma imagem docker com Dockerfile, nova versão
1. docker build -t fabriciobizotto/notesapp:1.2 .
# Testando a imagem
1. docker run --rm -p 3000:3000 fabriciobizotto/notesapp:1.2
2. Acesse: http://localhost:3000
# deve ocorrer um erro
» Criando nossa imagem, nova versão
Pronto!
Já temos um container com uma
aplicação RoR rodando e um container
com o nosso banco de dados!
Mas como utilizar um container dentro
do outro?
Conexão com a base de dados
# configurar: config/database.yml
default: &default
...
host: db
user: postgres
password: docker
RoR + Postgres
#construindo uma imagem docker com Dockerfile, nova versão
1. docker run --rm --volume "$PWD":/usr/src/app2 -p 3000:3000 --
link db fabriciobizotto/notesapp:1.2 rails db:create db:migrate
» Criando nossa imagem, nova versão
RoR + Postgres
# construindo uma imagem docker com Dockerfile, nova versão
1. docker run --rm --volume "$PWD":/usr/src/app2 -p 3000:3000 --
link db fabriciobizotto/notesapp:1.2 rails db:create db:migrate
# testando
1. docker run --name web -d --volume "$PWD":/usr/src/app2 -p
3000:3000 --link db fabriciobizotto/notesapp:1.2
» Agora funciona!
Comandos Extras
# se parar o banco de dados, a aplicação não funciona
1. docker ps -a
2. docker stop db
3. docker start db
» Parando/Iniciando o container
Criando um CRUD
# Com Rails, vamos criar um Scaffold
1. docker exec -it web rails g scaffold Note title:string
description:text
Criando um CRUD
# Com Rails, vamos criar um Scaffold
1. docker exec -it web rails g scaffold Note title:string
description:text
# Com Rails, vamos criar a tabela notes
1. docker exec -it web rails db:migrate
Configurando
# Configurar a rota inicial da aplicação
# config/routes
Rails.application.routes.draw do
resources :notes
root 'notes#index'
end
» http://localhost:3000
Pronto!
● Dois containers prontos e rodando!
● Já podemos inserir anotações
Recriando os containers
# Podemos remover os containers e recriá-los em qualquer lugar
docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)
Recriando os containers
docker run --name db -d -e POSTGRES_PASSWORD=docker -p
5432:5432 -v
$HOME/docker/volumes/postgres:/var/lib/postgresql/data
postgres:10
» Recriando o container db
Recriando os containers
docker run --name=web -d --volume "$PWD":/usr/src/app2 -p
3000:3000 --link db fabriciobizotto/notesapp:1.2
» Recriando o container web
Pronto!
● Dois containers prontos e rodando!
● Já podemos inserir mais anotações
docker-compose:
Rails + Postgres
Ferramenta para rodar múltiplos containers
docker-compose
# dentro do mesmo projeto, crie o seguinte arquivo
» touch docker-compose.yml
docker-compose
# conteúdo do arquivo
Parte 1
version: '3.6'
services:
db:
image: postgres:10
volumes:
- $HOME/docker/volumes/postgres:/var/lib/postgresql/data
ports:
- '5432:5432'
docker-compose
# conteúdo do arquivo
Parte 2
website:
depends_on:
- 'db'
build: .
ports:
- '3000:3000'
volumes:
- '.:/usr/src/app2'
volumes:
postgres:
docker-compose
# Com o arquivo configurado, basta rodar
» docker-compose build
» docker images, para ver nossa imagem construida
docker-compose
# Com o arquivo configurado, basta rodar
» docker-compose build
» docker-compose up OU docker-compose up -d
» docker-compose down para parar os serviços
docker-compose
# Com o arquivo configurado, basta rodar
» docker-compose build
» docker-compose up OU docker-compose up -d
# Podemos executar comandos rails
» docker-compose run website rails g scaffold Animal
name:string favorito:boolean
» docker-compose run website rails db:migrate
» docker-compose down para parar os serviços
Limpeza
Eliminando containers e imagens
Limpando o docker
» docker stop $(docker ps -a -q)
» docker rm $(docker ps -a -q) -f
» docker rmi $(docker images -a -q)
# CUIDADO: Remove tudo
» docker system prune -a
Referências
» https://docs.docker.com/
⋄ Documentação do Docker
⋄ Dockerfile
⋄ Docker Hub
⋄ Docker compose
⋄ Instalação - MAC OS
⋄ Instalação - Windows
⋄ Instalação Linux

Mais conteúdo relacionado

Mais procurados

OpenStack Tutorial
OpenStack TutorialOpenStack Tutorial
OpenStack Tutorial
Bret Piatt
 
Introduction à Docker et utilisation en production /Digital apéro Besançon [1...
Introduction à Docker et utilisation en production /Digital apéro Besançon [1...Introduction à Docker et utilisation en production /Digital apéro Besançon [1...
Introduction à Docker et utilisation en production /Digital apéro Besançon [1...
Silicon Comté
 
What is Docker Architecture | Edureka
What is Docker Architecture | EdurekaWhat is Docker Architecture | Edureka
What is Docker Architecture | Edureka
Edureka!
 
docker installation and basics
docker installation and basicsdocker installation and basics
docker installation and basics
Walid Ashraf
 
Docker introduction & benefits
Docker introduction & benefitsDocker introduction & benefits
Docker introduction & benefits
Amit Manwade
 
Docker in real life
Docker in real lifeDocker in real life
Docker in real life
Nguyen Van Vuong
 
Introduction To Docker, Docker Compose, Docker Swarm
Introduction To Docker, Docker Compose, Docker SwarmIntroduction To Docker, Docker Compose, Docker Swarm
Introduction To Docker, Docker Compose, Docker Swarm
An Nguyen
 
Docker Introduction
Docker IntroductionDocker Introduction
Docker Introduction
Sparkbit
 
Red Hat Container Strategy
Red Hat Container StrategyRed Hat Container Strategy
Red Hat Container Strategy
Red Hat Events
 
Docker Containers Deep Dive
Docker Containers Deep DiveDocker Containers Deep Dive
Docker Containers Deep Dive
Will Kinard
 
Docker Compose | Docker Compose Tutorial | Docker Tutorial For Beginners | De...
Docker Compose | Docker Compose Tutorial | Docker Tutorial For Beginners | De...Docker Compose | Docker Compose Tutorial | Docker Tutorial For Beginners | De...
Docker Compose | Docker Compose Tutorial | Docker Tutorial For Beginners | De...
Simplilearn
 
[FR] Présentatation d'Ansible
[FR] Présentatation d'Ansible [FR] Présentatation d'Ansible
[FR] Présentatation d'Ansible
Armand Guio
 
Introduction to Docker - VIT Campus
Introduction to Docker - VIT CampusIntroduction to Docker - VIT Campus
Introduction to Docker - VIT Campus
Ajeet Singh Raina
 
Building PaaS with Amazon EKS for the Large-Scale, Highly Regulated Enterpris...
Building PaaS with Amazon EKS for the Large-Scale, Highly Regulated Enterpris...Building PaaS with Amazon EKS for the Large-Scale, Highly Regulated Enterpris...
Building PaaS with Amazon EKS for the Large-Scale, Highly Regulated Enterpris...
Amazon Web Services
 
Docker by Example - Basics
Docker by Example - Basics Docker by Example - Basics
Docker by Example - Basics
Ganesh Samarthyam
 
VMware Tanzu Application Service as an Integration Platform
VMware Tanzu Application Service as an Integration PlatformVMware Tanzu Application Service as an Integration Platform
VMware Tanzu Application Service as an Integration Platform
VMware Tanzu
 
File permissions
File permissionsFile permissions
File permissions
Varnnit Jain
 
Introduction to Docker Containers - Docker Captain
Introduction to Docker Containers - Docker CaptainIntroduction to Docker Containers - Docker Captain
Introduction to Docker Containers - Docker Captain
Ajeet Singh Raina
 
Docker For Windows | Setting Up Docker On Windows | Edureka
Docker For Windows | Setting Up Docker On Windows | EdurekaDocker For Windows | Setting Up Docker On Windows | Edureka
Docker For Windows | Setting Up Docker On Windows | Edureka
Edureka!
 
Linux Interview Questions And Answers | Linux Administration Tutorial | Linux...
Linux Interview Questions And Answers | Linux Administration Tutorial | Linux...Linux Interview Questions And Answers | Linux Administration Tutorial | Linux...
Linux Interview Questions And Answers | Linux Administration Tutorial | Linux...
Edureka!
 

Mais procurados (20)

OpenStack Tutorial
OpenStack TutorialOpenStack Tutorial
OpenStack Tutorial
 
Introduction à Docker et utilisation en production /Digital apéro Besançon [1...
Introduction à Docker et utilisation en production /Digital apéro Besançon [1...Introduction à Docker et utilisation en production /Digital apéro Besançon [1...
Introduction à Docker et utilisation en production /Digital apéro Besançon [1...
 
What is Docker Architecture | Edureka
What is Docker Architecture | EdurekaWhat is Docker Architecture | Edureka
What is Docker Architecture | Edureka
 
docker installation and basics
docker installation and basicsdocker installation and basics
docker installation and basics
 
Docker introduction & benefits
Docker introduction & benefitsDocker introduction & benefits
Docker introduction & benefits
 
Docker in real life
Docker in real lifeDocker in real life
Docker in real life
 
Introduction To Docker, Docker Compose, Docker Swarm
Introduction To Docker, Docker Compose, Docker SwarmIntroduction To Docker, Docker Compose, Docker Swarm
Introduction To Docker, Docker Compose, Docker Swarm
 
Docker Introduction
Docker IntroductionDocker Introduction
Docker Introduction
 
Red Hat Container Strategy
Red Hat Container StrategyRed Hat Container Strategy
Red Hat Container Strategy
 
Docker Containers Deep Dive
Docker Containers Deep DiveDocker Containers Deep Dive
Docker Containers Deep Dive
 
Docker Compose | Docker Compose Tutorial | Docker Tutorial For Beginners | De...
Docker Compose | Docker Compose Tutorial | Docker Tutorial For Beginners | De...Docker Compose | Docker Compose Tutorial | Docker Tutorial For Beginners | De...
Docker Compose | Docker Compose Tutorial | Docker Tutorial For Beginners | De...
 
[FR] Présentatation d'Ansible
[FR] Présentatation d'Ansible [FR] Présentatation d'Ansible
[FR] Présentatation d'Ansible
 
Introduction to Docker - VIT Campus
Introduction to Docker - VIT CampusIntroduction to Docker - VIT Campus
Introduction to Docker - VIT Campus
 
Building PaaS with Amazon EKS for the Large-Scale, Highly Regulated Enterpris...
Building PaaS with Amazon EKS for the Large-Scale, Highly Regulated Enterpris...Building PaaS with Amazon EKS for the Large-Scale, Highly Regulated Enterpris...
Building PaaS with Amazon EKS for the Large-Scale, Highly Regulated Enterpris...
 
Docker by Example - Basics
Docker by Example - Basics Docker by Example - Basics
Docker by Example - Basics
 
VMware Tanzu Application Service as an Integration Platform
VMware Tanzu Application Service as an Integration PlatformVMware Tanzu Application Service as an Integration Platform
VMware Tanzu Application Service as an Integration Platform
 
File permissions
File permissionsFile permissions
File permissions
 
Introduction to Docker Containers - Docker Captain
Introduction to Docker Containers - Docker CaptainIntroduction to Docker Containers - Docker Captain
Introduction to Docker Containers - Docker Captain
 
Docker For Windows | Setting Up Docker On Windows | Edureka
Docker For Windows | Setting Up Docker On Windows | EdurekaDocker For Windows | Setting Up Docker On Windows | Edureka
Docker For Windows | Setting Up Docker On Windows | Edureka
 
Linux Interview Questions And Answers | Linux Administration Tutorial | Linux...
Linux Interview Questions And Answers | Linux Administration Tutorial | Linux...Linux Interview Questions And Answers | Linux Administration Tutorial | Linux...
Linux Interview Questions And Answers | Linux Administration Tutorial | Linux...
 

Semelhante a Ambiente de desenvolvimento com docker e ruby on rails

Docker 101 e Ambientes Imutáveis
Docker 101 e Ambientes Imutáveis Docker 101 e Ambientes Imutáveis
Docker 101 e Ambientes Imutáveis
Wallison Marra
 
TDC 2016 Floripa - Workshop docker
TDC 2016 Floripa - Workshop dockerTDC 2016 Floripa - Workshop docker
TDC 2016 Floripa - Workshop docker
Rafael Gomes
 
Introdução ao docker
Introdução ao dockerIntrodução ao docker
Introdução ao docker
Benicio Ávila
 
Docker
DockerDocker
Aulão de docker
Aulão de dockerAulão de docker
Aulão de docker
Renato Lucena
 
Talk no Meetup LaravelSP #3
Talk no Meetup LaravelSP #3Talk no Meetup LaravelSP #3
Talk no Meetup LaravelSP #3
Wellington Silva
 
Freedomday2016 - Fique na caixinha, docker
Freedomday2016 - Fique na caixinha, dockerFreedomday2016 - Fique na caixinha, docker
Freedomday2016 - Fique na caixinha, docker
Eustaquio Guimaraes mendesbsb
 
Docker - Tutorial for beginners
Docker - Tutorial for beginnersDocker - Tutorial for beginners
Docker - Tutorial for beginners
Rafael Chiavegatto
 
Introdução ao Docker
Introdução ao DockerIntrodução ao Docker
Introdução ao Docker
Rafael Dutra
 
Desenvolvendo e implantando aplicações PHP utilizando Docker
Desenvolvendo e implantando aplicações PHP utilizando DockerDesenvolvendo e implantando aplicações PHP utilizando Docker
Desenvolvendo e implantando aplicações PHP utilizando Docker
Bruno Ricardo Siqueira
 
Introdução-a-Docker-compactado.pdf
Introdução-a-Docker-compactado.pdfIntrodução-a-Docker-compactado.pdf
Introdução-a-Docker-compactado.pdf
dadalt1
 
Mundo mágico de Docker
Mundo mágico de DockerMundo mágico de Docker
Mundo mágico de Docker
DANIEL SILVA
 
Oficina docker
Oficina dockerOficina docker
Oficina docker
Morvana Bonin
 
Atech talks - Docker
Atech talks - DockerAtech talks - Docker
Atech talks - Docker
Atech S.A. | Embraer Group
 
Docker Swarm - Sua aplicação pronta para escalar
Docker Swarm - Sua aplicação pronta para escalarDocker Swarm - Sua aplicação pronta para escalar
Docker Swarm - Sua aplicação pronta para escalar
gustavomtborges
 
Docker - Essa baleia vai te conquistar
Docker - Essa baleia vai te conquistarDocker - Essa baleia vai te conquistar
Docker - Essa baleia vai te conquistar
Vinícius Feitosa
 
Vagrant & Docker: carregue seus ambientes no bolso
Vagrant & Docker: carregue seus ambientes no bolsoVagrant & Docker: carregue seus ambientes no bolso
Vagrant & Docker: carregue seus ambientes no bolso
Diogo Lucas
 
Olá docker
Olá dockerOlá docker
Olá docker
Marcos Ellys
 
HOST079 - Docker
HOST079 - DockerHOST079 - Docker
HOST079 - Docker
Dennison Souza
 
Dockerizando aplicações em uma Fintech
Dockerizando aplicações em uma FintechDockerizando aplicações em uma Fintech
Dockerizando aplicações em uma Fintech
Rafael Gomes
 

Semelhante a Ambiente de desenvolvimento com docker e ruby on rails (20)

Docker 101 e Ambientes Imutáveis
Docker 101 e Ambientes Imutáveis Docker 101 e Ambientes Imutáveis
Docker 101 e Ambientes Imutáveis
 
TDC 2016 Floripa - Workshop docker
TDC 2016 Floripa - Workshop dockerTDC 2016 Floripa - Workshop docker
TDC 2016 Floripa - Workshop docker
 
Introdução ao docker
Introdução ao dockerIntrodução ao docker
Introdução ao docker
 
Docker
DockerDocker
Docker
 
Aulão de docker
Aulão de dockerAulão de docker
Aulão de docker
 
Talk no Meetup LaravelSP #3
Talk no Meetup LaravelSP #3Talk no Meetup LaravelSP #3
Talk no Meetup LaravelSP #3
 
Freedomday2016 - Fique na caixinha, docker
Freedomday2016 - Fique na caixinha, dockerFreedomday2016 - Fique na caixinha, docker
Freedomday2016 - Fique na caixinha, docker
 
Docker - Tutorial for beginners
Docker - Tutorial for beginnersDocker - Tutorial for beginners
Docker - Tutorial for beginners
 
Introdução ao Docker
Introdução ao DockerIntrodução ao Docker
Introdução ao Docker
 
Desenvolvendo e implantando aplicações PHP utilizando Docker
Desenvolvendo e implantando aplicações PHP utilizando DockerDesenvolvendo e implantando aplicações PHP utilizando Docker
Desenvolvendo e implantando aplicações PHP utilizando Docker
 
Introdução-a-Docker-compactado.pdf
Introdução-a-Docker-compactado.pdfIntrodução-a-Docker-compactado.pdf
Introdução-a-Docker-compactado.pdf
 
Mundo mágico de Docker
Mundo mágico de DockerMundo mágico de Docker
Mundo mágico de Docker
 
Oficina docker
Oficina dockerOficina docker
Oficina docker
 
Atech talks - Docker
Atech talks - DockerAtech talks - Docker
Atech talks - Docker
 
Docker Swarm - Sua aplicação pronta para escalar
Docker Swarm - Sua aplicação pronta para escalarDocker Swarm - Sua aplicação pronta para escalar
Docker Swarm - Sua aplicação pronta para escalar
 
Docker - Essa baleia vai te conquistar
Docker - Essa baleia vai te conquistarDocker - Essa baleia vai te conquistar
Docker - Essa baleia vai te conquistar
 
Vagrant & Docker: carregue seus ambientes no bolso
Vagrant & Docker: carregue seus ambientes no bolsoVagrant & Docker: carregue seus ambientes no bolso
Vagrant & Docker: carregue seus ambientes no bolso
 
Olá docker
Olá dockerOlá docker
Olá docker
 
HOST079 - Docker
HOST079 - DockerHOST079 - Docker
HOST079 - Docker
 
Dockerizando aplicações em uma Fintech
Dockerizando aplicações em uma FintechDockerizando aplicações em uma Fintech
Dockerizando aplicações em uma Fintech
 

Último

EBOOK_HORA DO CONTO_O SONHO DO EVARISTO_CARLA MORAIS_22_23
EBOOK_HORA DO CONTO_O SONHO DO EVARISTO_CARLA MORAIS_22_23EBOOK_HORA DO CONTO_O SONHO DO EVARISTO_CARLA MORAIS_22_23
EBOOK_HORA DO CONTO_O SONHO DO EVARISTO_CARLA MORAIS_22_23
Sandra Pratas
 
A experiência do professor. Publicado EM 08.07.2024
A experiência do professor. Publicado EM 08.07.2024A experiência do professor. Publicado EM 08.07.2024
A experiência do professor. Publicado EM 08.07.2024
Espanhol Online
 
Organograma do Centro Gestor e Operacional do Sistema de Proteção da Amazônia...
Organograma do Centro Gestor e Operacional do Sistema de Proteção da Amazônia...Organograma do Centro Gestor e Operacional do Sistema de Proteção da Amazônia...
Organograma do Centro Gestor e Operacional do Sistema de Proteção da Amazônia...
Falcão Brasil
 
Desafio matemático - multiplicação e divisão.
Desafio matemático -  multiplicação e divisão.Desafio matemático -  multiplicação e divisão.
Desafio matemático - multiplicação e divisão.
Mary Alvarenga
 
Guia Genealógico da Principesca e Ducal Casa de Mesolcina, 2024
Guia Genealógico da Principesca e Ducal Casa de Mesolcina, 2024Guia Genealógico da Principesca e Ducal Casa de Mesolcina, 2024
Guia Genealógico da Principesca e Ducal Casa de Mesolcina, 2024
principeandregalli
 
Noite Alva! José Ernesto Ferraresso.ppsx
Noite Alva! José Ernesto Ferraresso.ppsxNoite Alva! José Ernesto Ferraresso.ppsx
Noite Alva! José Ernesto Ferraresso.ppsx
Luzia Gabriele
 
FILMES DE ABRIL_BECRE D. CARLOS I_2023_24
FILMES DE ABRIL_BECRE D. CARLOS I_2023_24FILMES DE ABRIL_BECRE D. CARLOS I_2023_24
FILMES DE ABRIL_BECRE D. CARLOS I_2023_24
Sandra Pratas
 
APA fonoaudiologia Pratica Trabalho Prontos.pptx
APA fonoaudiologia Pratica Trabalho Prontos.pptxAPA fonoaudiologia Pratica Trabalho Prontos.pptx
APA fonoaudiologia Pratica Trabalho Prontos.pptx
orquestrasinfonicaam
 
Apresentação Institucional do Centro Gestor e Operacional do Sistema de Prote...
Apresentação Institucional do Centro Gestor e Operacional do Sistema de Prote...Apresentação Institucional do Centro Gestor e Operacional do Sistema de Prote...
Apresentação Institucional do Centro Gestor e Operacional do Sistema de Prote...
Falcão Brasil
 
Estudo Infantil - MISSÕES NACIONAIS - IGREJA BATISTA
Estudo Infantil - MISSÕES NACIONAIS - IGREJA BATISTAEstudo Infantil - MISSÕES NACIONAIS - IGREJA BATISTA
Estudo Infantil - MISSÕES NACIONAIS - IGREJA BATISTA
deboracorrea21
 
A Industria Brasileira de Defesa - Situação Atual e Perspectivas de Evolução.pdf
A Industria Brasileira de Defesa - Situação Atual e Perspectivas de Evolução.pdfA Industria Brasileira de Defesa - Situação Atual e Perspectivas de Evolução.pdf
A Industria Brasileira de Defesa - Situação Atual e Perspectivas de Evolução.pdf
Falcão Brasil
 
Alfabetização de adultos.pdf
Alfabetização de             adultos.pdfAlfabetização de             adultos.pdf
Alfabetização de adultos.pdf
arodatos81
 
Caça-palavras - multiplicação
Caça-palavras  -  multiplicaçãoCaça-palavras  -  multiplicação
Caça-palavras - multiplicação
Mary Alvarenga
 
Caderno 1 - Módulo Água JMS 2024 (1).pdf
Caderno 1 -  Módulo Água JMS 2024 (1).pdfCaderno 1 -  Módulo Água JMS 2024 (1).pdf
Caderno 1 - Módulo Água JMS 2024 (1).pdf
SupervisoEMAC
 
EBOOK_HORA DO CONTO_O SONHO DO EVARISTO_RITA E CLÁUDIA_22_23
EBOOK_HORA DO CONTO_O SONHO DO EVARISTO_RITA E CLÁUDIA_22_23EBOOK_HORA DO CONTO_O SONHO DO EVARISTO_RITA E CLÁUDIA_22_23
EBOOK_HORA DO CONTO_O SONHO DO EVARISTO_RITA E CLÁUDIA_22_23
Sandra Pratas
 
Infografia | Presidência húngara do Conselho da UE
Infografia | Presidência húngara do Conselho da UEInfografia | Presidência húngara do Conselho da UE
Infografia | Presidência húngara do Conselho da UE
Centro Jacques Delors
 
Geotecnologias Aplicadas na Gestão de Riscos e Desastres Hidrológicos.pdf
Geotecnologias Aplicadas na Gestão de Riscos e Desastres Hidrológicos.pdfGeotecnologias Aplicadas na Gestão de Riscos e Desastres Hidrológicos.pdf
Geotecnologias Aplicadas na Gestão de Riscos e Desastres Hidrológicos.pdf
Falcão Brasil
 
EMOCIONES PARA TRABAJAR EN LA AREA SOCIOEMOCIONAL
EMOCIONES PARA TRABAJAR EN LA AREA SOCIOEMOCIONALEMOCIONES PARA TRABAJAR EN LA AREA SOCIOEMOCIONAL
EMOCIONES PARA TRABAJAR EN LA AREA SOCIOEMOCIONAL
JocelynNavarroBonta
 
Slide | Eurodeputados Portugueses (2024-2029) - Parlamento Europeu (atualiz. ...
Slide | Eurodeputados Portugueses (2024-2029) - Parlamento Europeu (atualiz. ...Slide | Eurodeputados Portugueses (2024-2029) - Parlamento Europeu (atualiz. ...
Slide | Eurodeputados Portugueses (2024-2029) - Parlamento Europeu (atualiz. ...
Centro Jacques Delors
 
A Atuação das Forças Armadas na Garantia da Lei e da Ordem (GLO).pdf
A Atuação das Forças Armadas na Garantia da Lei e da Ordem (GLO).pdfA Atuação das Forças Armadas na Garantia da Lei e da Ordem (GLO).pdf
A Atuação das Forças Armadas na Garantia da Lei e da Ordem (GLO).pdf
Falcão Brasil
 

Último (20)

EBOOK_HORA DO CONTO_O SONHO DO EVARISTO_CARLA MORAIS_22_23
EBOOK_HORA DO CONTO_O SONHO DO EVARISTO_CARLA MORAIS_22_23EBOOK_HORA DO CONTO_O SONHO DO EVARISTO_CARLA MORAIS_22_23
EBOOK_HORA DO CONTO_O SONHO DO EVARISTO_CARLA MORAIS_22_23
 
A experiência do professor. Publicado EM 08.07.2024
A experiência do professor. Publicado EM 08.07.2024A experiência do professor. Publicado EM 08.07.2024
A experiência do professor. Publicado EM 08.07.2024
 
Organograma do Centro Gestor e Operacional do Sistema de Proteção da Amazônia...
Organograma do Centro Gestor e Operacional do Sistema de Proteção da Amazônia...Organograma do Centro Gestor e Operacional do Sistema de Proteção da Amazônia...
Organograma do Centro Gestor e Operacional do Sistema de Proteção da Amazônia...
 
Desafio matemático - multiplicação e divisão.
Desafio matemático -  multiplicação e divisão.Desafio matemático -  multiplicação e divisão.
Desafio matemático - multiplicação e divisão.
 
Guia Genealógico da Principesca e Ducal Casa de Mesolcina, 2024
Guia Genealógico da Principesca e Ducal Casa de Mesolcina, 2024Guia Genealógico da Principesca e Ducal Casa de Mesolcina, 2024
Guia Genealógico da Principesca e Ducal Casa de Mesolcina, 2024
 
Noite Alva! José Ernesto Ferraresso.ppsx
Noite Alva! José Ernesto Ferraresso.ppsxNoite Alva! José Ernesto Ferraresso.ppsx
Noite Alva! José Ernesto Ferraresso.ppsx
 
FILMES DE ABRIL_BECRE D. CARLOS I_2023_24
FILMES DE ABRIL_BECRE D. CARLOS I_2023_24FILMES DE ABRIL_BECRE D. CARLOS I_2023_24
FILMES DE ABRIL_BECRE D. CARLOS I_2023_24
 
APA fonoaudiologia Pratica Trabalho Prontos.pptx
APA fonoaudiologia Pratica Trabalho Prontos.pptxAPA fonoaudiologia Pratica Trabalho Prontos.pptx
APA fonoaudiologia Pratica Trabalho Prontos.pptx
 
Apresentação Institucional do Centro Gestor e Operacional do Sistema de Prote...
Apresentação Institucional do Centro Gestor e Operacional do Sistema de Prote...Apresentação Institucional do Centro Gestor e Operacional do Sistema de Prote...
Apresentação Institucional do Centro Gestor e Operacional do Sistema de Prote...
 
Estudo Infantil - MISSÕES NACIONAIS - IGREJA BATISTA
Estudo Infantil - MISSÕES NACIONAIS - IGREJA BATISTAEstudo Infantil - MISSÕES NACIONAIS - IGREJA BATISTA
Estudo Infantil - MISSÕES NACIONAIS - IGREJA BATISTA
 
A Industria Brasileira de Defesa - Situação Atual e Perspectivas de Evolução.pdf
A Industria Brasileira de Defesa - Situação Atual e Perspectivas de Evolução.pdfA Industria Brasileira de Defesa - Situação Atual e Perspectivas de Evolução.pdf
A Industria Brasileira de Defesa - Situação Atual e Perspectivas de Evolução.pdf
 
Alfabetização de adultos.pdf
Alfabetização de             adultos.pdfAlfabetização de             adultos.pdf
Alfabetização de adultos.pdf
 
Caça-palavras - multiplicação
Caça-palavras  -  multiplicaçãoCaça-palavras  -  multiplicação
Caça-palavras - multiplicação
 
Caderno 1 - Módulo Água JMS 2024 (1).pdf
Caderno 1 -  Módulo Água JMS 2024 (1).pdfCaderno 1 -  Módulo Água JMS 2024 (1).pdf
Caderno 1 - Módulo Água JMS 2024 (1).pdf
 
EBOOK_HORA DO CONTO_O SONHO DO EVARISTO_RITA E CLÁUDIA_22_23
EBOOK_HORA DO CONTO_O SONHO DO EVARISTO_RITA E CLÁUDIA_22_23EBOOK_HORA DO CONTO_O SONHO DO EVARISTO_RITA E CLÁUDIA_22_23
EBOOK_HORA DO CONTO_O SONHO DO EVARISTO_RITA E CLÁUDIA_22_23
 
Infografia | Presidência húngara do Conselho da UE
Infografia | Presidência húngara do Conselho da UEInfografia | Presidência húngara do Conselho da UE
Infografia | Presidência húngara do Conselho da UE
 
Geotecnologias Aplicadas na Gestão de Riscos e Desastres Hidrológicos.pdf
Geotecnologias Aplicadas na Gestão de Riscos e Desastres Hidrológicos.pdfGeotecnologias Aplicadas na Gestão de Riscos e Desastres Hidrológicos.pdf
Geotecnologias Aplicadas na Gestão de Riscos e Desastres Hidrológicos.pdf
 
EMOCIONES PARA TRABAJAR EN LA AREA SOCIOEMOCIONAL
EMOCIONES PARA TRABAJAR EN LA AREA SOCIOEMOCIONALEMOCIONES PARA TRABAJAR EN LA AREA SOCIOEMOCIONAL
EMOCIONES PARA TRABAJAR EN LA AREA SOCIOEMOCIONAL
 
Slide | Eurodeputados Portugueses (2024-2029) - Parlamento Europeu (atualiz. ...
Slide | Eurodeputados Portugueses (2024-2029) - Parlamento Europeu (atualiz. ...Slide | Eurodeputados Portugueses (2024-2029) - Parlamento Europeu (atualiz. ...
Slide | Eurodeputados Portugueses (2024-2029) - Parlamento Europeu (atualiz. ...
 
A Atuação das Forças Armadas na Garantia da Lei e da Ordem (GLO).pdf
A Atuação das Forças Armadas na Garantia da Lei e da Ordem (GLO).pdfA Atuação das Forças Armadas na Garantia da Lei e da Ordem (GLO).pdf
A Atuação das Forças Armadas na Garantia da Lei e da Ordem (GLO).pdf
 

Ambiente de desenvolvimento com docker e ruby on rails

  • 1. Ambiente de Desenvolvimento com Docker e Ruby on Rails Prof. Fabricio Bizotto - 2018
  • 2. Um Problema » Colocar um sistema em produção ⋄ S.O. específico ⋄ Compilador ⋄ Bibliotecas ⋄ O seu sistema desenvolvido ⋄ Diversos serviços em uma máquina
  • 4. » Uma forma de evitar esse tipo de problema? » Evitar o famoso “na minha máquina funciona”, “ontem funcionava” » Fácil de fazer deploy? » Não precisa-se instalar tudo de novo após formatar a máquina? » Como garantir que o software que roda no ambiente de desenvolvimento, vai rodar em produção? » Como não colocar “todos os ovos” em uma só cesta? ⋄ servidor de banco de dados (postgres) ⋄ servidor web (apache) Não seria legal se existisse...
  • 6. » dotcloud, uma empresa de Paas (2010) » Versão 0.9 liberada como Open Source em 2013 (a empresa ia falir) » Já recebeu mais de $50 milhões em investimento » Parceria com várias empresas: ⋄ Microsoft ⋄ IBM ⋄ Google História
  • 7. O que é? » Ferramenta que empacota uma aplicação e suas dependências em um container virtual com linux
  • 9. Docker é uma VM? OUTRO SISTEMA OPERACIONAL COMPARTILHA O KERNEL COM O HOST
  • 10. O que é um container? Uma caixa de metal em que você pode colocar o que couber. Tudo precisa ser muito bem gerenciado para não dar problema.
  • 11. O que é um container? Tudo precisa ser muito bem gerenciado para não dar problema.
  • 15. Primeiros comandos 1. docker run --rm --name c1 ubuntu /bin/echo 'Olá Mundo!' » Container só fica em pé enquanto o comando estiver ativo.
  • 16. Primeiros comandos 1. docker run --rm --name c1 ubuntu /bin/echo 'Olá Mundo!' 2. docker run --rm -it --name c1 ubuntu bash Observação: ★ o parâmetro --rm elimina o container depois de ser usado. Todas as alterações são perdidas » Container só fica em pé enquanto o comando estiver ativo.
  • 17. Primeiros comandos 1. docker run --rm --name c1 ubuntu /bin/echo 'Olá Mundo!' 2. docker run --rm -it --name c1 ubuntu bash 3. docker run -it --name c1 ubuntu bash 4. docker ps 5. docker ps -a » Container só fica em pé enquanto o comando estiver ativo.
  • 18. Primeiros comandos 1. docker run --rm --name c1 ubuntu /bin/echo 'Olá Mundo!' 2. docker run --rm -it --name c1 ubuntu bash 3. docker run -it --name c1 ubuntu bash 4. docker ps 5. docker ps -a 6. docker images » Uma imagem é uma “ISO”/”VDI”, somente leitura, que é utilizada para criar containers
  • 19. Primeiros comandos 1. docker ps -a 2. docker start/stop/restart c1 3. docker exec -it c1 bash » Iniciando/parando containers. Executando comandos 1. apt update 2. apt install -y vim 3. touch teste 4. ls -la
  • 20. Primeiros comandos # Criando uma pasta vazia 1. docker exec -it c1 mkdir /opt/exemplos » Executando comandos
  • 21. Primeiros comandos # Criando uma pasta vazia 1. docker exec -it c1 mkdir /opt/exemplos # Aplicando permissões para o usuário externo 1. docker exec -it c1 chown $(id -g):$(id -u) /opt/exemplos » Executando comandos
  • 22. Primeiros comandos 1. docker exec -it c1 mkdir /opt/exemplos 2. docker exec -it c1 chown $(id -g):$(id -u) /opt/exemplos # Escrevendo dentro do arquivo 1. docker exec -it --user=$(id -g):$(id -u) c1 bash -c 'echo Olá Mundo IF! >> /opt/exemplos/teste1' » Executando comandos
  • 23. Commit da imagem 1. docker commit c1 ifc/c1:1.0 2. docker images » Salvando nossa imagem com as alterações
  • 24. Clonando nossa imagem 1. docker run -it --name c2 ifc/c1:1.0 Instalando um programa na nova imagem 1. apt install -y cowsay 2. docker start c2 # Agora temos dois containers em pé 1. docker ps
  • 25. Testando 1. docker exec -it c1 /usr/games/cowsay Olá! 2. docker exec -it c2 /usr/games/cowsay Olá! » O primeiro comando não vai funcionar!
  • 26. Testando 1. docker exec -it c1 /usr/games/cowsay Olá! 2. docker exec -it c2 /usr/games/cowsay Olá! 3. docker exec -it --user=$(id -g):$(id -u) c2 bash -c 'echo Mais texto na nova imagem! >> /opt/exemplos/teste1' Adicionando mais texto no arquivo teste1
  • 27. Testando 1. docker exec -it c1 /usr/games/cowsay Olá! 2. docker exec -it c2 /usr/games/cowsay Olá! 3. docker exec -it --user=$(id -g):$(id -u) c2 bash -c 'echo Mais texto na nova imagem! >> /opt/exemplos/teste1' 4. docker exec -it --user=$(id -g):$(id -u) c1 cat /opt/exemplos/teste1 5. docker exec -it --user=$(id -g):$(id -u) c2 cat /opt/exemplos/teste1
  • 28. Finalizamos o primeiro passo! Aprendemos a ● Criar/clonar imagens ● Criar containers ● Executar comandos ● UP/DOWN containers
  • 30. Configurando o Ambiente Podemos configurar nosso ambiente RoR manualmente, instalando as bibliotecas no nosso container c2. Porém, é mais simples utilizar uma imagem rails existente no repositório do docker hub.
  • 31. Docker + Ruby on Rails 1. docker run -it --rm --user $(id -u):$(id -g) --volume "$PWD:/usr/src/app" --workdir /usr/src/app rails rails new --skip-bundle notesapp » Baseado na imagem rails
  • 32. Docker + Ruby on Rails 1. docker run -it --rm --user $(id -u):$(id -g) --volume "$PWD:/usr/src/app" --workdir /usr/src/app rails rails new --skip-bundle notesapp 1. docker images » Projeto Ruby on Rails criado a partir da imagem rails!
  • 34. Dockerfile 1. cd notesapp 2. touch Dockerfile » Criando e configurando o arquivo Dockerfile
  • 35. Dockerfile 1. cd notesapp 2. touch Dockerfile » Projeto Ruby on Rails criado a partir da imagem rails! FROM rails MAINTAINER Fabricio Bizotto RUN apt-get update RUN apt-get install -y nodejs RUN mkdir -p /usr/src/app WORKDIR /usr/src/app Arquivo Dockerfile Parte 1
  • 36. Dockerfile #construindo uma imagem docker com Dockerfile 1. docker build -t fabriciobizotto/notesapp:1.0 . 2. docker images # Testando a imagem 1. docker run -it --rm fabriciobizotto/notesapp:1.0 bash -c 'ls /usr/src/app/' » Criando nossa imagem
  • 37. Dockerfile 1. cd notesapp 2. touch Dockerfile » Projeto Ruby on Rails criado a partir da imagem rails! COPY Gemfile /usr/src/app/ RUN bundle install COPY . /usr/src/app EXPOSE 3000 CMD ["rails", "server", "-b", "0.0.0.0"] Arquivo Dockerfile Parte 2
  • 38. Dockerfile #construindo uma imagem docker com Dockerfile, nova versão 1. docker build -t fabriciobizotto/notesapp:1.1 . 2. docker images # Testando a imagem 1. docker run -it --rm fabriciobizotto/notesapp:1.1 bash -c 'ls /usr/src/app/' » Criando nossa imagem, nova versão
  • 39. Dockerfile - Executando a aplicação # roda a aplicação na porta 3000 1. docker run --rm -p 3000:3000 fabriciobizotto/notesapp:1.1 2. verificar: http://localhost:3000 # aponta a pasta externa para dentro do docker 1. docker run --rm -v "$PWD:/usr/src/app" -p 12345:3000 fabriciobizotto/notesapp:1.1 » Criando nossa imagem, nova versão
  • 40. Dockerfile: Rails + Postgres Adicionando um container com postgres
  • 41. Dockerfile - Postgres # Pasta com os dados vai ficar fora do container 1. mkdir -p $HOME/docker/volumes/postgres 2. docker run -d --name db -e POSTGRES_PASSWORD=docker -p 5432:5432 -v $HOME/docker/volumes/postgres:/var/lib/postgresql/data postgres:10 » Postgres instalado e configurado
  • 42. Dockerfile - Postgres 1. docker start db 2. docker exec -it db bash Testando o postgres # psql -U postgres # l » Postgres instalado e configurado
  • 44. Vamos criar uma nova aplicação RoR, com o banco de dados POSTGRES. #Voltando a pasta anterior $ cd ..
  • 45. docker run -it --rm --user $(id -u):$(id -g) --volume "$PWD:/usr/src/app" --workdir /usr/src/app rails rails new --skip-bundle notesapp2 --database=postgresql RoR + Postgres
  • 46. # acessando o projeto cd notesapp2 # copiando Dockerfile criado anteriormente cp ../notesapp/Dockerfile . RoR + Postgres
  • 47. FROM rails MAINTAINER Fabricio Bizotto RUN apt-get update RUN apt-get install -y nodejs RUN mkdir -p /usr/src/app2 WORKDIR /usr/src/app2 Alterando Dockerfile COPY Gemfile /usr/src/app2/ RUN bundle install COPY . /usr/src/app2 EXPOSE 3000 CMD ["rails", "server", "-b", "0.0.0.0"]
  • 48. RoR + Postgres #construindo uma imagem docker com Dockerfile, nova versão 1. docker build -t fabriciobizotto/notesapp:1.2 . # Testando a imagem 1. docker run --rm -p 3000:3000 fabriciobizotto/notesapp:1.2 2. Acesse: http://localhost:3000 # deve ocorrer um erro » Criando nossa imagem, nova versão
  • 49. Pronto! Já temos um container com uma aplicação RoR rodando e um container com o nosso banco de dados! Mas como utilizar um container dentro do outro?
  • 50. Conexão com a base de dados # configurar: config/database.yml default: &default ... host: db user: postgres password: docker
  • 51. RoR + Postgres #construindo uma imagem docker com Dockerfile, nova versão 1. docker run --rm --volume "$PWD":/usr/src/app2 -p 3000:3000 -- link db fabriciobizotto/notesapp:1.2 rails db:create db:migrate » Criando nossa imagem, nova versão
  • 52. RoR + Postgres # construindo uma imagem docker com Dockerfile, nova versão 1. docker run --rm --volume "$PWD":/usr/src/app2 -p 3000:3000 -- link db fabriciobizotto/notesapp:1.2 rails db:create db:migrate # testando 1. docker run --name web -d --volume "$PWD":/usr/src/app2 -p 3000:3000 --link db fabriciobizotto/notesapp:1.2 » Agora funciona!
  • 53. Comandos Extras # se parar o banco de dados, a aplicação não funciona 1. docker ps -a 2. docker stop db 3. docker start db » Parando/Iniciando o container
  • 54. Criando um CRUD # Com Rails, vamos criar um Scaffold 1. docker exec -it web rails g scaffold Note title:string description:text
  • 55. Criando um CRUD # Com Rails, vamos criar um Scaffold 1. docker exec -it web rails g scaffold Note title:string description:text # Com Rails, vamos criar a tabela notes 1. docker exec -it web rails db:migrate
  • 56. Configurando # Configurar a rota inicial da aplicação # config/routes Rails.application.routes.draw do resources :notes root 'notes#index' end » http://localhost:3000
  • 57. Pronto! ● Dois containers prontos e rodando! ● Já podemos inserir anotações
  • 58. Recriando os containers # Podemos remover os containers e recriá-los em qualquer lugar docker stop $(docker ps -a -q) docker rm $(docker ps -a -q)
  • 59. Recriando os containers docker run --name db -d -e POSTGRES_PASSWORD=docker -p 5432:5432 -v $HOME/docker/volumes/postgres:/var/lib/postgresql/data postgres:10 » Recriando o container db
  • 60. Recriando os containers docker run --name=web -d --volume "$PWD":/usr/src/app2 -p 3000:3000 --link db fabriciobizotto/notesapp:1.2 » Recriando o container web
  • 61. Pronto! ● Dois containers prontos e rodando! ● Já podemos inserir mais anotações
  • 62. docker-compose: Rails + Postgres Ferramenta para rodar múltiplos containers
  • 63. docker-compose # dentro do mesmo projeto, crie o seguinte arquivo » touch docker-compose.yml
  • 64. docker-compose # conteúdo do arquivo Parte 1 version: '3.6' services: db: image: postgres:10 volumes: - $HOME/docker/volumes/postgres:/var/lib/postgresql/data ports: - '5432:5432'
  • 65. docker-compose # conteúdo do arquivo Parte 2 website: depends_on: - 'db' build: . ports: - '3000:3000' volumes: - '.:/usr/src/app2' volumes: postgres:
  • 66. docker-compose # Com o arquivo configurado, basta rodar » docker-compose build » docker images, para ver nossa imagem construida
  • 67. docker-compose # Com o arquivo configurado, basta rodar » docker-compose build » docker-compose up OU docker-compose up -d » docker-compose down para parar os serviços
  • 68. docker-compose # Com o arquivo configurado, basta rodar » docker-compose build » docker-compose up OU docker-compose up -d # Podemos executar comandos rails » docker-compose run website rails g scaffold Animal name:string favorito:boolean » docker-compose run website rails db:migrate » docker-compose down para parar os serviços
  • 70. Limpando o docker » docker stop $(docker ps -a -q) » docker rm $(docker ps -a -q) -f » docker rmi $(docker images -a -q) # CUIDADO: Remove tudo » docker system prune -a
  • 71. Referências » https://docs.docker.com/ ⋄ Documentação do Docker ⋄ Dockerfile ⋄ Docker Hub ⋄ Docker compose ⋄ Instalação - MAC OS ⋄ Instalação - Windows ⋄ Instalação Linux

Notas do Editor

  1. Essencial para quem trabalha com desenvolvimento ou com infraestrutura de servidores.
  2. A empresa ia falir, então resolveram lançar o código fonte (2013) Receberam doação de $50 milhões (google, IMB, …)
  3. Nosso container possui apenas as bibliotecas e binários necessários para seu funcionamento. Por isso, são mais leves do que a virtualização tradicional.
  4. Tudo precisa ser muito bem gerenciado para não dar problema.
  5. Docker Client: é assim que você interage com seus contêineres. Interface do usuário para o Docker. Objetos Docker: Estes são seus principais componentes do Docker: seus contêineres e imagens. Daemon do Docker: Um processo em segundo plano responsável por receber comandos e transmiti-los aos contêineres via linha de comando. Registro do Docker: comumente conhecido como Docker Hub, é onde as imagens do contêiner são armazenadas e recuperadas.