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
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
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
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
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
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
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
...
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
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