SlideShare uma empresa Scribd logo
1 de 71
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...
» 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
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

Apresentação Docker
Apresentação DockerApresentação Docker
Apresentação DockerAndré Justi
 
Docker Explained | What Is A Docker Container? | Docker Simplified | Docker T...
Docker Explained | What Is A Docker Container? | Docker Simplified | Docker T...Docker Explained | What Is A Docker Container? | Docker Simplified | Docker T...
Docker Explained | What Is A Docker Container? | Docker Simplified | Docker T...Edureka!
 
Kubernetes walkthrough
Kubernetes walkthroughKubernetes walkthrough
Kubernetes walkthroughSangwon Lee
 
Introduction to docker
Introduction to dockerIntroduction to docker
Introduction to dockerInstruqt
 
Docker introduction & benefits
Docker introduction & benefitsDocker introduction & benefits
Docker introduction & benefitsAmit Manwade
 
Docker and the Linux Kernel
Docker and the Linux KernelDocker and the Linux Kernel
Docker and the Linux KernelDocker, Inc.
 
Docker Registry V2
Docker Registry V2Docker Registry V2
Docker Registry V2Docker, Inc.
 
Docker: From Zero to Hero
Docker: From Zero to HeroDocker: From Zero to Hero
Docker: From Zero to Herofazalraja
 
Alphorm.com Formation Docker (1/2) : Installation et Administration
Alphorm.com Formation Docker (1/2) : Installation et AdministrationAlphorm.com Formation Docker (1/2) : Installation et Administration
Alphorm.com Formation Docker (1/2) : Installation et AdministrationAlphorm
 
Introduction of cloud native CI/CD on kubernetes
Introduction of cloud native CI/CD on kubernetesIntroduction of cloud native CI/CD on kubernetes
Introduction of cloud native CI/CD on kubernetesKyohei Mizumoto
 
Introduction to Docker - 2017
Introduction to Docker - 2017Introduction to Docker - 2017
Introduction to Docker - 2017Docker, Inc.
 
Docker Introduction
Docker IntroductionDocker Introduction
Docker IntroductionPeng Xiao
 
Installing and running Postfix within a docker container from the command line
Installing and running Postfix within a docker container from the command lineInstalling and running Postfix within a docker container from the command line
Installing and running Postfix within a docker container from the command linedotCloud
 

Mais procurados (20)

Intro To Docker
Intro To DockerIntro To Docker
Intro To Docker
 
Apresentação Docker
Apresentação DockerApresentação Docker
Apresentação Docker
 
Docker Explained | What Is A Docker Container? | Docker Simplified | Docker T...
Docker Explained | What Is A Docker Container? | Docker Simplified | Docker T...Docker Explained | What Is A Docker Container? | Docker Simplified | Docker T...
Docker Explained | What Is A Docker Container? | Docker Simplified | Docker T...
 
Docker
DockerDocker
Docker
 
Kubernetes walkthrough
Kubernetes walkthroughKubernetes walkthrough
Kubernetes walkthrough
 
Introduction to docker
Introduction to dockerIntroduction to docker
Introduction to docker
 
Introduction to Docker
Introduction to DockerIntroduction to Docker
Introduction to Docker
 
Docker introduction & benefits
Docker introduction & benefitsDocker introduction & benefits
Docker introduction & benefits
 
Docker and the Linux Kernel
Docker and the Linux KernelDocker and the Linux Kernel
Docker and the Linux Kernel
 
Docker Registry V2
Docker Registry V2Docker Registry V2
Docker Registry V2
 
Docker: From Zero to Hero
Docker: From Zero to HeroDocker: From Zero to Hero
Docker: From Zero to Hero
 
Docker on Docker
Docker on DockerDocker on Docker
Docker on Docker
 
Apresentacao docker
Apresentacao dockerApresentacao docker
Apresentacao docker
 
Dockerfile
Dockerfile Dockerfile
Dockerfile
 
Alphorm.com Formation Docker (1/2) : Installation et Administration
Alphorm.com Formation Docker (1/2) : Installation et AdministrationAlphorm.com Formation Docker (1/2) : Installation et Administration
Alphorm.com Formation Docker (1/2) : Installation et Administration
 
What is Docker
What is DockerWhat is Docker
What is Docker
 
Introduction of cloud native CI/CD on kubernetes
Introduction of cloud native CI/CD on kubernetesIntroduction of cloud native CI/CD on kubernetes
Introduction of cloud native CI/CD on kubernetes
 
