SlideShare uma empresa Scribd logo
1 de 63
Workshop Microservices
Distribuindo os microservices com
Docker e Kubernetes
Objetivos
Ao final desta unidade você irá:
• Compreender como empacotar os projetos de micro
services com Docker
• Publicar imagens em repositórios Docker
• Compor um grupo de imagens Docker em uma
arquitetura de microservices com Docker Compose
• Orquestrar a arquitetura de microservices com
Kubernetes
Agenda
• Containers
• Docker
• Docker Registry
• Docker Compose
• Kubernetes
Deployment
Deployment
• Multiple services per host
Deployment
• Service instances per VM
Deployment
• Service instances per Container
Containers vs Virtualization
Virtualization Container
• Minutos para iniciar uma VM, e… segundos para iniciar um
container
Docker
Docker engine Docker Hub
“Open platform for building, shipping and
running distributed applications"
Docker
• Versão
• Community Edition (CE) - Free
• Enterprise Edition (EE) - Pago
• Basic, Standard, Advanced
• https://www.docker.com/pricing
Docker
• Instalação
• Native
• Windows
• https://docs.docker.com/docker-for-windows/install/
• Mac
• https://docs.docker.com/docker-for-mac/install/
• Ubuntu / Debian / Fedora
• https://docs.docker.com/engine/installation/linux/docker-ce/ubuntu/
• https://docs.docker.com/engine/installation/linux/docker-ce/debian/
• https://docs.docker.com/engine/installation/linux/docker-ce/fedora/
• Toolbox
• Windows
• https://docs.docker.com/toolbox/toolbox_install_windows/
• Mac
• https://docs.docker.com/toolbox/toolbox_install_mac/
Docker
Docker
• Principais comandos
• docker run
• Roda um determinado container
• docker build
• Constrói novas imagens a partir de um Dockerfile
• docker ps
• Lista todos os containers em execução
• docker start
• Inicia um determinado container já executado anteriormente
• docker stop
• Finaliza um container em execução
• docker rm
• Remove um determinado container da máquina
Docker
• Principais comandos
• docker rmi
• Remove uma determinada image da máquina
• docker tag
• Cria uma tag para uma determinada imagem
• docker login
• Realiza uma sessão de login em um determinado Docker repo privado
• docker pull
• Busca uma imagem pré-construído de um Docker repo publico
• docker logs
• Verifica os logs de execução de um determinado container
• docker commit
• Salva o estado de um container como uma imagem
Docker
• Principais comandos
• docker diff
• Lista as mudanças em arquivos e diretórios
• docker images
• Lista todas as imagens disponíveis no Docker repo local
• docker inspect
• Inspeciona informações sobre containers e imagens
• docker attach
• Interage com containers em execução
• docker kill
• Finaliza o processo de execução de um determinado container
Dockerfile
# Use an official Python runtime as a parent image
FROM python:2.7-slim
# Set the working directory to /app
WORKDIR /app
# Copy the current directory contents into the container at /app
ADD . /app
# Install any needed packages specified in requirements.txt
RUN pip install -r requirements.txt
# Make port 80 available to the world outside this container
EXPOSE 80
# Define environment variable
ENV NAME World
# Run app.py when the container launches
CMD ["python", "app.py"]
Docker
• Exemplo de utilização
• docker build -t friendlyhello.
• docker images
REPOSITORY TAG IMAGE ID
friendlyhello latest 326387cea398
• docker run -p 4000:80 friendlyhello
• docker run -d -p 4000:80 friendlyhello
• docker ps
CONTAINER ID IMAGE COMMAND CREATED
1fa4ab2cf395 friendlyhello "python app.py" 28 seconds ago
• docker stop 1fa4ab2cf395
• docker rm 1fa4ab2cf395
• docker rmi friendlyhello
Docker
• Integração com Maven
• docker-maven-plugin (Spotify)
• https://github.com/spotify/docker-maven-plugin
• mvn clean package docker:build
• mvn … docker:build -DpushImageTags -DdockerImageTags=latest
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.13</version>
<configuration>
<imageName>${project.groupId}/${project.artifactId}</imageName>
<dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
Laboratório 1 (docker-lab01)
• Empacote os projetos de microservices com
Docker
Docker Registry
Docker Registry
Nexus
• Repositório de artefatos opensource
• Maven, Bower, Npm, Rubygems, Pypl, Nuget, Docker
• Popularmente utilizado para projetos Maven
• Fornece uma interface Web de administração
• Suporta repositórios Docker
• A partir da versão 3.x
Nexus
Docker Registry
• Exemplo de push de imagens no Nexus
• docker build -t friendlyhello.
• docker login -u user -p pass nexus-ip:8081
Login Succeeded
• docker tag friendlyhello nexus-ip:8081/friendlyhello
• docker push nexus-ip:8081/friendlyhello
The push refers to a repository [nexus-ip:18081/friendlyhello]
2261473fba2b: Preparing
ce6c8756685b: Waiting
2261473fba2b: Pushed
qa: digest: sha256:f64205d492c2f3b15a1b6c146b36e493ec764c7e2cc330 size: 2424
Docker Registry
• Exemplo de pull de imagens no Nexus
• docker login -u user -p pass nexus-ip:8081
Login Succeeded
• docker pull nexus-ip:8081/friendlyhello
latest: Pulling from amazonlinux
8e3fa21c4cc4: Pull complete
Digest:
sha256:59895a93ba4345e238926c0f4f4a3969b1ec5aa0a291a182816a4630c62df769
• docker run -d -p 4000:80 friendlyhello
• docker ps
CONTAINER ID IMAGE COMMAND CREATED
1fa4ab2cf395 friendlyhello "python app.py" 28 seconds ago
Laboratório 2 (docker-lab02)
• Publique as imagens Docker dos microservices
no Nexus
Docker Compose
• Define um agrupamento de containers em uma única
definição
• Configuração centralizada em um único arquivo
• docker-compose.yml
• Define dependências entre containers
• Fornece mecanismo de service discovery
• Embedded Docker DNS
• Permite mapear
• Portas, volumes, variáveis, etc
Docker Compose
• docker-compose.yml
Docker Compose
Docker Compose
• Principais comandos
• docker-compose pull
• Buscar a lista de images definidas pela composição em um repo
público
• docker-compose logs
• Verificar os logs de execução dos containers definidos na
composição
• docker-compose build
• Construir as imagens definidas pela composição
• docker-compose up
• Criar e iniciar os containers definidos pela composição
• docker-compose down
• Destruir os containers definidos pela composição
Docker Compose
• Principais comandos
• docker-compose start
• Iniciar os containers definidos pela composição
• docker-compose stop
• Parar os containers definidos pela composição
• docker-compose restart
• Reiniciar os containers definidos pela composição
• docker-compose run
• Rodar um comando em um serviço definido pela composição
• docker-compose exec
• Rodar um comando em um container em execução
• docker-compose kill
• Finalizar um container em execução definido pela composição
Microservices Compose
Microservices Compose
version: '2'
services:
config-server:
image: microservices/config-server:latest
mem_limit: 1073741824 # RAM 1GB
environment:
- SPRING_PROFILES_ACTIVE=${PROFILE}
expose:
- "8888"
ports:
- "8888:8888"
networks:
- microservices
eureka-server:
image: microservices/eureka-server:latest
mem_limit: 1073741824 # RAM 1GB
environment:
- SPRING_PROFILES_ACTIVE=${PROFILE}
links:
- config-server
expose:
- "8761"
ports:
- "8761:8761"
networks:
- microservices
...
• docker-compose up
• docker-compose stop
• docker-compose start
• docker-compose down
Laboratório 3 (docker-lab03)
• Componha a arquitetura de microservices
utilizando Docker Compose
Orquestração
• Gerenciamento da comunicação dos serviços em containers
diferentes
Ferramentas
AWS ECS
Kubernetes
• Ferramenta para orquestração de containers
• Suporta múltiplos ambientes cloud
• É possível rodar localmente
• Suporta múltiplos containers runtime
• 100% open source, escrito em Go
• Eficiente, Portável, Extensível, …
Kubernetes
• High-level Overview
Kubernetes
• Clustering Model
Kubernetes
• Instalação Local
• VirtualBox
• https://www.virtualbox.org/wiki/Downloads
• Vagrant
• https://www.vagrantup.com/
• Minikube
• https://github.com/kubernetes/minikube
• Kubeclt
• https://kubernetes.io/docs/tasks/tools/install-kubectl/
• Outras alternativas
• https://kubernetes.io/docs/setup/pick-right-solution/
Vagrant
• Permite a criação de ambientes de desenvolvimento, automatizando
a geração de máquina virtual
• VMs são criadas a partir de imagens denominadas Boxes
• Suporta VirtualBox, VMWare, Hyper-V e outros
• Instalação e download
• https://www.vagrantup.com/downloads.html
• Principais comandos
• vagrant init [box]
• vagrant up
• vagrant halt
• vagrant destroy
• vagrant reload
• vagrant ssh
• vagrant status
Minikube
• Uma opção para rodar Kubernetes localmente
• https://github.com/kubernetes/minikube
• Principais comandos
• minikube start
• Cria e inicia o Kubernetes cluster
• minikube stop
• Desliga o Kubernetes cluster
• minikube dashboard
• Acessa o Kubernetes dashboard
• minikube ssh -v 7
• Acesso via SSH no Kubernetes cluster
• minikube service [name]
• Acessa um serviço disponibilizado pelo Kubernetes cluster
• minikube ip
• Verifica o ip de acesso para o Kubernetes cluster
Minikube Dashboard
Kubectl CLI
• Utilitário para executar comandos no Kubernetes cluster
• https://kubernetes.io/docs/user-guide/kubectl-overview/
• Principais comandos
• kubectl get pods / deployments
• kubectl create -f [filename]
• kubectl run [name] —image=[imagename]
• kubectl logs [name]
• kubectl update [name]
• kubectl delete [name]
• kubectl resize
• kubectl expose
• kubectl describe
Laboratório 4 (docker-lab04)
• Realize a instalação do Kubernetes cluster na sua
máquina local
Kubernetes
• Pods
• Representa um container em
execução
• Pode agrupar múltiplos containers
• Define um host lógico no
cluster
• Cada Pod recebe um IP
• Evita o conflito de portas
• Comunicam-se entre si sem
precisar de NAT
10.1.2.0/24
10.1.1.0/24
10.1.1.211 10.1.1.2
10.1.2.106
10.1.3.0/24
10.1.3.4510.1.3.17
10.1.3.0/24
Kubernetes
• Pods
• Para rodar um Pod
• kubectl run app --image=app/image --port=8080
• kubectl create -f pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: wildfly-pod
labels:
name: wildfly-pod
spec:
containers:
- name: wildfly
image: jboss/wildfly:10.1.0.Final
ports:
- containerPort: 8080
pod.yaml
Kubernetes
• Services
• Um agrupamento lógico de Pods que
realizam uma mesma função
• Define o conceito de load balancer
• A escolha do Pod é randômica mas
suporta afinidade por session
• Stick session
• Disponibiliza um IP e porta virtual
• Também um DNS name
Client
Pod
Container
Pod
Container
Pod
ContainerContainer
Service
Label	selector:
type	=	FE
VIP
type	=	FE type	=	FE type	=	FE
Kubernetes
• Services
• Para criar um novo Service
• kubectl expose [type] —name=[name] 
--port=[port] —target-port=[port]
• kubectl create -f service.yaml
apiVersion: v1
kind: Service
metadata:
name: wildfly-service
spec:
selector:
app: wildfly-rc-pod
ports:
- name: web
port: 8080
service.yaml
Kubernetes
• Labels
• Simples definição de key=value
• Pode ser associado a qualquer componente
• Pods, Replication Controllers, Services, Deployment, …
• Ajuda no processo de organização do cluster
• Utilizado em conjunto com selectors
• Exemplos
• release=stable, release=canary
• environment=dev, environment=qa
Kubernetes
• Replication Controlles
• Configura o número de réplicas de um determinado pod
• Assegura que um número desejado de pods encontram-se
em execução
• Pode ter a execução agendada
• Suporta configuração por definição de label
• Replica Sets
• Nova geração de Replication Controllers
Replication	
Controller
Pod
Pod
frontend
Pod
frontend
Pod Pod
Replication	
Controller
#pods	=	1
version	=	v2
show:	version	=	v2
version=	v1 version	=	v1 version	=	v2
Replication	
Controller
#pods	=	2
version	=	v1
Kubernetes
• Replication Controlles
• Para criar um novo Replication Controller
• kubectl create -f replication.yaml
apiVersion: v1
kind: ReplicationController
metadata:
name: wildfly-rc
spec:
replicas: 2
selector:
app: wildfly-rc-pod
template:
metadata:
labels:
app: wildfly-rc-pod
spec:
containers:
- name: wildfly
image: jboss/wildfly:10.1.0.Final
ports:
- containerPort: 8080
replication.yaml
Kubernetes
• Deployments
• Controla o process de atualização de pods
• Inicia / reinicia um replication controller
• Verifique o status do deployment
• Green ou Red
• Atualiza o deployment para utilizar uma
nova imagem
• Zero offline
• Rollback para uma versão anterior
...
Kubernetes
• Deployments
• Para definir um novo deployment
• kubectl create -f deployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: wildfly-deployment
spec:
replicas: 3
template:
metadata:
labels:
app: wildfly
spec:
containers:
- name: wildfly
image: jboss/wildfly:10.1.0.Final
ports:
- containerPort: 8080
deployment.yaml
Kubernetes
• Jobs
• Define um processo de execução finito (início e fim)
• Cria um ou mais pods e assegura que eles executaram
com sucesso até o final
• Define dois tipos de jobs
• Nonparallel (1 pod) e parallel (N pods)
• Suporta a definição de um Cron job
• Time-based jobs
• Ainda encontra-se em versão Beta
Kubernetes
• Jobs
• Para criar um novo Job
• kubectl create -f job.yaml
apiVersion: batch/v1
kind: Job
metadata:
name: wait
spec:
template:
metadata:
name: wait
spec:
containers:
- name: wait
image: ubuntu
command: ["sleep", "20"]
restartPolicy: Never
job.yaml
Auto Scaling
• Capacidade de aumentar e diminuir a escalabilidade
automaticamente
Kubernetes
• Auto-scaling
• Oferece suporte à auto-scaling (scale in/out)
• Pode ser definido métricas de monitoramento
• CPU, Memória, Rede, I/O, …
Kubernetes
• Auto-scaling
• Para configurar suporte ao auto-scaling
• kubectl run wildfly-server 
--image=jboss/wildfly:10.1.0.Final 
--requests=cpu=500m,memory=1024M 
--expose --port=8080
• kubectl autoscale deployment wildfly-server 
--cpu-percent=50 --min=2 --max=10
Laboratório 5 (docker-lab05)
• Orquestre o deployment da arquitetura de
microservices com Kubernetes
Conclusões
• Containers são ótimas alternativas para microservices
• Docker é a tecnologia mais utilizada atualmente para
criação de containers
• Containers necessitam de orquestração
• Kubernetes oferece um ambiente para orquestração de
containers
• Suporte autoscaling, práticas de deployment, gestão de
execução, etc…
• Microservices = Docker + Kubernetes ;)
Revisão
Nessa unidade você teve a oportunidade de:
• Compreender como empacotar os projetos de micro
services com Docker
• Publicar imagens em repositórios Docker
• Compor um grupo de imagens Docker em uma
arquitetura de microservices com Docker Compose
• Orquestrar a arquitetura de microservices com
Kubernetes
Referências
• https://docs.docker.com/samples/
• http://www.sonatype.org/nexus/
• https://docs.docker.com/compose/
• https://docs.docker.com/compose/startup-order/
• https://github.com/jwilder/dockerize
• https://github.com/kubernetes/minikube
• https://kubernetes.io/docs/user-guide/kubectl-overview/
• https://github.com/GoogleCloudPlatform/kubernetes-workshops
• https://github.com/christian-posta/docker-kubernetes-workshop
• https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/
• https://github.com/kubernetes/kompose
• https://dzone.com/articles/microservices-with-kubernetes-and-docker
• https://fabric8.io/
• https://github.com/fabric8io/spring-cloud-kubernetes
• https://www.openshift.org/

