O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

Docker: uma visão geral e exemplos de uso

2.090 visualizações

Publicada em

Palestra realizada na Latinoware 2015

Publicada em: Software
  • Seja o primeiro a comentar

Docker: uma visão geral e exemplos de uso

  1. 1. Docker: uma visão geral e exemplos de uso Palestrante: Tobias Sette 12 Conferencia Latino-americana de Software Livreª12 Conferencia Latino-americana de Software Livreª
  2. 2. 12 Conferencia Latino-americana de Software Livreª O que é docker? Docker é um projeto open source (Apache License 2.0) para empacotar, enviar e executar diversas aplicações em leves containers. Containers docker são independentes de hardware e plataforma. Tornando possível executá-los em diversos ambientes, desde o seu notebook até grandes ambientes em nuvem - e eles não requerem que você utilize uma linguagem, framework ou sistema de pacotes específico. Isto os torna uma excelente ferramenta para deploy e escalabilidade de aplicativos web, bancos de dados e serviços de backend sem depender de um provedor ou stack em particular. https://github.com/docker/docker
  3. 3. 12 Conferencia Latino-americana de Software Livreª A grosso modo, assim como o Pip está para o Python e o npm para o Node, o Docker está para ambientes. Criando apenas as tecnologias que faltavam, sem reinventar a roda.
  4. 4. 12 Conferencia Latino-americana de Software Livreª O projeto foi liberado, como uma engine para deploy, em março de 2013 pela startup dotCloud. Em abril de 2015 a empresa passou a ter 1 bilhão de dólares em valor de mercado. Em outubro de 2015 o ecossistema conta com vários projetos: Docker engine, Docker Registry, Docker Hub, Docker Hub Enterprise, Docker Machine, Docker Compose, Kitematic, Docker Swarm. https://en.wikipedia.org/wiki/Docker_%28software%29 http://docs.master.dockerproject.org/ http://www.forbes.com/sites/alexkonrad/2015/04/14/docker-raises-95-million-at-billion-valuation/
  5. 5. 12 Conferencia Latino-americana de Software Livreª O que são containers? Quando o kernel do sistema operacional é capaz de permitir múltiplas instâncias isoladas em user-space, ao invés de somente uma, cada instância pode ser chamada de container ou software container). Por compartilharem o mesmo kernel e parte dos recursos, containers consomem muito menos recursos do que uma máquina virtual. https://en.wikipedia.org/wiki/Operating-system-level_virtualization http://doger.io/
  6. 6. 12 Conferencia Latino-americana de Software Livreª VMs vs. Containers http://www.zdnet.com/article/what-is-docker-and-why-is-it-so-darn-popular/
  7. 7. 12 Conferencia Latino-americana de Software Livreª Tecnologia de virtualização do Docker https://en.wikipedia.org/wiki/Docker_%28software%29 https://docs.docker.com/introduction/understanding-docker/ Futuro: BSD Jails Solaris Zones
  8. 8. 12 Conferencia Latino-americana de Software Livreª http://docs.master.dockerproject.org/introduction/understanding-docker/
  9. 9. 12 Conferencia Latino-americana de Software Livreª Benefícios * Baixa curva de aprendizagem/utilização se comparado com outras tecnologias de containers (LXC, cgroups, etc) * Comunidade ativa * Repositório imagens, possibilitando o compartilhamento e colaboração * Integração com ferramentas de DevOps (Puppet, Chef, Vagrant, Ansible) * Economia de recursos (espaço em disco, processamento, memória) * Versionamento e cache * Suporte empresarial
  10. 10. 12 Conferencia Latino-americana de Software Livreª 16/09/14 - http://sdtimes.com/docker-stacks-40-million-round/ * Padronização (popularidade e parcerias) https://www.docker.com/customers
  11. 11. 12 Conferencia Latino-americana de Software Livreª * Segurança * Escalabilidade horizontal e vertical * Orquestração de todo o ambiente * Deploy facilitado http://blog.docker.com/2014/06/announcing-docker-hub-and-official-repositories/
  12. 12. 12 Conferencia Latino-americana de Software Livreª * Juntamente com a cultura de DevOps, permite que você possa mais facilmente utilizar ferramentas top de linha (linguagens, bibliotecas, etc) pois o ambiente já está pronto para ser provisionado e, querendo ou não, algum nível de documentação já foi gerado * Agiliza a entrega de software * Aumenta a agilidade de correção. É muito mais fácil e preciso reenviar um container completo (que já passou cliclo docker) do que enviar um patch em um arquitetura monolítica. * Para implementá-lo é necessário que as várias áreas da empresa contribuam, o que gera DevOps na prática.
  13. 13. 12 Conferencia Latino-americana de Software Livreª Economia de $$$$ (energia, hardware, tempo)! ZDNet - James Bottomley: com um sistema de containers perfeitamenete tunado, é possível ter de quatro a seis vezes o número de instância de servidores de aplicação do que utilizando VMs com Xen ou KVM http://www.zdnet.com/article/what-is-docker-and-why-is-it-so-darn-popular/ CTO virtualização parallels.com Desenvolvedor Kernel Linux
  14. 14. 12 Conferencia Latino-americana de Software Livreª Instalação http://docs.docker.com/linux/started/ https://packages.debian.org/search?keywords=docker.io http://packages.ubuntu.com/search?keywords=docker&searchon=names&suite=all&section=all https://docs.docker.com/installation/debian/ https://docs.docker.com/installation/ubuntulinux/
  15. 15. 12 Conferencia Latino-americana de Software Livreª Ciclo de uso https://github.com/wsargent/docker-cheat-sheet http://superuser.com/questions/756999/whats-the-difference-between-docker-stop-and-docker-kill * docker create cria um container mas não o inicia * docker run cria e inicia um container em apenas uma operação * docker stop para um container * docker start inicia um container já criado * docker restart reinicia um container * docker rm deleta um container * docker kill envia um SIGKILL para o container * docker attach irá conectar a um container em execução * docker wait aguarda até que o container pare
  16. 16. 12 Conferencia Latino-americana de Software Livreª Obtendo informações https://github.com/wsargent/docker-cheat-sheet * docker ps exibe os containers em execução (-a para todos) * docker logs obtém logs a patir do container (saída) * docker inspect visualiza todas as informações de um container (notavelmente o endereço IP) * docker events exibe os eventos a partir do daemon em tempo real * docker port exibe mapeamento de portas (NAT) * docker top exibe os processos em execução no container * docker stats exibe estatísticas da utilização de recursos no container * docker diff exibe arquivos alterados no sistema de arquivos do container
  17. 17. 12 Conferencia Latino-americana de Software Livreª Outros comandos relevantes https://github.com/wsargent/docker-cheat-sheet * docker cp copia arquivos ou diretórios entre o container e o sistema de arquivos local * docker export -o arquivo.tar nome_container exporta o sistema de arquivos do container para um tarball * docker exec executa comandos em um container
  18. 18. 12 Conferencia Latino-americana de Software Livreª Imagens https://github.com/wsargent/docker-cheat-sheet * docker images exibe todas as imagens * docker import importa uma imagem de um arquivo tar * docker build cria uma imagem a partir de um Dockerfile * docker commit cria uma imagem a patir de um container * docker rmi remove uma imagem * docker load carrega uma imagem a partir de um arquivo tar, incluindo camadas e tags * docker save salva uma imagem em um arquivo tar com todas as camadas, tags e versões * docker history exibe o histórico de uma imagem * docker tag renomeia a imagem (localmente ou no hub).
  19. 19. 12 Conferencia Latino-americana de Software Livreª Dockerfile https://hub.docker.com/_/hello-world/ https://github.com/docker-library/hello-world/blob/22ecfe456f254d5babe6e413bed2de77cfaba047/Dockerfile FROM scratch COPY hello / CMD ["/hello"] Hello World
  20. 20. 12 Conferencia Latino-americana de Software Livreª
  21. 21. 12 Conferencia Latino-americana de Software Livreª Exemplos de uso https://github.com/shekhargulati/python-flask-docker-hello-world FROM debian:8 RUN apt-get update && apt-get install -y python python-pip curl RUN curl -sSL https://github.com/shekhargulati/python-flask-docker-hello-world/archive/master.tar.gz | tar -xzv RUN cd python-flask-docker-hello-world-master && /usr/bin/pip install -r requirements.txt EXPOSE 5000 CMD ["/usr/bin/python", "python-flask-docker-hello-world-master/app.py"] Python + Flask (372.2 MB)
  22. 22. 12 Conferencia Latino-americana de Software Livreª https://hub.docker.com/_/php/ docker build --tag=imagem-aplicacao-flask . docker run --interactive --tty --rm --publish 80:5000 --name container-aplicacao-flask imagem-aplicacao-flask
  23. 23. 12 Conferencia Latino-americana de Software Livreª PHP + Apache (480.7 MB) https://hub.docker.com/_/php/ FROM php:5.6-apache COPY codigo_fonte/ /var/www/html/
  24. 24. 12 Conferencia Latino-americana de Software Livreª https://hub.docker.com/_/php/ docker build --tag=imagem-aplicacao-teste . docker run --interactive --tty --rm --publish 80:80 --name container-aplicacao-teste imagem-aplicacao-teste
  25. 25. 12 Conferencia Latino-americana de Software Livreª Java + Wildfly (639 MB) https://hub.docker.com/r/jboss/wildfly/ FROM jboss/wildfly ADD aplicacao.ear /opt/jboss/wildfly/standalone/deployments/
  26. 26. 12 Conferencia Latino-americana de Software Livreª https://hub.docker.com/r/jboss/wildfly/ docker build --tag=imagem-aplicacao-wildfly . docker run --interactive --tty --rm --publish 80:8080 --name container-aplicacao-wildfly imagem-aplicacao-wildfly
  27. 27. 12 Conferencia Latino-americana de Software Livreª man docker-run https://github.com/wsargent/docker-cheat-sheet#links docker run -d --name teste1 --hostname teste1 imagem-aplicacao-teste docker run -d --name teste2 --hostname teste2 --link teste1 imagem-aplicacao-teste docker exec -it teste1 /bin/bash root@teste1:/var/www/html# ping teste2 PING teste2 (172.17.0.11): 56 data bytes 64 bytes from 172.17.0.11: icmp_seq=0 ttl=64 time=0.139 ms 64 bytes from 172.17.0.11: icmp_seq=1 ttl=64 time=0.112 ms 64 bytes from 172.17.0.11: icmp_seq=2 ttl=64 time=0.124 ms 64 bytes from 172.17.0.11: icmp_seq=3 ttl=64 time=0.081 ms ^C--- teste2 ping statistics --- 4 packets transmitted, 4 packets received, 0% packet loss round-trip min/avg/max/stddev = 0.081/0.114/0.139/0.000 ms root@teste1:/var/www/html#
  28. 28. 12 Conferencia Latino-americana de Software Livreª man docker-run https://github.com/wsargent/docker-cheat-sheet#volumes https://medium.com/@ramangupta/why-docker-data-containers-are-good-589b3c6c749e docker run --name=container-dados –hostname=container-dados --volume /home/tobias/codigo:/var/www/html -d debian:8 true docker run --name=teste-volumes --volumes-from=container-dados --publish 80:80 -d imagem-aplicacao-teste docker exec -it teste-volumes /bin/bash root@f3cf1438b914:/var/www/html# ls css.css index.php js.js root@f3cf1438b914:/var/www/html#
  29. 29. 12 Conferencia Latino-americana de Software Livreª Firefox https://hub.docker.com/r/jboss/wildfly/
  30. 30. 12 Conferencia Latino-americana de Software Livreª https://hub.docker.com/r/chrisdaish/firefox/ docker run -v $HOME/Downloads:/home/firefox/Downloads:rw -v /tmp/.X11-unix:/tmp/.X11-unix -v /dev/snd:/dev/snd --privileged -e uid=$(id -u) -e gid=$(id -g) -e DISPLAY=unix$DISPLAY --name firefox chrisdaish/firefox
  31. 31. 12 Conferencia Latino-americana de Software Livreª Fatores a serem considerados * Você precisa de outro sistema operacional além do GNU/Linux * Você precisa de versões diferentes do kernel linux * Sua infra não pode ser mista (ubuntu) * Compreender as modificações feitas na imagem que você está usando (ex.: Debian) * Aumento da curva de aprendizagem (imagens personalizadas, logs, cron, rede) * está em evolução (ex.: rede) https://joeyh.name/blog/entry/docker_run_debian/ https://github.com/docker/libnetwork
  32. 32. 12 Conferencia Latino-americana de Software Livreª https://github.com/opencontainers/runc/blob/master/libcontainer/SPEC.md http://phusion.github.io/baseimage-docker/ * Orientado à serviços únicos e efêmeros Fix: init (runit), apt, syslog, cron, sshd, setuser
  33. 33. 12 Conferencia Latino-americana de Software Livreª Projetos Interessantes * Lista de recursos e projetos para Docker https://github.com/veggiemonk/awesome-docker * Kubernetes – Gerenciador de clusters de containers https://github.com/kubernetes/kubernetes * DockerUI – Interface Web - https://github.com/crosbymichael/dockerui * Deis – PaaS (Heroku) - https://github.com/deis/deis * Scripts criação das imagens oficiais https://github.com/docker-library * Jboss projects - http://www.jboss.org/docker/ * Os 5 mais populares containers docker baseados em java https://deis.com/blog/2015/ready-made-java-containers-2
  34. 34. 12 Conferencia Latino-americana de Software Livreª DevOPS * http://martinfowler.com/bliki/DevOpsCulture.html
  35. 35. 12 Conferencia Latino-americana de Software Livreª O que ver na Latinoware 2015 * 14/10 - 13h - Docker, o que é e como usar - Marcos Sungaila * 14/10 - 13h - Atomic Host + Docker + Cockpit - Alessandro Silva * 14/10 - 13h - OpenShift v3 - A revolução dos containers - Ricardo Martinelli * 14/10 - 16h - Containers: passado, presente e futuro - Carlos Eduardo * 14/10 - 18h - ansible: DevOps simplificado, de sysadmins para sysadmins - Faw * 15/10 - 13h - Containers versus Virtualização - Marcos Sungaila * 16/10 - 10h - DevOps: infraestrutura ágil - Faw * 16/10 - 16:30 - Devops: Base para transformação da TI - Christiano (linuxmen) Palestras * 16/10/15 - 10h às 14h - Usando o Docker no ambiente de desenvolvimento - Christiano (linuxmen) Minicursos
  36. 36. 12 Conferencia Latino-americana de Software Livreª Busque! Não acredite em nada, mas entenda o quanto puder. Esta palestra pode lhe dar um rumo ou ideias, mas não certezas. Descubra por você mesmo e poderá fixar melhor as informações.
  37. 37. Dúvidas? Contato: contato@tobias.ws https://github.com/gnumoksha/ https://twitter.com/gnumoksha 12 Conferencia Latino-americana de Software Livreª

×