TDC 2016 Floripa - Workshop docker
-
Upload
rafael-gomes -
Category
Technology
-
view
450 -
download
3
Transcript of TDC 2016 Floripa - Workshop docker
Workshop Docker
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
O que estou fazendo de relevante agoraLivro:
● Pague quanto quiser, inclusive nada
● Não precisa saber nada de Docker
● Licenciado com Creative Commons
http://tinyurl.com/docker-devel
Introdução ao ecossistema Docker
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 IncProvedor 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
Ecossistema do Docker
Dev Tools
Official Repositories
Operating Systems
Big Data
Service Discovery
Build / Continuous Integration
Configuration ManagementConsulting &Training
Management
Storage
Clustering & Scheduling
Networking
Infrastructure & Service Providers
Storage
Security
Monitoring & Logging
6
Básico do Docker
Docker ImageThe basis of a Docker container
Docker ContainerThe 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 RegistryOn-premises registry for image storing and collaboration
Applications are changing
8
Loosely Coupled Services
Many Small Servers
~2000 Today
Monolithic
Big Servers
Slow changing
Rapidly updated
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
• 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
Solução
11
Static Website
Web Front End
Background Workers
User DB
Analytics DB
QueueAPI Endpoint
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.
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.
Docker ToolboxTudo que você precisa dentro de uma caixa
• Toolbox inclue:– Kitematic– Docker CLI– Docker Machine– Docker Swarm– Docker Compose
14
Docker Toolbox
15
Vamos instalar!
Containers vs. VMs
Camadas
Imagem e Containers
Arquitetura
Comandos básicos
Comando Explicação
docker pull <nome da imagem> Baixar imagem
docker images Listar as imagens locais
docker inspect <id imagem ou container> Inspecionar informações
docker run <nome da imagem> Iniciar um container
docker ps Listas os containers
docker exec <nome do container> <cmd> Executar comandos no container
docker pull
Exercicio
Baixe a imagem do python
# docker pull python
docker images
Exercicio
Verifique se imagem python existe localmente
# docker images
docker inspect
Exercicio
Verifique qual comando padrão da imagem
# docker inspect python
Obs: Verifique o valor de "CMD"
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
Exercicio
Execute a imagem python em modo interativo e acesse seu shell
# docker run -it python
Restrição de memória
# docker run -m <memória> <imagem>
Exercicio
Execute o container com apenas 300MB de limite
# docker run -it -m 300M python
Balanceamento de CPU
# docker run -c <peso> <imagem>
Valor base 1024
Exercicio
Execute o container com metade do peso
# docker run -it -c 512 python
Mapeamento de porta
# docker run -p portahost:portacontainer <imagem>
Docker host
Virtualbox
Container8080
80
192.168.99.100:80
Cliente
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
Mapeamento de volume
# docker run -v volhost:volcontainer <imagem>
Docker host
Virtualbox
Container
/Users/gomex/app
Cliente /Users
/app
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
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
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
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
Exercicio
Verifique quais containers estão em execução no momento
# docker ps
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
Exercicio
Vamos testar cada comando
# docker run -itd --name testepython python# docker stop testepython# docker start testepython# docker logs -f testepython# docker attach testepython
docker exec <parâmetros>
Parâmetro Explicação
-i Modo interativo
-t Com pseudo tty
Exercicio
Vamos iniciar um container em background e enviar comandos
# docker run -itd --name testealpine alpine /bin/sh# docker exec -it testealpine ls /etc
Exercicio
1) Crie uma conta na nuvem pública do docker (hub.docker.com)2) Pesquise online sobre uma imagem que você tenha interesse3) Leia README da imagem escolhida4) Baixe a imagem escolhida5) 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
Dockerfile
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.
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>)
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.7COPY . /codeWORKDIR /codeRUN pip install -r requirements.txtCMD python app.py
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).
# 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
Exercício
1)Escolha uma imagem para ser estendida2)Crie um Dockerfile com suas modificações3)Faça build da imagem4)Envie para nuvem
Perguntas?
[email protected]@gomexhttp://tinyurl.com/docker-br (Telegram)