Mais conteúdo relacionado

Mais procurados

Docker - Tutorial for beginners
Docker - Tutorial for beginnersDocker - Tutorial for beginners
Docker - Tutorial for beginnersRafael Chiavegatto
 
Docker de ponta a ponta: do Desenvolvimento à Nuvem - Azure Talks - Agosto-2018
Docker de ponta a ponta: do Desenvolvimento à Nuvem - Azure Talks - Agosto-2018Docker de ponta a ponta: do Desenvolvimento à Nuvem - Azure Talks - Agosto-2018
Docker de ponta a ponta: do Desenvolvimento à Nuvem - Azure Talks - Agosto-2018Renato Groff
 
Docker de ponta a ponta - do Desenvolvimento à Nuvem - .NET SP - Outubro-2018
Docker de ponta a ponta - do Desenvolvimento à Nuvem - .NET SP - Outubro-2018Docker de ponta a ponta - do Desenvolvimento à Nuvem - .NET SP - Outubro-2018
Docker de ponta a ponta - do Desenvolvimento à Nuvem - .NET SP - Outubro-2018Renato Groff
 
Service Mesh com Istio e Kubernetes - Wellington Figueira da Silva
Service Mesh com Istio e Kubernetes - Wellington Figueira da SilvaService Mesh com Istio e Kubernetes - Wellington Figueira da Silva
Service Mesh com Istio e Kubernetes - Wellington Figueira da SilvaiMasters
 