Introduction to Docker - 2017
Introduction to Docker - 2017Introduction to Docker - 2017
Introduction to Docker - 2017
 
Docker Introduction
Docker IntroductionDocker Introduction
Docker Introduction
 
Installing and running Postfix within a docker container from the command line
Installing and running Postfix within a docker container from the command lineInstalling and running Postfix within a docker container from the command line
Installing and running Postfix within a docker container from the command line
 

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 dockerRafael Gomes
 
Introdução ao docker
Introdução ao dockerIntrodução ao docker
Introdução ao dockerBenicio Ávila
 
Talk no Meetup LaravelSP #3
Talk no Meetup LaravelSP #3Talk no Meetup LaravelSP #3
Talk no Meetup LaravelSP #3Wellington Silva
 
Docker - Tutorial for beginners
Docker - Tutorial for beginnersDocker - Tutorial for beginners
Docker - Tutorial for beginnersRafael Chiavegatto
 
Introdução ao Docker
Introdução ao DockerIntrodução ao Docker
Introdução ao DockerRafael 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 DockerBruno Ricardo Siqueira
 
Introdução-a-Docker-compactado.pdf
Introdução-a-Docker-compactado.pdfIntrodução-a-Docker-compactado.pdf
Introdução-a-Docker-compactado.pdfdadalt1
 
Mundo mágico de Docker
Mundo mágico de DockerMundo mágico de Docker
Mundo mágico de DockerDANIEL SILVA
 
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 escalargustavomtborges
 
Docker - Essa baleia vai te conquistar
Docker - Essa baleia vai te conquistarDocker - Essa baleia vai te conquistar
Docker - Essa baleia vai te conquistarViní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 bolsoDiogo Lucas
 
Dockerizando aplicações em uma Fintech
Dockerizando aplicações em uma FintechDockerizando aplicações em uma Fintech
Dockerizando aplicações em uma FintechRafael 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

1. Aula de sociologia - 1º Ano - Émile Durkheim.pdf
1. Aula de sociologia - 1º Ano - Émile Durkheim.pdf1. Aula de sociologia - 1º Ano - Émile Durkheim.pdf
1. Aula de sociologia - 1º Ano - Émile Durkheim.pdfaulasgege
 
FUNDAMENTOS DA PSICOPEDAGOGIA - material
FUNDAMENTOS DA PSICOPEDAGOGIA - materialFUNDAMENTOS DA PSICOPEDAGOGIA - material
FUNDAMENTOS DA PSICOPEDAGOGIA - materialDouglasVasconcelosMa
 
UFCD_10659_Ficheiros de recursos educativos_índice .pdf
UFCD_10659_Ficheiros de recursos educativos_índice .pdfUFCD_10659_Ficheiros de recursos educativos_índice .pdf
UFCD_10659_Ficheiros de recursos educativos_índice .pdfManuais Formação
 
Aspectos históricos da educação dos surdos.pptx
Aspectos históricos da educação dos surdos.pptxAspectos históricos da educação dos surdos.pptx
Aspectos históricos da educação dos surdos.pptxprofbrunogeo95
 
Tema de redação - A prática do catfish e seus perigos.pdf
Tema de redação - A prática do catfish e seus perigos.pdfTema de redação - A prática do catfish e seus perigos.pdf
Tema de redação - A prática do catfish e seus perigos.pdfAnaAugustaLagesZuqui
 
Edital do processo seletivo para contratação de agentes de saúde em Floresta, PE
Edital do processo seletivo para contratação de agentes de saúde em Floresta, PEEdital do processo seletivo para contratação de agentes de saúde em Floresta, PE
Edital do processo seletivo para contratação de agentes de saúde em Floresta, PEblogdoelvis
 
Periodo da escravidAo O Brasil tem seu corpo na América e sua alma na África
Periodo da escravidAo O Brasil tem seu corpo na América e sua alma na ÁfricaPeriodo da escravidAo O Brasil tem seu corpo na América e sua alma na África
Periodo da escravidAo O Brasil tem seu corpo na América e sua alma na Áfricajuekfuek
 
Modelos de Inteligencia Emocional segundo diversos autores
Modelos de Inteligencia Emocional segundo diversos autoresModelos de Inteligencia Emocional segundo diversos autores
Modelos de Inteligencia Emocional segundo diversos autoresAna Isabel Correia
 
