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