TDC 2015 POA - O Fantástico Mundo de Docker
TDC 2015 POA - O Fantástico Mundo de DockerTDC 2015 POA - O Fantástico Mundo de Docker
TDC 2015 POA - O Fantástico Mundo de DockerStefan Teixeira
 
TDC Floripa 2016 - Decolando seus micro-serviços na Spring Cloud
TDC Floripa 2016 - Decolando seus micro-serviços na Spring CloudTDC Floripa 2016 - Decolando seus micro-serviços na Spring Cloud
TDC Floripa 2016 - Decolando seus micro-serviços na Spring CloudRodrigo Cândido da Silva
 
CDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeCDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeRafael Benevides
 
Deploying Docker Containers
Deploying Docker ContainersDeploying Docker Containers
Deploying Docker ContainersHugo Henley
 
O poder do Docker (7 Masters)
O poder do Docker (7 Masters)O poder do Docker (7 Masters)
O poder do Docker (7 Masters)Wellington Silva
 
Apresentação Docker
Apresentação DockerApresentação Docker
Apresentação DockerAndré Justi
 
Docker Swarm Cluster
Docker Swarm ClusterDocker Swarm Cluster
Docker Swarm ClusterFernando Ike
 
TDC 2014 SP - E o DeltaSpike ?
TDC 2014 SP - E o DeltaSpike ?TDC 2014 SP - E o DeltaSpike ?
TDC 2014 SP - E o DeltaSpike ?Rafael Benevides
 

Mais procurados (20)

Docker - Tutorial for beginners
Docker - Tutorial for beginnersDocker - Tutorial for beginners
Docker - Tutorial for beginners
 
Docker de ponta a ponta: do Desenvolvimento à Nuvem - Azure Talks - Agosto-2018
Docker de ponta a ponta: do Desenvolvimento à Nuvem - Azure Talks - Agosto-2018Docker de ponta a ponta: do Desenvolvimento à Nuvem - Azure Talks - Agosto-2018
Docker de ponta a ponta: do Desenvolvimento à Nuvem - Azure Talks - Agosto-2018
 
Docker de ponta a ponta - do Desenvolvimento à Nuvem - .NET SP - Outubro-2018
Docker de ponta a ponta - do Desenvolvimento à Nuvem - .NET SP - Outubro-2018Docker de ponta a ponta - do Desenvolvimento à Nuvem - .NET SP - Outubro-2018
Docker de ponta a ponta - do Desenvolvimento à Nuvem - .NET SP - Outubro-2018
 
Service Mesh com Istio e Kubernetes - Wellington Figueira da Silva
Service Mesh com Istio e Kubernetes - Wellington Figueira da SilvaService Mesh com Istio e Kubernetes - Wellington Figueira da Silva
Service Mesh com Istio e Kubernetes - Wellington Figueira da Silva
 
Docker hub
Docker hubDocker hub
Docker hub
 
containers-workshop
containers-workshopcontainers-workshop
containers-workshop
 
Olá docker
Olá dockerOlá docker
Olá docker
 
TDC 2015 POA - O Fantástico Mundo de Docker
TDC 2015 POA - O Fantástico Mundo de DockerTDC 2015 POA - O Fantástico Mundo de Docker
TDC 2015 POA - O Fantástico Mundo de Docker
 