O que é, de facto, a Educação de Infância
O que é, de facto, a Educação de InfânciaO que é, de facto, a Educação de Infância
O que é, de facto, a Educação de InfânciaHenrique Santos
 
"Nós Propomos! Escola Secundária em Pedrógão Grande"
"Nós Propomos! Escola Secundária em Pedrógão Grande""Nós Propomos! Escola Secundária em Pedrógão Grande"
"Nós Propomos! Escola Secundária em Pedrógão Grande"Ilda Bicacro
 
Formação T.2 do Modulo I da Formação HTML & CSS
Formação T.2 do Modulo I da Formação HTML & CSSFormação T.2 do Modulo I da Formação HTML & CSS
Formação T.2 do Modulo I da Formação HTML & CSSPedroMatos469278
 
APRENDA COMO USAR CONJUNÇÕES COORDENATIVAS
APRENDA COMO USAR CONJUNÇÕES COORDENATIVASAPRENDA COMO USAR CONJUNÇÕES COORDENATIVAS
APRENDA COMO USAR CONJUNÇÕES COORDENATIVASricardo644666
 
472037515-Coelho-Nelly-Novaes-Literatura-Infantil-teoria-analise-e-didatica-p...
472037515-Coelho-Nelly-Novaes-Literatura-Infantil-teoria-analise-e-didatica-p...472037515-Coelho-Nelly-Novaes-Literatura-Infantil-teoria-analise-e-didatica-p...
472037515-Coelho-Nelly-Novaes-Literatura-Infantil-teoria-analise-e-didatica-p...GisellySobral
 
5. EJEMPLOS DE ESTRUCTURASQUINTO GRADO.pptx
5. EJEMPLOS DE ESTRUCTURASQUINTO GRADO.pptx5. EJEMPLOS DE ESTRUCTURASQUINTO GRADO.pptx
5. EJEMPLOS DE ESTRUCTURASQUINTO GRADO.pptxnelsontobontrujillo
 
As teorias de Lamarck e Darwin para alunos de 8ano.ppt
As teorias de Lamarck e Darwin para alunos de 8ano.pptAs teorias de Lamarck e Darwin para alunos de 8ano.ppt
As teorias de Lamarck e Darwin para alunos de 8ano.pptorlando dias da silva
 
ATIVIDADE 1 - ENF - ENFERMAGEM BASEADA EM EVIDÊNCIAS - 52_2024
ATIVIDADE 1 - ENF - ENFERMAGEM BASEADA EM EVIDÊNCIAS - 52_2024ATIVIDADE 1 - ENF - ENFERMAGEM BASEADA EM EVIDÊNCIAS - 52_2024
ATIVIDADE 1 - ENF - ENFERMAGEM BASEADA EM EVIDÊNCIAS - 52_2024azulassessoria9
 
UFCD_8291_Preparação e confeção de peixes e mariscos_índice.pdf
UFCD_8291_Preparação e confeção de peixes e mariscos_índice.pdfUFCD_8291_Preparação e confeção de peixes e mariscos_índice.pdf
UFCD_8291_Preparação e confeção de peixes e mariscos_índice.pdfManuais Formação
 

Último (20)

1. Aula de sociologia - 1º Ano - Émile Durkheim.pdf
1. Aula de sociologia - 1º Ano - Émile Durkheim.pdf1. Aula de sociologia - 1º Ano - Émile Durkheim.pdf
1. Aula de sociologia - 1º Ano - Émile Durkheim.pdf
 
FUNDAMENTOS DA PSICOPEDAGOGIA - material
FUNDAMENTOS DA PSICOPEDAGOGIA - materialFUNDAMENTOS DA PSICOPEDAGOGIA - material
FUNDAMENTOS DA PSICOPEDAGOGIA - material
 
662938.pdf aula digital de educação básica
662938.pdf aula digital de educação básica662938.pdf aula digital de educação básica
662938.pdf aula digital de educação básica
 
UFCD_10659_Ficheiros de recursos educativos_índice .pdf
UFCD_10659_Ficheiros de recursos educativos_índice .pdfUFCD_10659_Ficheiros de recursos educativos_índice .pdf
UFCD_10659_Ficheiros de recursos educativos_índice .pdf
 
Aspectos históricos da educação dos surdos.pptx
Aspectos históricos da educação dos surdos.pptxAspectos históricos da educação dos surdos.pptx
Aspectos históricos da educação dos surdos.pptx
 
