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 agora
Livro:
● 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 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
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
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
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
Queue
API
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 Toolbox
Tudo 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
Container
8080
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 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
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.7
COPY . /code
WORKDIR /code
RUN pip install -r requirements.txt
CMD 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 estendida
2)Crie um Dockerfile com suas modificações
3)Faça build da imagem
4)Envie para nuvem
Perguntas?
gomex@riseup.net
@gomex
http://tinyurl.com/docker-br (Telegram)

TDC 2016 Floripa - Workshop docker

  • 1.
  • 2.
    Quem sou eu RafaelGomes: ● 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 estoufazendo 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
  • 4.
  • 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 DevTools 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 DockerImage 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
  • 8.
    Applications are changing 8 Loosely Coupled Services ManySmall Servers ~2000 Today Monolithic Big Servers Slow changing Rapidly updated
  • 9.
    O Desafio 9 Virtual machines Server PublicCloud 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 combiná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
  • 11.
  • 12.
    Na visão dodesenvolvedor • 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 dosysadmin •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 quevocê precisa dentro de uma caixa • Toolbox inclue: – Kitematic – Docker CLI – Docker Machine – Docker Swarm – Docker Compose 14
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
    Comandos básicos Comando Explicação dockerpull <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
  • 21.
  • 22.
    Exercicio Baixe a imagemdo python # docker pull python
  • 23.
  • 24.
    Exercicio Verifique se imagempython existe localmente # docker images
  • 25.
  • 26.
    Exercicio Verifique qual comandopadrão da imagem # docker inspect python Obs: Verifique o valor de "CMD"
  • 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
  • 28.
    Exercicio Execute a imagempython em modo interativo e acesse seu shell # docker run -it python
  • 29.
    Restrição de memória #docker run -m <memória> <imagem>
  • 30.
    Exercicio Execute o containercom apenas 300MB de limite # docker run -it -m 300M python
  • 31.
    Balanceamento de CPU #docker run -c <peso> <imagem> Valor base 1024
  • 32.
    Exercicio Execute o containercom metade do peso # docker run -it -c 512 python
  • 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 daporta 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 asua 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âmetroExplicação Create <nome> Cria um volume Inspect <nome> Inspeciona o volume ls Lista os volumes existentes rm Remove o volume
  • 38.
    Crie um volumee 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âmetroExplicaçã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
  • 40.
    Exercicio Verifique quais containersestão em execução no momento # docker ps
  • 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
  • 42.
    Exercicio Vamos testar cadacomando # docker run -itd --name testepython python # docker stop testepython # docker start testepython # docker logs -f testepython # docker attach testepython
  • 43.
    docker exec <parâmetros> ParâmetroExplicação -i Modo interativo -t Com pseudo tty
  • 44.
    Exercicio Vamos iniciar umcontainer em background e enviar comandos # docker run -itd --name testealpine alpine /bin/sh # docker exec -it testealpine ls /etc
  • 45.
    Exercicio 1) Crie umaconta 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
  • 46.
  • 47.
    Dockerfile É o documentoque 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 imagempara ser estendida 2)Crie um Dockerfile com suas modificações 3)Faça build da imagem 4)Envie para nuvem
  • 53.