Java 9, 10 e ... 11
Java 9, 10 e ... 11Java 9, 10 e ... 11
Java 9, 10 e ... 11
 
TDC Floripa 2016 - Decolando seus micro-serviços na Spring Cloud
TDC Floripa 2016 - Decolando seus micro-serviços na Spring CloudTDC Floripa 2016 - Decolando seus micro-serviços na Spring Cloud
TDC Floripa 2016 - Decolando seus micro-serviços na Spring Cloud
 
Docker: uma visão geral
Docker: uma visão geralDocker: uma visão geral
Docker: uma visão geral
 
CDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeCDI Extensions e DeltaSpike
CDI Extensions e DeltaSpike
 
Deploying Docker Containers
Deploying Docker ContainersDeploying Docker Containers
Deploying Docker Containers
 
O poder do Docker (7 Masters)
O poder do Docker (7 Masters)O poder do Docker (7 Masters)
O poder do Docker (7 Masters)
 
Apresentação Docker
Apresentação DockerApresentação Docker
Apresentação Docker
 
Docker fundamentos
Docker fundamentosDocker fundamentos
Docker fundamentos
 
Docker Swarm Cluster
Docker Swarm ClusterDocker Swarm Cluster
Docker Swarm Cluster
 
Ambiente de desenvolvimento com docker e ruby on rails
Ambiente de desenvolvimento com  docker e ruby on railsAmbiente de desenvolvimento com  docker e ruby on rails
Ambiente de desenvolvimento com docker e ruby on rails
 
TDC 2014 SP - E o DeltaSpike ?
TDC 2014 SP - E o DeltaSpike ?TDC 2014 SP - E o DeltaSpike ?
TDC 2014 SP - E o DeltaSpike ?
 
Introdução à plataforma Docker
Introdução à plataforma DockerIntrodução à plataforma Docker
Introdução à plataforma Docker
 

Semelhante a Workshop Microservices - Distribuindo os Microservices com Docker e Kubernetes

Docker + Kubernetes + Azure: opções disponíveis para uso de Containers na nuv...
Docker + Kubernetes + Azure: opções disponíveis para uso de Containers na nuv...Docker + Kubernetes + Azure: opções disponíveis para uso de Containers na nuv...
Docker + Kubernetes + Azure: opções disponíveis para uso de Containers na nuv...Renato Groff
 
Orquestrando ambientes com docker e kubernetes
Orquestrando ambientes com docker e kubernetes	Orquestrando ambientes com docker e kubernetes
Orquestrando ambientes com docker e kubernetes Rhuan Karlus Silva
 
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...Renato Groff
 
Simplificando a montagem de ambientes de Dev/Testes com Docker - Interop Summ...
Simplificando a montagem de ambientes de Dev/Testes com Docker - Interop Summ...Simplificando a montagem de ambientes de Dev/Testes com Docker - Interop Summ...
Simplificando a montagem de ambientes de Dev/Testes com Docker - Interop Summ...Renato Groff
 
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...Renato Groff
 
ASP.NET Core + Kubernetes + Azure - Community Bootcamp - Abril/2018
ASP.NET Core + Kubernetes + Azure - Community Bootcamp - Abril/2018ASP.NET Core + Kubernetes + Azure - Community Bootcamp - Abril/2018
ASP.NET Core + Kubernetes + Azure - Community Bootcamp - Abril/2018Renato Groff
 
Docker de ponta a ponta: do Desenvolvimento à Nuvem - Fevereiro-2020
Docker de ponta a ponta: do Desenvolvimento à Nuvem - Fevereiro-2020Docker de ponta a ponta: do Desenvolvimento à Nuvem - Fevereiro-2020
Docker de ponta a ponta: do Desenvolvimento à Nuvem - Fevereiro-2020Renato Groff
 
Introdução-a-Docker-compactado.pdf
Introdução-a-Docker-compactado.pdfIntrodução-a-Docker-compactado.pdf
Introdução-a-Docker-compactado.pdfdadalt1
 
Docker e suas tecnologias por @cesarnog
Docker e suas tecnologias por @cesarnogDocker e suas tecnologias por @cesarnog
Docker e suas tecnologias por @cesarnogCesar Augusto Nogueira
 
Docker + Azure - Global Azure Bootcamp 2018 - Campinas-SP
Docker + Azure - Global Azure Bootcamp 2018 - Campinas-SPDocker + Azure - Global Azure Bootcamp 2018 - Campinas-SP
Docker + Azure - Global Azure Bootcamp 2018 - Campinas-SPRenato Groff
 
Docker + Azure - Global Azure Bootcamp 2018 - São Paulo-SP
Docker + Azure - Global Azure Bootcamp 2018 - São Paulo-SPDocker + Azure - Global Azure Bootcamp 2018 - São Paulo-SP
Docker + Azure - Global Azure Bootcamp 2018 - São Paulo-SPRenato Groffe
 
Introdução ao docker
Introdução ao dockerIntrodução ao docker
Introdução ao dockerBenicio Ávila
 
Container revolucao
Container revolucaoContainer revolucao
Container revolucaoFernando Ike
 
Source-to-container no mundo real
Source-to-container no mundo realSource-to-container no mundo real
Source-to-container no mundo realEvandro Silvestre
 
Docker para Desenvolvedores .NET - .NET SP - Novembro-2018
Docker para Desenvolvedores .NET - .NET SP - Novembro-2018Docker para Desenvolvedores .NET - .NET SP - Novembro-2018
Docker para Desenvolvedores .NET - .NET SP - Novembro-2018Renato Groff
 
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 melhoresCarlos Andre Fernandes
 
Talk no Meetup LaravelSP #3
Talk no Meetup LaravelSP #3Talk no Meetup LaravelSP #3
Talk no Meetup LaravelSP #3Wellington Silva
 

Semelhante a Workshop Microservices - Distribuindo os Microservices com Docker e Kubernetes (20)

Docker + Kubernetes + Azure: opções disponíveis para uso de Containers na nuv...
Docker + Kubernetes + Azure: opções disponíveis para uso de Containers na nuv...Docker + Kubernetes + Azure: opções disponíveis para uso de Containers na nuv...
Docker + Kubernetes + Azure: opções disponíveis para uso de Containers na nuv...
 
Freedomday2016 - Fique na caixinha, docker
Freedomday2016 - Fique na caixinha, dockerFreedomday2016 - Fique na caixinha, docker
Freedomday2016 - Fique na caixinha, docker
 
Orquestrando ambientes com docker e kubernetes
Orquestrando ambientes com docker e kubernetes	Orquestrando ambientes com docker e kubernetes
Orquestrando ambientes com docker e kubernetes
 
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...
 
Simplificando a montagem de ambientes de Dev/Testes com Docker - Interop Summ...
Simplificando a montagem de ambientes de Dev/Testes com Docker - Interop Summ...Simplificando a montagem de ambientes de Dev/Testes com Docker - Interop Summ...
Simplificando a montagem de ambientes de Dev/Testes com Docker - Interop Summ...
 
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...
 