Tema de redação - A prática do catfish e seus perigos.pdf
Tema de redação - A prática do catfish e seus perigos.pdfTema de redação - A prática do catfish e seus perigos.pdf
Tema de redação - A prática do catfish e seus perigos.pdf
 
Edital do processo seletivo para contratação de agentes de saúde em Floresta, PE
Edital do processo seletivo para contratação de agentes de saúde em Floresta, PEEdital do processo seletivo para contratação de agentes de saúde em Floresta, PE
Edital do processo seletivo para contratação de agentes de saúde em Floresta, PE
 
Periodo da escravidAo O Brasil tem seu corpo na América e sua alma na África
Periodo da escravidAo O Brasil tem seu corpo na América e sua alma na ÁfricaPeriodo da escravidAo O Brasil tem seu corpo na América e sua alma na África
Periodo da escravidAo O Brasil tem seu corpo na América e sua alma na África
 
Modelos de Inteligencia Emocional segundo diversos autores
Modelos de Inteligencia Emocional segundo diversos autoresModelos de Inteligencia Emocional segundo diversos autores
Modelos de Inteligencia Emocional segundo diversos autores
 
O que é, de facto, a Educação de Infância
O que é, de facto, a Educação de InfânciaO que é, de facto, a Educação de Infância
O que é, de facto, a Educação de Infância
 
"Nós Propomos! Escola Secundária em Pedrógão Grande"
"Nós Propomos! Escola Secundária em Pedrógão Grande""Nós Propomos! Escola Secundária em Pedrógão Grande"
"Nós Propomos! Escola Secundária em Pedrógão Grande"
 
Formação T.2 do Modulo I da Formação HTML & CSS
Formação T.2 do Modulo I da Formação HTML & CSSFormação T.2 do Modulo I da Formação HTML & CSS
Formação T.2 do Modulo I da Formação HTML & CSS
 
APRENDA COMO USAR CONJUNÇÕES COORDENATIVAS
APRENDA COMO USAR CONJUNÇÕES COORDENATIVASAPRENDA COMO USAR CONJUNÇÕES COORDENATIVAS
APRENDA COMO USAR CONJUNÇÕES COORDENATIVAS
 
472037515-Coelho-Nelly-Novaes-Literatura-Infantil-teoria-analise-e-didatica-p...
472037515-Coelho-Nelly-Novaes-Literatura-Infantil-teoria-analise-e-didatica-p...472037515-Coelho-Nelly-Novaes-Literatura-Infantil-teoria-analise-e-didatica-p...
472037515-Coelho-Nelly-Novaes-Literatura-Infantil-teoria-analise-e-didatica-p...
 
5. EJEMPLOS DE ESTRUCTURASQUINTO GRADO.pptx
5. EJEMPLOS DE ESTRUCTURASQUINTO GRADO.pptx5. EJEMPLOS DE ESTRUCTURASQUINTO GRADO.pptx
5. EJEMPLOS DE ESTRUCTURASQUINTO GRADO.pptx
 
As teorias de Lamarck e Darwin para alunos de 8ano.ppt
As teorias de Lamarck e Darwin para alunos de 8ano.pptAs teorias de Lamarck e Darwin para alunos de 8ano.ppt
As teorias de Lamarck e Darwin para alunos de 8ano.ppt
 
ATIVIDADE 1 - ENF - ENFERMAGEM BASEADA EM EVIDÊNCIAS - 52_2024
ATIVIDADE 1 - ENF - ENFERMAGEM BASEADA EM EVIDÊNCIAS - 52_2024ATIVIDADE 1 - ENF - ENFERMAGEM BASEADA EM EVIDÊNCIAS - 52_2024
ATIVIDADE 1 - ENF - ENFERMAGEM BASEADA EM EVIDÊNCIAS - 52_2024
 
UFCD_8291_Preparação e confeção de peixes e mariscos_índice.pdf
UFCD_8291_Preparação e confeção de peixes e mariscos_índice.pdfUFCD_8291_Preparação e confeção de peixes e mariscos_índice.pdf
UFCD_8291_Preparação e confeção de peixes e mariscos_índice.pdf
 
Poema - Maio Laranja
Poema - Maio Laranja Poema - Maio Laranja
Poema - Maio Laranja
 
Poema - Aedes Aegypt.
Poema - Aedes Aegypt.Poema - Aedes Aegypt.
Poema - Aedes Aegypt.
 

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...
  • 5.
  • 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.
  • 14.
  • 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.