O documento fornece uma introdução abrangente ao Docker, incluindo: (1) O que é o Docker e como ele empacota e executa aplicações em containers leves; (2) Os benefícios do Docker como ferramenta para implantação e escalabilidade de aplicativos; (3) Exemplos de uso do Docker com diferentes linguagens/frameworks como Python/Flask, PHP/Apache e Java/Wildfly.
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. 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. 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. 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. 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. 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. 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
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. 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. 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 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. 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
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. 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. 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. 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. 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
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. 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. 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
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. 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.
docker garantir que sempre rode igual = coloque pouca coisa, menos coisas mudarão e influenciarão o comportamento
* Tem um ambiente dev que pode ser criado automaticamente em __minutos__ e não precisar se preocupar se suas ferramentas (IDE, libs, etc) vão cusar algum conflito em produção.
* Sem inconsistências entre ambiente de dev e produção. Rodou localmente = rodou em testes = rodou remotamente.