ASP.NET Core + Kubernetes + Azure - Community Bootcamp - Abril/2018
ASP.NET Core + Kubernetes + Azure - Community Bootcamp - Abril/2018ASP.NET Core + Kubernetes + Azure - Community Bootcamp - Abril/2018
ASP.NET Core + Kubernetes + Azure - Community Bootcamp - Abril/2018
 
Docker de ponta a ponta: do Desenvolvimento à Nuvem - Fevereiro-2020
Docker de ponta a ponta: do Desenvolvimento à Nuvem - Fevereiro-2020Docker de ponta a ponta: do Desenvolvimento à Nuvem - Fevereiro-2020
Docker de ponta a ponta: do Desenvolvimento à Nuvem - Fevereiro-2020
 
Introdução-a-Docker-compactado.pdf
Introdução-a-Docker-compactado.pdfIntrodução-a-Docker-compactado.pdf
Introdução-a-Docker-compactado.pdf
 
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
 
Docker + Azure - Global Azure Bootcamp 2018 - Campinas-SP
Docker + Azure - Global Azure Bootcamp 2018 - Campinas-SPDocker + Azure - Global Azure Bootcamp 2018 - Campinas-SP
Docker + Azure - Global Azure Bootcamp 2018 - Campinas-SP
 
Docker
DockerDocker
Docker
 
Docker + Azure - Global Azure Bootcamp 2018 - São Paulo-SP
Docker + Azure - Global Azure Bootcamp 2018 - São Paulo-SPDocker + Azure - Global Azure Bootcamp 2018 - São Paulo-SP
Docker + Azure - Global Azure Bootcamp 2018 - São Paulo-SP
 
Introdução ao docker
Introdução ao dockerIntrodução ao docker
Introdução ao docker
 
Container revolucao
Container revolucaoContainer revolucao
Container revolucao
 
Source-to-container no mundo real
Source-to-container no mundo realSource-to-container no mundo real
Source-to-container no mundo real
 
Docker para Desenvolvedores .NET - .NET SP - Novembro-2018
Docker para Desenvolvedores .NET - .NET SP - Novembro-2018Docker para Desenvolvedores .NET - .NET SP - Novembro-2018
Docker para Desenvolvedores .NET - .NET SP - Novembro-2018
 
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
 
Talk no Meetup LaravelSP #3
Talk no Meetup LaravelSP #3Talk no Meetup LaravelSP #3
Talk no Meetup LaravelSP #3
 

Mais de Rodrigo Cândido da Silva

Protegendo Microservices: Boas Práticas e Estratégias de Implementação
Protegendo Microservices: Boas Práticas e Estratégias de ImplementaçãoProtegendo Microservices: Boas Práticas e Estratégias de Implementação
Protegendo Microservices: Boas Práticas e Estratégias de ImplementaçãoRodrigo Cândido da Silva
 
Protecting Java Microservices: Best Practices and Strategies
Protecting Java Microservices: Best Practices and StrategiesProtecting Java Microservices: Best Practices and Strategies
Protecting Java Microservices: Best Practices and StrategiesRodrigo Cândido da Silva
 
GUJavaSC - Combinando Micro-serviços com Práticas DevOps
GUJavaSC - Combinando Micro-serviços com Práticas DevOpsGUJavaSC - Combinando Micro-serviços com Práticas DevOps
GUJavaSC - Combinando Micro-serviços com Práticas DevOpsRodrigo Cândido da Silva
 
GUJavaSC - Criando Micro-serviços Reativos com Java
GUJavaSC - Criando Micro-serviços Reativos com JavaGUJavaSC - Criando Micro-serviços Reativos com Java
GUJavaSC - Criando Micro-serviços Reativos com JavaRodrigo Cândido da Silva
 
JavaOne 2016 - Reactive Microservices with Java and Java EE
JavaOne 2016 - Reactive Microservices with Java and Java EEJavaOne 2016 - Reactive Microservices with Java and Java EE
JavaOne 2016 - Reactive Microservices with Java and Java EERodrigo Cândido da Silva
 
JavaOne LATAM 2016 - Combinando AngularJS com Java EE
JavaOne LATAM 2016 - Combinando AngularJS com Java EEJavaOne LATAM 2016 - Combinando AngularJS com Java EE
JavaOne LATAM 2016 - Combinando AngularJS com Java EERodrigo Cândido da Silva
 
JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST
JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data RESTJavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST
JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data RESTRodrigo Cândido da Silva
 
QCon 2015 - Combinando AngularJS com Java EE
QCon 2015 - Combinando AngularJS com Java EEQCon 2015 - Combinando AngularJS com Java EE
QCon 2015 - Combinando AngularJS com Java EERodrigo Cândido da Silva
 
JavaOne LATAM 2015 - Segurança em Recursos RESTful com OAuth2
JavaOne LATAM 2015 - Segurança em Recursos RESTful com OAuth2JavaOne LATAM 2015 - Segurança em Recursos RESTful com OAuth2
JavaOne LATAM 2015 - Segurança em Recursos RESTful com OAuth2Rodrigo Cândido da Silva
 
JavaOne LATAM 2015 - Batch Processing: Processamento em Lotes no Mundo Corpor...
JavaOne LATAM 2015 - Batch Processing: Processamento em Lotes no Mundo Corpor...JavaOne LATAM 2015 - Batch Processing: Processamento em Lotes no Mundo Corpor...
JavaOne LATAM 2015 - Batch Processing: Processamento em Lotes no Mundo Corpor...Rodrigo Cândido da Silva
 
TDC 2015 - Segurança em Recursos RESTful com OAuth2
TDC 2015 - Segurança em Recursos RESTful com OAuth2TDC 2015 - Segurança em Recursos RESTful com OAuth2
TDC 2015 - Segurança em Recursos RESTful com OAuth2Rodrigo Cândido da Silva
 
ConFoo 2015 - Supporting Multi-tenancy Applications with Java EE
ConFoo 2015 - Supporting Multi-tenancy Applications with Java EEConFoo 2015 - Supporting Multi-tenancy Applications with Java EE
ConFoo 2015 - Supporting Multi-tenancy Applications with Java EERodrigo Cândido da Silva
 
ConFoo 2015 - Securing RESTful resources with OAuth2
ConFoo 2015 - Securing RESTful resources with OAuth2ConFoo 2015 - Securing RESTful resources with OAuth2
ConFoo 2015 - Securing RESTful resources with OAuth2Rodrigo Cândido da Silva
 
JavaOne 2014 - Securing RESTful Resources with OAuth2
JavaOne 2014 - Securing RESTful Resources with OAuth2JavaOne 2014 - Securing RESTful Resources with OAuth2
JavaOne 2014 - Securing RESTful Resources with OAuth2Rodrigo Cândido da Silva
 
JavaOne 2014 - Supporting Multi-tenancy Applications with Java EE
JavaOne 2014 - Supporting Multi-tenancy Applications with Java EEJavaOne 2014 - Supporting Multi-tenancy Applications with Java EE
JavaOne 2014 - Supporting Multi-tenancy Applications with Java EERodrigo Cândido da Silva
 

