SlideShare uma empresa Scribd logo
1 de 52
Orquestrando ambientes com
Docker e Kubernetes
Otávio Calaça Xavier
Rhuan Karlus Silva
1
- Professor Universitário na UFG e IFG.
- Mestre e Doutorando em Ciência da Computação - Inteligência Artificial.
- Mais de 15 anos de experiência em desenvolvimento de software.
- Pai de gêmeos.
- Engenheiro de Software na Mudano.
- Graduando em Engenharia da Computação pela UFG.
- Desenvolvedor de software desde 2012 especializado em Java e DevOps.
2
Docker
3
Entrega de Software (delivery)
4
Desafios na Gestão de Ambientes
● O desenvolvedor não tem acesso ao ambiente de Produção
(nem as suas configurações).
● Desenvolvedor não tem acesso a configuração do Jenkins,
não conhece os parâmetros de construção.
5
Desafios na Gestão de Ambientes
Erros não podem ser simulados por causa das configurações do
ambiente/aplicação.
○ Variáveis de ambiente
○ Fuso horário da máquina
○ Servidor de deploy (Tomcat/JBoss)
6
7
Vagrant, LXC e Docker
8
Vagrant
9
“Vagrant é uma ferramenta
para construir e gerenciar
ambientes de máquinas
virtuais em um único fluxo
de trabalho.”
https://www.vagrantup.com/intro/index.html
LXC
10
“LXC é uma interface para controle das
features do Linux kernel. Através de
uma API poderosa e ferramentas
simples, ele permite usuários Linux
gerenciarem o sistemas ou containers
de aplicações.”
https://linuxcontainers.org/lxc/introduction/
O que é um Container?
11
O que é um Container?
12
“Uma unidade padronizada
de Software.”
https://www.docker.com/resources/what-container
O que é um Container?
13
Então, o que é o Docker?
14
O que é o Docker?
15
“Docker é uma ferramenta feita para facilitar a construção,
deploy e execução de aplicações utilizando containers.”
https://opensource.com/resources/what-docker
O ciclo de vida do Container
16
Criando um Container
17
Containers não são criados, containers são a execução de uma
imagem!
Criando um Container
18
Containers não são criados, containers são a execução de uma
imagem!
O que é uma Imagem?
19
“Uma imagem Docker é um
arquivo composto por várias
camadas (layers) utilizadas
para executar instruções em
um Docker Container.”
https://searchitoperations.techtarget.com/definition/Docker-
image
Criando um Dockerfile para executar um app
● https://github.com/rhuankarlus/d
evfest_2019
● NodeJS
● MongoDB
● /Dockerfile
20
Construindo a nossa imagem
a partir do Dockerfile
docker build -t meu-app:latest .
21
Executando a nossa imagem a partir da imagem criada
- docker run -it --name=database mongo
- docker run -it --link=database -e NODE_ENV=docker -e SERVER_PORT=3000 -e
MONGO_DB_URL=mongodb://database/devfest -p 3000:3000 --name=app-local
meu-app
22
Executando a nossa imagem a partir da imagem criada
- docker run -it --name=database mongo
- docker run -it --link=database -e NODE_ENV=docker -e SERVER_PORT=3000 -e
MONGO_DB_URL=mongodb://database/devfest -p 3000:3000 --name=app-local
meu-app
- Quem tem acesso às configurações de execução é o ambiente e não a aplicação
23
Dockerhub e Registries
24
O que é um Registry?
25
Um Docker Registry é um armazenador e sistema de distribuição
para imagens Docker. A mesma imagem pode ter várias versões e
ser identificada por várias tags.
https://www.aquasec.com/wiki/display/containers/Docker+Registries+101
Subindo um Registry
docker run 
-d 
-p 5000:5000 
--restart always 
--name devfest-
reg 
registry
26
Subindo a imagem da nossa aplicação no Registry
● docker tag meu-app localhost:5000/meu-app-local
27
Subindo a imagem da nossa aplicação no Registry
● docker tag meu-app localhost:5000/meu-app-local
● docker push localhost:5000/meu-app-local
28
Subindo Baixando a imagem da nossa aplicação no Registry
● docker tag meu-app localhost:5000/meu-app-local
● docker push localhost:5000/meu-app-local
● docker rmi localhost:5000/meu-app-local
● docker pull localhost:5000/meu-app-local
29
Interface WEB para o Docker Registry
Neste momento temos várias
opções no mundo Docker. Escolhemos
o Portainer por ser uma interface
amigável e ter mais stars que seus
concorrentes no Github.
https://github.com/portainer/portainer
30
Subindo o Portainer
31
Guess what!
Subindo o Portainer
32
Guess what!
● docker volume create portainer_data
● docker run -d 
-p 9000:9000 -p 8000:8000 
--name portainer 
--restart always 
-v /var/run/docker.sock:/var/run/docker.sock 
-v portainer_data:/data 
portainer/portainer
O que é o Dockerhub
Docker Hub é um serviço disponibilizado pelo Docker para encontrar e compartilhar
imagens com seu time. Ele disponibiliza as seguintes features principais:
● Repositórios
● Times e Organizações
● Imagens oficiais
● Builds
● Webhooks
33
Subindo nossa aplicação no Dockerhub
34
Rodando nossa aplicação a partir do Dockerhub
35
docker run <namespace>/<imagem>
Rodando nossa aplicação a partir do Dockerhub
36
docker run rhuankarlus/devfest_2019
docker-compose
37
O que é o docker-compose
38
● Ferramenta para definir e rodar aplicações multi-container.
● Utiliza um arquivo YAML para configurar os serviços da aplicação.
● Com um único comando, todos os serviços/containers são inicializados.
https://docs.docker.com/compose/
Configurando nossa aplicação
para utilizar o Compose
Definiremos dois serviços: o banco de
dados e a aplicação. Depois linkamos
um ao outro e definimos as variáveis
passadas para dentro do container que
roda a aplicação.
39
Executando nossa aplicação com docker-compose
docker-compose up
40
Kubernetes
41
O que é o Kubernetes?
“Kubernetes é uma plataforma portável, extensível e open-source para
gerenciar cargas de trabalho e serviços em containers, que facilita a automação
e configuração declarativa”.
42
https://kubernetes.io/docs/concepts/overview/what-is-kubernetes/
Principais Conceitos do Kubernetes
43
● Nodes
● Pods
● Controllers
○ Replica Sets
○ Deployments
● Services
● Storage
Kubernetes - Ferramentas
44
● kubectl - ferramenta de linha de comando usada como cliente de um
servidor Kubernetes.
● minikube - o servidor mais simples que você pode instalar para
aprendizado.
https://kubernetes.io/docs/setup/
Kubernetes - Nodes
45
● Node é um nó, ou seja, uma
máquina, no cluster do
Kubernetes.
● kubectl get nodes
Kubernetes - Pods
46
● Pod é a menor unidade em
um cluster Kubernetes que
você pode criar ou implantar.
● kubectl get pods
● kubectl describe pod
<pod-name>
Kubernetes - Pods
47
● O kubectl trabalha com
abordagem declarativa (arquivo
yaml) ou imperativa (através de
comandos).
● kubectl run database --
image=mongo --port=27017
Kubernetes - Service
48
● Service é uma abstração que
define um conjunto lógico de Pods
e uma política pela qual o acesso a
eles é garantido.
● kubectl get service
● kubectl describe service
<service-name>
Kubernetes - Service
49
● O kubectl trabalha com abordagem
declarativa (arquivo yaml) ou
imperativa (através de comandos).
● kubectl expose pod
devfest2019 --port=300 --
name devfest2019-service
Kubernetes - ReplicaSet
50
● ReplicaSet é um recurso
para manter um conjunto
estável de replicas de um
determinado Pod.
Kubernetes - Deployments
51
● Um Deployment provê
atualizações declarativas
para Pods e ReplicaSets.
Obrigado por ter vindo!
52
● https://mundodocker.com.br -> Tudo que você precisa para aprender Docker
● https://kubernetes.io/docs/concepts/-> Documentação oficial do Kubernetes

