Rafael Gomes apresenta-se como consultor e apaixonado por compartilhamento de conhecimento sobre tecnologias como Docker, Cloud e DevOps. Ele está escrevendo um livro gratuito sobre Docker para iniciantes e introduz os principais conceitos do ecossistema Docker.
2. Quem sou eu
Rafael Gomes:
● Soteropolitano
● Apaixonado por compartilhamento
● Consultor na Thoughtworks
● Blog: techfree.com.br
● Twitter/github: @gomex
● Áreas de interesse/foco:
○ Cultura DevOps
○ Cloud
○ Entrega contínua
○ Automação de infraestrutura
○ Teste de infraestrutura
○ Monitoramento
3. O que estou fazendo de relevante agora
Livro:
● Pague quanto quiser,
inclusive nada
● Não precisa saber
nada de Docker
● Licenciado com
Creative Commons
http://tinyurl.com/docker-devel
5. 5
Projeto Open source
• 2B+ Download de Imagens
• 2000+ Contribudores
• 40K+ Estrelas no GitHub
• 200K+ App Dockerizadas
• 240 Meetups em 70 países
• 95K Membros de Meetup
Quem somos nos
Comunidade Docker Docker Inc
Provedor de container como serviço
• Plataforma de integração para dev e
ops
• Suporte técnico comercial
Patrocinado do projeto Docker
• Principal patrocinador do projeto
Docker
• Suporta mantenedores do projeto
6. Ecossistema do Docker
Dev Tools
Official Repositories
Operating Systems
Big Data
Service Discovery
Build / Continuous Integration
Configuration Management
Consulting &Training
Management
Storage
Clustering & Scheduling
Networking
Infrastructure & Service Providers
Storage
Security
Monitoring & Logging
6
7. Básico do Docker
Docker Image
The basis of a Docker container
Docker Container
The standard unit in which the application service resides
Docker Engine
Creates, ships and runs Docker containers deployable on physical or virtual
host locally, in a datacenter or cloud service provider
Docker Registry
On-premises registry for image storing and collaboration
9. O Desafio
9
Virtual machines
Server
Public Cloud
Disaster Recovery
Developer Laptop
Server Cluster
Data Center
Static
Website
Web Front EndBackground
Workers
User DB
Analytics
DB
Queue API
Endpoint
Development Test & QA Production Scale Out
10. • Pacotes com binários e suas dependências
• Softwares isolados uns dos outros
• Container como formato padrão
• Fácil portabilidade entre ambientes (GNU/Linux)
• Permite padronização no processo de
desenvolvimento
Solução: Containers Docker
10
Container
12. Na visão do desenvolvedor
• Build uma vez e rode onde quiser
• Um ambiente de execução portável, seguro e limpo para sua aplicação
• Não se preocupe com dependências perdidas, pacotes e outros pontos de dores durante
implantações futuras. Se rodou uma vez, rodará sempre
• Execute cada aplicação isolado em seu container, dessa forma você pode executar várias
versões de biblioteca e outras dependências para aplicação sem problemas
• Teste automatizado, integração, empacotamento, tudo que você pode fazer com script.
• Reduz/elimina preocupações com relação a diferentes plataformas GNU/Linux
• Barato e sem penalidade de performance para implantar seus ambientes. Restart instantâneo
de todo ambiente na velocidade da iniciação do serviço. Esse é o poder do Docker.
13. Na visão do sysadmin
•Configura uma vez, rode em qualquer lugar
• Faça o ciclo de vida completo ser mais eficiente, consistente e replicável
• Aumente a qualidade do código produzido pelos desenvolvedores
• Elimine inconsistência entre desenvolvimento, teste, produção e ambiente do cliente
• Melhoria significativa na velocidade e confiança do continuous deployment (CD) e continuous
integration (CI).
• Container são mais leves, impactam significativamente em problemas de performance, custo,
implantação e portabilidade que normalmente são associados a VMs.
14. Docker Toolbox
Tudo que você precisa dentro de
uma caixa
• Toolbox inclue:
– Kitematic
– Docker CLI
– Docker Machine
– Docker Swarm
– Docker Compose
14
27. docker run <parâmetros> <imagem> <CMD>
Parâmetro Explicação
-d Execução em background
--name Nomear o container
-m Limitar o uso de memória RAM
-c Balancear o uso de CPU
-p Mapeamento de porta
-v Mapeamento de volume
-i Modo interativo
-t Alocar pseudo tty
33. Mapeamento de porta
# docker run -p portahost:portacontainer <imagem>
Docker host
Virtualbox
Container
8080
80
192.168.99.100:80
Cliente
34. Exercicio
Efetue mapeamento da porta 80 para o container
da imagem tutum/apache-php
# docker run -it -p 80:80 tutum/apache-php
Verifique o ip da sua máquina virtual e acesse a
interface web
35. Mapeamento de volume
# docker run -v volhost:volcontainer <imagem>
Docker host
Virtualbox
Container
/Users/gomex/app
Cliente /Users
/app
36. Exercicio
Efetue mapeamento a sua pasta atual com a
pasta /root do container python
# docker run -it -v $PWD:/root python /bin/bash
Crie um arquivo na pasta /root do container,
depois saia do container e verifique se esse
arquivo está no host
37. docker volumes <parâmetros>
Parâmetro Explicação
Create <nome> Cria um volume
Inspect <nome> Inspeciona o volume
ls Lista os volumes existentes
rm Remove o volume
38. Crie um volume e efetue mapeamento com a
pasta /root do container python
# docker volume create --name teste
# docker run -it -v teste:/root python /bin/bash
Crie um arquivo na pasta /root do container,
depois saia do container, crie um outro container
com o mesmo volume e verifique se o arquivo
existe
# docker run -it -v teste:/root alpine /bin/sh
Exercicio
39. docker ps <parâmetros>
Parâmetro Explicação
-a Lista todos os containers, inclusive os desligados
-l Lista os ultimos containers, inclusive os desligados
-n Lista os últimos N containers, inclusive os desligados
-q Lista apenas os ids dos containers
41. Outros comandos
docker Explicação
stop <id do container> Desliga o container em execução
start <id do container> Inicia o mesmo container que estava finalizado
logs -f <id do container> Verifica o saida padrão do container
attach <id do container> Conectar ao processo que está executando
44. Exercicio
Vamos iniciar um container em background e
enviar comandos
# docker run -itd --name testealpine alpine /bin/sh
# docker exec -it testealpine ls /etc
45. Exercicio
1) Crie uma conta na nuvem pública do docker (hub.docker.com)
2) Pesquise online sobre uma imagem que você tenha interesse
3) Leia README da imagem escolhida
4) Baixe a imagem escolhida
5) Execute a imagem escolhida com base nos dados do README
Sugestão:
https://hub.docker.com/r/berngp/docker-zabbix/
# docker run -d -P --name zabbix berngp/docker-zabbix
47. Dockerfile
É o documento que contém todos os comandos
que o usuário poderia normalmente executar para
criar um ambiente.
Basicamente é uma descrição de procedimentos
para criação do seu ambiente.
48. Dockerfile
Instruções Explicação
FROM <imagem> Imagem base
MAINTAINER <Autor> Com pseudo tty
COPY <SRC> <DST> Copiar arquivo para dentro do container
RUN <comando> Executar um determinado comando dentro do container
CMD <processo> CMD padrão caso nada seja definido no "docker run"
ENV <Variável><Valor> Especificar variável de ambiente para o container
USER <usuário> O usuário que será usado para dar os comandos
WORKDIR <pasta> Qual pasta de trabalho (cd <pasta>)
49. Dockerfile
O arquivo é analisado do top a base do arquivo,
ou seja, se preocupe com a ordem as instruções
nesse documento!
FROM python:2.7
COPY . /code
WORKDIR /code
RUN pip install -r requirements.txt
CMD python app.py
50. Fazendo o build
# mkdir imagem
# cd imagem
# vi Dockerfile
# docker build -t=<nome da imagem> .
Obs: No nome da imagem, lembre-se que a imagem
deve conter o nome do seu usuário antes do nome da
imagem. Exemplo: gomex/redis (meu usuário é
gomex).
51. # docker login
# docker push <nome da imagem>
Obs: No nome da imagem, lembre-se que a imagem
deve conter o nome do seu usuário antes do nome da
imagem. Exemplo: gomex/redis (meu usuário é
gomex).
Enviando pra nuvem
52. Exercício
1)Escolha uma imagem para ser estendida
2)Crie um Dockerfile com suas modificações
3)Faça build da imagem
4)Envie para nuvem