Mais de Rodrigo Cândido da Silva (20)

Cloud Native Java EE
Cloud Native Java EECloud Native Java EE
Cloud Native Java EE
 
Protegendo Microservices: Boas Práticas e Estratégias de Implementação
Protegendo Microservices: Boas Práticas e Estratégias de ImplementaçãoProtegendo Microservices: Boas Práticas e Estratégias de Implementação
Protegendo Microservices: Boas Práticas e Estratégias de Implementação
 
Protecting Java Microservices: Best Practices and Strategies
Protecting Java Microservices: Best Practices and StrategiesProtecting Java Microservices: Best Practices and Strategies
Protecting Java Microservices: Best Practices and Strategies
 
GUJavaSC - Protegendo Microservices em Java
GUJavaSC - Protegendo Microservices em JavaGUJavaSC - Protegendo Microservices em Java
GUJavaSC - Protegendo Microservices em Java
 
GUJavaSC - Combinando Micro-serviços com Práticas DevOps
GUJavaSC - Combinando Micro-serviços com Práticas DevOpsGUJavaSC - Combinando Micro-serviços com Práticas DevOps
GUJavaSC - Combinando Micro-serviços com Práticas DevOps
 
GUJavaSC - Criando Micro-serviços Reativos com Java
GUJavaSC - Criando Micro-serviços Reativos com JavaGUJavaSC - Criando Micro-serviços Reativos com Java
GUJavaSC - Criando Micro-serviços Reativos com Java
 
JavaOne 2016 - Reactive Microservices with Java and Java EE
JavaOne 2016 - Reactive Microservices with Java and Java EEJavaOne 2016 - Reactive Microservices with Java and Java EE
JavaOne 2016 - Reactive Microservices with Java and Java EE
 
JavaOne LATAM 2016 - Combinando AngularJS com Java EE
JavaOne LATAM 2016 - Combinando AngularJS com Java EEJavaOne LATAM 2016 - Combinando AngularJS com Java EE
JavaOne LATAM 2016 - Combinando AngularJS com Java EE
 
JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST
JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data RESTJavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST
JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST
 
GUJavaSC - Combinando AngularJS com Java EE
GUJavaSC - Combinando AngularJS com Java EEGUJavaSC - Combinando AngularJS com Java EE
GUJavaSC - Combinando AngularJS com Java EE
 
QCon 2015 - Combinando AngularJS com Java EE
QCon 2015 - Combinando AngularJS com Java EEQCon 2015 - Combinando AngularJS com Java EE
QCon 2015 - Combinando AngularJS com Java EE
 
JavaOne LATAM 2015 - Segurança em Recursos RESTful com OAuth2
JavaOne LATAM 2015 - Segurança em Recursos RESTful com OAuth2JavaOne LATAM 2015 - Segurança em Recursos RESTful com OAuth2
JavaOne LATAM 2015 - Segurança em Recursos RESTful com OAuth2
 
JavaOne LATAM 2015 - Batch Processing: Processamento em Lotes no Mundo Corpor...
JavaOne LATAM 2015 - Batch Processing: Processamento em Lotes no Mundo Corpor...JavaOne LATAM 2015 - Batch Processing: Processamento em Lotes no Mundo Corpor...
JavaOne LATAM 2015 - Batch Processing: Processamento em Lotes no Mundo Corpor...
 
TDC 2015 - Segurança em Recursos RESTful com OAuth2
TDC 2015 - Segurança em Recursos RESTful com OAuth2TDC 2015 - Segurança em Recursos RESTful com OAuth2
TDC 2015 - Segurança em Recursos RESTful com OAuth2
 
ConFoo 2015 - Supporting Multi-tenancy Applications with Java EE
ConFoo 2015 - Supporting Multi-tenancy Applications with Java EEConFoo 2015 - Supporting Multi-tenancy Applications with Java EE
ConFoo 2015 - Supporting Multi-tenancy Applications with Java EE
 
ConFoo 2015 - Securing RESTful resources with OAuth2
ConFoo 2015 - Securing RESTful resources with OAuth2ConFoo 2015 - Securing RESTful resources with OAuth2
ConFoo 2015 - Securing RESTful resources with OAuth2
 
GUJavaSC - Unit Testing com Java EE
GUJavaSC - Unit Testing com Java EEGUJavaSC - Unit Testing com Java EE
GUJavaSC - Unit Testing com Java EE
 
GUJavaSC - Mini-curso Java EE
GUJavaSC - Mini-curso Java EEGUJavaSC - Mini-curso Java EE
GUJavaSC - Mini-curso Java EE
 
JavaOne 2014 - Securing RESTful Resources with OAuth2
JavaOne 2014 - Securing RESTful Resources with OAuth2JavaOne 2014 - Securing RESTful Resources with OAuth2
JavaOne 2014 - Securing RESTful Resources with OAuth2
 
JavaOne 2014 - Supporting Multi-tenancy Applications with Java EE
JavaOne 2014 - Supporting Multi-tenancy Applications with Java EEJavaOne 2014 - Supporting Multi-tenancy Applications with Java EE
JavaOne 2014 - Supporting Multi-tenancy Applications with Java EE
 