Mais conteúdo relacionado

Mais procurados

Mais procurados (20)

O que é Docker?
O que é Docker?O que é Docker?
O que é Docker?
 
Olá docker
Olá dockerOlá docker
Olá docker
 
Introdução a Containers Docker
Introdução a Containers DockerIntrodução a Containers Docker
Introdução a Containers Docker
 
Padrōes, Especificações, Runtimes: construindo containers melhores
Padrōes, Especificações, Runtimes: construindo containers melhoresPadrōes, Especificações, Runtimes: construindo containers melhores
Padrōes, Especificações, Runtimes: construindo containers melhores
 
Docker: uma visão geral e exemplos de uso
Docker: uma visão geral e exemplos de usoDocker: uma visão geral e exemplos de uso
Docker: uma visão geral e exemplos de uso
 
Apresentação docker
Apresentação dockerApresentação docker
Apresentação docker
 
Introdução à plataforma Docker
Introdução à plataforma DockerIntrodução à plataforma Docker
Introdução à plataforma Docker
 
Docker - Básico
Docker - BásicoDocker - Básico
Docker - Básico
 
Bem vindo ao Docker
Bem vindo ao DockerBem vindo ao Docker
Bem vindo ao Docker
 
Introdução ao docker
Introdução ao dockerIntrodução ao docker
Introdução ao docker
 
Docker, facilitando a vida do desenvolvimento
Docker, facilitando a vida do desenvolvimentoDocker, facilitando a vida do desenvolvimento
Docker, facilitando a vida do desenvolvimento
 
Apresentacao docker
Apresentacao dockerApresentacao docker
Apresentacao docker
 
O que é docker?
O que é docker?O que é docker?
O que é docker?
 
Treinamento Docker Básico
Treinamento Docker BásicoTreinamento Docker Básico
Treinamento Docker Básico
 
Primeiros passos com o Docker
Primeiros passos com o DockerPrimeiros passos com o Docker
Primeiros passos com o Docker
 
Desenvolvendo com PHP e Docker
Desenvolvendo com PHP e DockerDesenvolvendo com PHP e Docker
Desenvolvendo com PHP e Docker
 
5. rodando containers docker na aws
5. rodando containers docker na aws5. rodando containers docker na aws
5. rodando containers docker na aws
 
Verdades que não querem te contar sobre Docker
Verdades que não querem te contar sobre DockerVerdades que não querem te contar sobre Docker
Verdades que não querem te contar sobre 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
 
Docker na vida real
Docker na vida realDocker na vida real
Docker na vida real
 

Semelhante a Orquestrando ambientes com docker e kubernetes

Semelhante a Orquestrando ambientes com docker e kubernetes (20)

Source-to-container no mundo real
Source-to-container no mundo realSource-to-container no mundo real
Source-to-container no mundo real
 
Docker: Uso no dia a dia de desenvolvimento
Docker: Uso no dia a dia de desenvolvimentoDocker: Uso no dia a dia de desenvolvimento
Docker: Uso no dia a dia de desenvolvimento
 
Docker para iniciantes
Docker para iniciantesDocker para iniciantes
Docker para iniciantes
 
Docker
DockerDocker
Docker
 
Introdução ao docker
Introdução ao dockerIntrodução ao docker
Introdução ao docker
 
Transportando as aplicações entre vários ambientes com Docker
Transportando as aplicações entre vários ambientes com DockerTransportando as aplicações entre vários ambientes com Docker
Transportando as aplicações entre vários ambientes com Docker
 
Docker e suas tecnologias
Docker e suas tecnologiasDocker e suas tecnologias
Docker e suas tecnologias
 
Docker e suas tecnologias por @cesarnog
Docker e suas tecnologias por @cesarnogDocker e suas tecnologias por @cesarnog
Docker e suas tecnologias por @cesarnog
 
Introdução-a-Docker-compactado.pdf
Introdução-a-Docker-compactado.pdfIntrodução-a-Docker-compactado.pdf
Introdução-a-Docker-compactado.pdf
 
Usando Docker no desenvolvimento .NET
Usando Docker no desenvolvimento .NETUsando Docker no desenvolvimento .NET
Usando Docker no desenvolvimento .NET
 
Iniciando com docker
Iniciando com dockerIniciando com docker
Iniciando com docker
 
Docker meetup
Docker meetupDocker meetup
Docker meetup
 
O poder dos microsserviços com Docker e Kubernetes
O poder dos microsserviços com Docker e KubernetesO poder dos microsserviços com Docker e Kubernetes
O poder dos microsserviços com Docker e Kubernetes
 
Desenvolvimento em .NET utilizando Docker - Meetup 8 Itu Developers
Desenvolvimento em .NET utilizando Docker - Meetup 8 Itu DevelopersDesenvolvimento em .NET utilizando Docker - Meetup 8 Itu Developers
Desenvolvimento em .NET utilizando Docker - Meetup 8 Itu Developers
 
Usp codelabs (docker)
Usp codelabs (docker)Usp codelabs (docker)
Usp codelabs (docker)
 
Docker
DockerDocker
Docker
 
Alagoas Dev Day
Alagoas Dev DayAlagoas Dev Day
Alagoas Dev Day
 