Workshop Microservices - Distribuindo os Microservices com Docker e Kubernetes

  • 1. Workshop Microservices Distribuindo os microservices com Docker e Kubernetes
  • 2. Objetivos Ao final desta unidade você irá: • Compreender como empacotar os projetos de micro services com Docker • Publicar imagens em repositórios Docker • Compor um grupo de imagens Docker em uma arquitetura de microservices com Docker Compose • Orquestrar a arquitetura de microservices com Kubernetes
  • 3. Agenda • Containers • Docker • Docker Registry • Docker Compose • Kubernetes
  • 8. Containers vs Virtualization Virtualization Container • Minutos para iniciar uma VM, e… segundos para iniciar um container
  • 9. Docker Docker engine Docker Hub “Open platform for building, shipping and running distributed applications"
  • 10. Docker • Versão • Community Edition (CE) - Free • Enterprise Edition (EE) - Pago • Basic, Standard, Advanced • https://www.docker.com/pricing
  • 11. Docker • Instalação • Native • Windows • https://docs.docker.com/docker-for-windows/install/ • Mac • https://docs.docker.com/docker-for-mac/install/ • Ubuntu / Debian / Fedora • https://docs.docker.com/engine/installation/linux/docker-ce/ubuntu/ • https://docs.docker.com/engine/installation/linux/docker-ce/debian/ • https://docs.docker.com/engine/installation/linux/docker-ce/fedora/ • Toolbox • Windows • https://docs.docker.com/toolbox/toolbox_install_windows/ • Mac • https://docs.docker.com/toolbox/toolbox_install_mac/
  • 13. Docker • Principais comandos • docker run • Roda um determinado container • docker build • Constrói novas imagens a partir de um Dockerfile • docker ps • Lista todos os containers em execução • docker start • Inicia um determinado container já executado anteriormente • docker stop • Finaliza um container em execução • docker rm • Remove um determinado container da máquina
  • 14. Docker • Principais comandos • docker rmi • Remove uma determinada image da máquina • docker tag • Cria uma tag para uma determinada imagem • docker login • Realiza uma sessão de login em um determinado Docker repo privado • docker pull • Busca uma imagem pré-construído de um Docker repo publico • docker logs • Verifica os logs de execução de um determinado container • docker commit • Salva o estado de um container como uma imagem
  • 15. Docker • Principais comandos • docker diff • Lista as mudanças em arquivos e diretórios • docker images • Lista todas as imagens disponíveis no Docker repo local • docker inspect • Inspeciona informações sobre containers e imagens • docker attach • Interage com containers em execução • docker kill • Finaliza o processo de execução de um determinado container
  • 16. Dockerfile # Use an official Python runtime as a parent image FROM python:2.7-slim # Set the working directory to /app WORKDIR /app # Copy the current directory contents into the container at /app ADD . /app # Install any needed packages specified in requirements.txt RUN pip install -r requirements.txt # Make port 80 available to the world outside this container EXPOSE 80 # Define environment variable ENV NAME World # Run app.py when the container launches CMD ["python", "app.py"]
  • 17. Docker • Exemplo de utilização • docker build -t friendlyhello. • docker images REPOSITORY TAG IMAGE ID friendlyhello latest 326387cea398 • docker run -p 4000:80 friendlyhello • docker run -d -p 4000:80 friendlyhello • docker ps CONTAINER ID IMAGE COMMAND CREATED 1fa4ab2cf395 friendlyhello "python app.py" 28 seconds ago • docker stop 1fa4ab2cf395 • docker rm 1fa4ab2cf395 • docker rmi friendlyhello
  • 18. Docker • Integração com Maven • docker-maven-plugin (Spotify) • https://github.com/spotify/docker-maven-plugin • mvn clean package docker:build • mvn … docker:build -DpushImageTags -DdockerImageTags=latest <plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>0.4.13</version> <configuration> <imageName>${project.groupId}/${project.artifactId}</imageName> <dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory> <resources> <resource> <targetPath>/</targetPath> <directory>${project.build.directory}</directory> <include>${project.build.finalName}.jar</include> </resource> </resources> </configuration> </plugin>
  • 19. Laboratório 1 (docker-lab01) • Empacote os projetos de microservices com Docker
  • 22. Nexus • Repositório de artefatos opensource • Maven, Bower, Npm, Rubygems, Pypl, Nuget, Docker • Popularmente utilizado para projetos Maven • Fornece uma interface Web de administração • Suporta repositórios Docker • A partir da versão 3.x
  • 23. Nexus
  • 24. Docker Registry • Exemplo de push de imagens no Nexus • docker build -t friendlyhello. • docker login -u user -p pass nexus-ip:8081 Login Succeeded • docker tag friendlyhello nexus-ip:8081/friendlyhello • docker push nexus-ip:8081/friendlyhello The push refers to a repository [nexus-ip:18081/friendlyhello] 2261473fba2b: Preparing ce6c8756685b: Waiting 2261473fba2b: Pushed qa: digest: sha256:f64205d492c2f3b15a1b6c146b36e493ec764c7e2cc330 size: 2424
  • 25. Docker Registry • Exemplo de pull de imagens no Nexus • docker login -u user -p pass nexus-ip:8081 Login Succeeded • docker pull nexus-ip:8081/friendlyhello latest: Pulling from amazonlinux 8e3fa21c4cc4: Pull complete Digest: sha256:59895a93ba4345e238926c0f4f4a3969b1ec5aa0a291a182816a4630c62df769 • docker run -d -p 4000:80 friendlyhello • docker ps CONTAINER ID IMAGE COMMAND CREATED 1fa4ab2cf395 friendlyhello "python app.py" 28 seconds ago
  • 26. Laboratório 2 (docker-lab02) • Publique as imagens Docker dos microservices no Nexus
  • 27. Docker Compose • Define um agrupamento de containers em uma única definição • Configuração centralizada em um único arquivo • docker-compose.yml • Define dependências entre containers • Fornece mecanismo de service discovery • Embedded Docker DNS • Permite mapear • Portas, volumes, variáveis, etc
  • 30. Docker Compose • Principais comandos • docker-compose pull • Buscar a lista de images definidas pela composição em um repo público • docker-compose logs • Verificar os logs de execução dos containers definidos na composição • docker-compose build • Construir as imagens definidas pela composição • docker-compose up • Criar e iniciar os containers definidos pela composição • docker-compose down • Destruir os containers definidos pela composição
  • 31. Docker Compose • Principais comandos • docker-compose start • Iniciar os containers definidos pela composição • docker-compose stop • Parar os containers definidos pela composição • docker-compose restart • Reiniciar os containers definidos pela composição • docker-compose run • Rodar um comando em um serviço definido pela composição • docker-compose exec • Rodar um comando em um container em execução • docker-compose kill • Finalizar um container em execução definido pela composição
  • 33. Microservices Compose version: '2' services: config-server: image: microservices/config-server:latest mem_limit: 1073741824 # RAM 1GB environment: - SPRING_PROFILES_ACTIVE=${PROFILE} expose: - "8888" ports: - "8888:8888" networks: - microservices eureka-server: image: microservices/eureka-server:latest mem_limit: 1073741824 # RAM 1GB environment: - SPRING_PROFILES_ACTIVE=${PROFILE} links: - config-server expose: - "8761" ports: - "8761:8761" networks: - microservices ... • docker-compose up • docker-compose stop • docker-compose start • docker-compose down
  • 34. Laboratório 3 (docker-lab03) • Componha a arquitetura de microservices utilizando Docker Compose
  • 35. Orquestração • Gerenciamento da comunicação dos serviços em containers diferentes
  • 37. Kubernetes • Ferramenta para orquestração de containers • Suporta múltiplos ambientes cloud • É possível rodar localmente • Suporta múltiplos containers runtime • 100% open source, escrito em Go • Eficiente, Portável, Extensível, …
  • 40. Kubernetes • Instalação Local • VirtualBox • https://www.virtualbox.org/wiki/Downloads • Vagrant • https://www.vagrantup.com/ • Minikube • https://github.com/kubernetes/minikube • Kubeclt • https://kubernetes.io/docs/tasks/tools/install-kubectl/ • Outras alternativas • https://kubernetes.io/docs/setup/pick-right-solution/
  • 41. Vagrant • Permite a criação de ambientes de desenvolvimento, automatizando a geração de máquina virtual • VMs são criadas a partir de imagens denominadas Boxes • Suporta VirtualBox, VMWare, Hyper-V e outros • Instalação e download • https://www.vagrantup.com/downloads.html • Principais comandos • vagrant init [box] • vagrant up • vagrant halt • vagrant destroy • vagrant reload • vagrant ssh • vagrant status
  • 42. Minikube • Uma opção para rodar Kubernetes localmente • https://github.com/kubernetes/minikube • Principais comandos • minikube start • Cria e inicia o Kubernetes cluster • minikube stop • Desliga o Kubernetes cluster • minikube dashboard • Acessa o Kubernetes dashboard • minikube ssh -v 7 • Acesso via SSH no Kubernetes cluster • minikube service [name] • Acessa um serviço disponibilizado pelo Kubernetes cluster • minikube ip • Verifica o ip de acesso para o Kubernetes cluster
  • 44. Kubectl CLI • Utilitário para executar comandos no Kubernetes cluster • https://kubernetes.io/docs/user-guide/kubectl-overview/ • Principais comandos • kubectl get pods / deployments • kubectl create -f [filename] • kubectl run [name] —image=[imagename] • kubectl logs [name] • kubectl update [name] • kubectl delete [name] • kubectl resize • kubectl expose • kubectl describe
  • 45. Laboratório 4 (docker-lab04) • Realize a instalação do Kubernetes cluster na sua máquina local
  • 46. Kubernetes • Pods • Representa um container em execução • Pode agrupar múltiplos containers • Define um host lógico no cluster • Cada Pod recebe um IP • Evita o conflito de portas • Comunicam-se entre si sem precisar de NAT 10.1.2.0/24 10.1.1.0/24 10.1.1.211 10.1.1.2 10.1.2.106 10.1.3.0/24 10.1.3.4510.1.3.17 10.1.3.0/24
  • 47. Kubernetes • Pods • Para rodar um Pod • kubectl run app --image=app/image --port=8080 • kubectl create -f pod.yaml apiVersion: v1 kind: Pod metadata: name: wildfly-pod labels: name: wildfly-pod spec: containers: - name: wildfly image: jboss/wildfly:10.1.0.Final ports: - containerPort: 8080 pod.yaml
  • 48. Kubernetes • Services • Um agrupamento lógico de Pods que realizam uma mesma função • Define o conceito de load balancer • A escolha do Pod é randômica mas suporta afinidade por session • Stick session • Disponibiliza um IP e porta virtual • Também um DNS name Client Pod Container Pod Container Pod ContainerContainer Service Label selector: type = FE VIP type = FE type = FE type = FE
  • 49. Kubernetes • Services • Para criar um novo Service • kubectl expose [type] —name=[name] --port=[port] —target-port=[port] • kubectl create -f service.yaml apiVersion: v1 kind: Service metadata: name: wildfly-service spec: selector: app: wildfly-rc-pod ports: - name: web port: 8080 service.yaml
  • 50. Kubernetes • Labels • Simples definição de key=value • Pode ser associado a qualquer componente • Pods, Replication Controllers, Services, Deployment, … • Ajuda no processo de organização do cluster • Utilizado em conjunto com selectors • Exemplos • release=stable, release=canary • environment=dev, environment=qa
  • 51. Kubernetes • Replication Controlles • Configura o número de réplicas de um determinado pod • Assegura que um número desejado de pods encontram-se em execução • Pode ter a execução agendada • Suporta configuração por definição de label • Replica Sets • Nova geração de Replication Controllers Replication Controller Pod Pod frontend Pod frontend Pod Pod Replication Controller #pods = 1 version = v2 show: version = v2 version= v1 version = v1 version = v2 Replication Controller #pods = 2 version = v1
  • 52. Kubernetes • Replication Controlles • Para criar um novo Replication Controller • kubectl create -f replication.yaml apiVersion: v1 kind: ReplicationController metadata: name: wildfly-rc spec: replicas: 2 selector: app: wildfly-rc-pod template: metadata: labels: app: wildfly-rc-pod spec: containers: - name: wildfly image: jboss/wildfly:10.1.0.Final ports: - containerPort: 8080 replication.yaml
  • 53. Kubernetes • Deployments • Controla o process de atualização de pods • Inicia / reinicia um replication controller • Verifique o status do deployment • Green ou Red • Atualiza o deployment para utilizar uma nova imagem • Zero offline • Rollback para uma versão anterior ...
  • 54. Kubernetes • Deployments • Para definir um novo deployment • kubectl create -f deployment.yaml apiVersion: extensions/v1beta1 kind: Deployment metadata: name: wildfly-deployment spec: replicas: 3 template: metadata: labels: app: wildfly spec: containers: - name: wildfly image: jboss/wildfly:10.1.0.Final ports: - containerPort: 8080 deployment.yaml
  • 55. Kubernetes • Jobs • Define um processo de execução finito (início e fim) • Cria um ou mais pods e assegura que eles executaram com sucesso até o final • Define dois tipos de jobs • Nonparallel (1 pod) e parallel (N pods) • Suporta a definição de um Cron job • Time-based jobs • Ainda encontra-se em versão Beta
  • 56. Kubernetes • Jobs • Para criar um novo Job • kubectl create -f job.yaml apiVersion: batch/v1 kind: Job metadata: name: wait spec: template: metadata: name: wait spec: containers: - name: wait image: ubuntu command: ["sleep", "20"] restartPolicy: Never job.yaml
  • 57. Auto Scaling • Capacidade de aumentar e diminuir a escalabilidade automaticamente
  • 58. Kubernetes • Auto-scaling • Oferece suporte à auto-scaling (scale in/out) • Pode ser definido métricas de monitoramento • CPU, Memória, Rede, I/O, …
  • 59. Kubernetes • Auto-scaling • Para configurar suporte ao auto-scaling • kubectl run wildfly-server --image=jboss/wildfly:10.1.0.Final --requests=cpu=500m,memory=1024M --expose --port=8080 • kubectl autoscale deployment wildfly-server --cpu-percent=50 --min=2 --max=10
  • 60. Laboratório 5 (docker-lab05) • Orquestre o deployment da arquitetura de microservices com Kubernetes
  • 61. Conclusões • Containers são ótimas alternativas para microservices • Docker é a tecnologia mais utilizada atualmente para criação de containers • Containers necessitam de orquestração • Kubernetes oferece um ambiente para orquestração de containers • Suporte autoscaling, práticas de deployment, gestão de execução, etc… • Microservices = Docker + Kubernetes ;)
  • 62. Revisão Nessa unidade você teve a oportunidade de: • Compreender como empacotar os projetos de micro services com Docker • Publicar imagens em repositórios Docker • Compor um grupo de imagens Docker em uma arquitetura de microservices com Docker Compose • Orquestrar a arquitetura de microservices com Kubernetes
  • 63. Referências • https://docs.docker.com/samples/ • http://www.sonatype.org/nexus/ • https://docs.docker.com/compose/ • https://docs.docker.com/compose/startup-order/ • https://github.com/jwilder/dockerize • https://github.com/kubernetes/minikube • https://kubernetes.io/docs/user-guide/kubectl-overview/ • https://github.com/GoogleCloudPlatform/kubernetes-workshops • https://github.com/christian-posta/docker-kubernetes-workshop • https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/ • https://github.com/kubernetes/kompose • https://dzone.com/articles/microservices-with-kubernetes-and-docker • https://fabric8.io/ • https://github.com/fabric8io/spring-cloud-kubernetes • https://www.openshift.org/