Introdução ao Docker
Introdução ao DockerIntrodução ao Docker
Introdução ao Docker
 
Deploying Docker Containers
Deploying Docker ContainersDeploying Docker Containers
Deploying Docker Containers
 
Workshop Microservices - Distribuindo os Microservices com Docker e Kubernetes
Workshop Microservices - Distribuindo os Microservices com Docker e KubernetesWorkshop Microservices - Distribuindo os Microservices com Docker e Kubernetes
Workshop Microservices - Distribuindo os Microservices com Docker e Kubernetes
 

Último

Último (6)

Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 

Orquestrando ambientes com docker e kubernetes

  • 1. Orquestrando ambientes com Docker e Kubernetes Otávio Calaça Xavier Rhuan Karlus Silva 1
  • 2. - Professor Universitário na UFG e IFG. - Mestre e Doutorando em Ciência da Computação - Inteligência Artificial. - Mais de 15 anos de experiência em desenvolvimento de software. - Pai de gêmeos. - Engenheiro de Software na Mudano. - Graduando em Engenharia da Computação pela UFG. - Desenvolvedor de software desde 2012 especializado em Java e DevOps. 2
  • 4. Entrega de Software (delivery) 4
  • 5. Desafios na Gestão de Ambientes ● O desenvolvedor não tem acesso ao ambiente de Produção (nem as suas configurações). ● Desenvolvedor não tem acesso a configuração do Jenkins, não conhece os parâmetros de construção. 5
  • 6. Desafios na Gestão de Ambientes Erros não podem ser simulados por causa das configurações do ambiente/aplicação. ○ Variáveis de ambiente ○ Fuso horário da máquina ○ Servidor de deploy (Tomcat/JBoss) 6
  • 7. 7
  • 8. Vagrant, LXC e Docker 8
  • 9. Vagrant 9 “Vagrant é uma ferramenta para construir e gerenciar ambientes de máquinas virtuais em um único fluxo de trabalho.” https://www.vagrantup.com/intro/index.html
  • 10. LXC 10 “LXC é uma interface para controle das features do Linux kernel. Através de uma API poderosa e ferramentas simples, ele permite usuários Linux gerenciarem o sistemas ou containers de aplicações.” https://linuxcontainers.org/lxc/introduction/
  • 11. O que é um Container? 11
  • 12. O que é um Container? 12 “Uma unidade padronizada de Software.” https://www.docker.com/resources/what-container
  • 13. O que é um Container? 13
  • 14. Então, o que é o Docker? 14
  • 15. O que é o Docker? 15 “Docker é uma ferramenta feita para facilitar a construção, deploy e execução de aplicações utilizando containers.” https://opensource.com/resources/what-docker
  • 16. O ciclo de vida do Container 16
  • 17. Criando um Container 17 Containers não são criados, containers são a execução de uma imagem!
  • 18. Criando um Container 18 Containers não são criados, containers são a execução de uma imagem!
  • 19. O que é uma Imagem? 19 “Uma imagem Docker é um arquivo composto por várias camadas (layers) utilizadas para executar instruções em um Docker Container.” https://searchitoperations.techtarget.com/definition/Docker- image
  • 20. Criando um Dockerfile para executar um app ● https://github.com/rhuankarlus/d evfest_2019 ● NodeJS ● MongoDB ● /Dockerfile 20
  • 21. Construindo a nossa imagem a partir do Dockerfile docker build -t meu-app:latest . 21
  • 22. Executando a nossa imagem a partir da imagem criada - docker run -it --name=database mongo - docker run -it --link=database -e NODE_ENV=docker -e SERVER_PORT=3000 -e MONGO_DB_URL=mongodb://database/devfest -p 3000:3000 --name=app-local meu-app 22
  • 23. Executando a nossa imagem a partir da imagem criada - docker run -it --name=database mongo - docker run -it --link=database -e NODE_ENV=docker -e SERVER_PORT=3000 -e MONGO_DB_URL=mongodb://database/devfest -p 3000:3000 --name=app-local meu-app - Quem tem acesso às configurações de execução é o ambiente e não a aplicação 23
  • 25. O que é um Registry? 25 Um Docker Registry é um armazenador e sistema de distribuição para imagens Docker. A mesma imagem pode ter várias versões e ser identificada por várias tags. https://www.aquasec.com/wiki/display/containers/Docker+Registries+101
  • 26. Subindo um Registry docker run -d -p 5000:5000 --restart always --name devfest- reg registry 26
  • 27. Subindo a imagem da nossa aplicação no Registry ● docker tag meu-app localhost:5000/meu-app-local 27
  • 28. Subindo a imagem da nossa aplicação no Registry ● docker tag meu-app localhost:5000/meu-app-local ● docker push localhost:5000/meu-app-local 28
  • 29. Subindo Baixando a imagem da nossa aplicação no Registry ● docker tag meu-app localhost:5000/meu-app-local ● docker push localhost:5000/meu-app-local ● docker rmi localhost:5000/meu-app-local ● docker pull localhost:5000/meu-app-local 29
  • 30. Interface WEB para o Docker Registry Neste momento temos várias opções no mundo Docker. Escolhemos o Portainer por ser uma interface amigável e ter mais stars que seus concorrentes no Github. https://github.com/portainer/portainer 30
  • 32. Subindo o Portainer 32 Guess what! ● docker volume create portainer_data ● docker run -d -p 9000:9000 -p 8000:8000 --name portainer --restart always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer
  • 33. O que é o Dockerhub Docker Hub é um serviço disponibilizado pelo Docker para encontrar e compartilhar imagens com seu time. Ele disponibiliza as seguintes features principais: ● Repositórios ● Times e Organizações ● Imagens oficiais ● Builds ● Webhooks 33
  • 34. Subindo nossa aplicação no Dockerhub 34
  • 35. Rodando nossa aplicação a partir do Dockerhub 35 docker run <namespace>/<imagem>
  • 36. Rodando nossa aplicação a partir do Dockerhub 36 docker run rhuankarlus/devfest_2019
  • 38. O que é o docker-compose 38 ● Ferramenta para definir e rodar aplicações multi-container. ● Utiliza um arquivo YAML para configurar os serviços da aplicação. ● Com um único comando, todos os serviços/containers são inicializados. https://docs.docker.com/compose/
  • 39. Configurando nossa aplicação para utilizar o Compose Definiremos dois serviços: o banco de dados e a aplicação. Depois linkamos um ao outro e definimos as variáveis passadas para dentro do container que roda a aplicação. 39
  • 40. Executando nossa aplicação com docker-compose docker-compose up 40
  • 42. O que é o Kubernetes? “Kubernetes é uma plataforma portável, extensível e open-source para gerenciar cargas de trabalho e serviços em containers, que facilita a automação e configuração declarativa”. 42 https://kubernetes.io/docs/concepts/overview/what-is-kubernetes/
  • 43. Principais Conceitos do Kubernetes 43 ● Nodes ● Pods ● Controllers ○ Replica Sets ○ Deployments ● Services ● Storage
  • 44. Kubernetes - Ferramentas 44 ● kubectl - ferramenta de linha de comando usada como cliente de um servidor Kubernetes. ● minikube - o servidor mais simples que você pode instalar para aprendizado. https://kubernetes.io/docs/setup/
  • 45. Kubernetes - Nodes 45 ● Node é um nó, ou seja, uma máquina, no cluster do Kubernetes. ● kubectl get nodes
  • 46. Kubernetes - Pods 46 ● Pod é a menor unidade em um cluster Kubernetes que você pode criar ou implantar. ● kubectl get pods ● kubectl describe pod <pod-name>
  • 47. Kubernetes - Pods 47 ● O kubectl trabalha com abordagem declarativa (arquivo yaml) ou imperativa (através de comandos). ● kubectl run database -- image=mongo --port=27017
  • 48. Kubernetes - Service 48 ● Service é uma abstração que define um conjunto lógico de Pods e uma política pela qual o acesso a eles é garantido. ● kubectl get service ● kubectl describe service <service-name>
  • 49. Kubernetes - Service 49 ● O kubectl trabalha com abordagem declarativa (arquivo yaml) ou imperativa (através de comandos). ● kubectl expose pod devfest2019 --port=300 -- name devfest2019-service
  • 50. Kubernetes - ReplicaSet 50 ● ReplicaSet é um recurso para manter um conjunto estável de replicas de um determinado Pod.
  • 51. Kubernetes - Deployments 51 ● Um Deployment provê atualizações declarativas para Pods e ReplicaSets.
  • 52. Obrigado por ter vindo! 52 ● https://mundodocker.com.br -> Tudo que você precisa para aprender Docker ● https://kubernetes.io/docs/concepts/-> Documentação oficial do Kubernetes