Docker: uma viso geral e exemplos de uso
Palestrante:
Tobias Sette
12 Conferencia Latino-americana de Software Livre
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 aplicaes em leves containers.
Containers docker so independentes de hardware e plataforma. Tornando possvel execut-los em diversos ambientes, desde o seu notebook at grandes ambientes em nuvem - e eles no requerem que voc utilize uma linguagem, framework ou sistema de pacotes especfico. Isto os torna uma excelente ferramenta para deploy e escalabilidade de aplicativos web, bancos de dados e servios de backend sem depender de um provedor ou stack em particular.
https://github.com/docker/docker
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.
12 Conferencia Latino-americana de Software Livre
O projeto foi liberado, como uma engine para deploy, em maro de 2013 pela startup dotCloud.
Em abril de 2015 a empresa passou a ter 1 bilho de dlares em valor de mercado.
Em outubro de 2015 o ecossistema conta com vrios 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/
12 Conferencia Latino-americana de Software Livre
O que so containers?
Quando o kernel do sistema operacional capaz de permitir mltiplas instncias isoladas em user-space, ao invs de somente uma, cada instncia 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 mquina virtual.
https://en.wikipedia.org/wiki/Operating-system-level_virtualization
http://doger.io/
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/
12 Conferencia Latino-americana de Software Livre
Tecnologia de virtualizao do Docker
https://en.wikipedia.org/wiki/Docker_%28software%29https://docs.docker.com/introduction/understanding-docker/
Futuro:
BSD JailsSolaris Zones
12 Conferencia Latino-americana de Software Livre
http://docs.master.dockerproject.org/introduction/understanding-docker/
12 Conferencia Latino-americana de Software Livre
Benefcios
* Baixa curva de aprendizagem/utilizao se comparado com outras
tecnologias de containers (LXC, cgroups, etc)* Comunidade ativa*
Repositrio imagens, possibilitando o compartilhamento e colaborao*
Integrao com ferramentas de DevOps (Puppet, Chef, Vagrant,
Ansible)
* Economia de recursos (espao em disco, processamento,
memria)
* Versionamento e cache* Suporte empresarial
12 Conferencia Latino-americana de Software Livre
16/09/14 - http://sdtimes.com/docker-stacks-40-million-round/
* Padronizao (popularidade e parcerias)
https://www.docker.com/customers
12 Conferencia Latino-americana de Software Livre
* Segurana
* Escalabilidade horizontal e vertical* Orquestrao de todo o
ambiente* Deploy facilitado
http://blog.docker.com/2014/06/announcing-docker-hub-and-official-repositories/
docker garantir que sempre rode igual = coloque pouca coisa, menos coisas mudaro e influenciaro o comportamento
* Tem um ambiente dev que pode ser criado automaticamente em __minutos__ e no precisar se preocupar se suas ferramentas (IDE, libs, etc) vo cusar algum conflito em produo.* Sem inconsistncias entre ambiente de dev e produo. Rodou localmente = rodou em testes = rodou remotamente.
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 no, algum nvel de documentao j foi gerado* Agiliza a entrega de software* Aumenta a agilidade de correo. muito mais fcil e preciso reenviar um container completo (que j passou cliclo docker) do que enviar um patch em um arquitetura monoltica.* Para implement-lo necessrio que as vrias reas da empresa contribuam, o que gera DevOps na prtica.
12 Conferencia Latino-americana de Software Livre
Economia de $$$$ (energia, hardware, tempo)!
ZDNet - James Bottomley: com um sistema de containers
perfeitamenete tunado, possvel ter de quatro a seis vezes o nmero
de instncia de servidores de aplicao do que utilizando VMs com Xen
ou KVM
http://www.zdnet.com/article/what-is-docker-and-why-is-it-so-darn-popular/
CTO virtualizao parallels.com
Desenvolvedor Kernel Linux
12 Conferencia Latino-americana de Software Livre
Instalao
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§ion=all
https://docs.docker.com/installation/debian/
https://docs.docker.com/installation/ubuntulinux/
12 Conferencia Latino-americana de Software Livre
Ciclo de uso
https://github.com/wsargent/docker-cheat-sheethttp://superuser.com/questions/756999/whats-the-difference-between-docker-stop-and-docker-kill
* docker create cria um container mas no o inicia* docker run cria e inicia um container em apenas uma operao* 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 execuo* docker wait aguarda at que o container pare
12 Conferencia Latino-americana de Software Livre
Obtendo informaes
https://github.com/wsargent/docker-cheat-sheet
* docker ps exibe os containers em execuo (-a para todos)* docker logs obtm logs a patir do container (sada)* docker inspect visualiza todas as informaes de um container (notavelmente o endereo 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 execuo no container* docker stats exibe estatsticas da utilizao de recursos no container* docker diff exibe arquivos alterados no sistema de arquivos do container
12 Conferencia Latino-americana de Software Livre
Outros comandos relevantes
https://github.com/wsargent/docker-cheat-sheet
* docker cp copia arquivos ou diretrios 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
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 verses* docker history exibe o histrico de uma imagem* docker tag renomeia a imagem (localmente ou no hub).
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 scratchCOPY hello /CMD ["/hello"]Hello World
12 Conferencia Latino-americana de Software Livre
12 Conferencia Latino-americana de Software Livre
Exemplos de uso
https://github.com/shekhargulati/python-flask-docker-hello-world
FROM debian:8RUN apt-get update && apt-get install -y python python-pip curlRUN curl -sSL https://github.com/shekhargulati/python-flask-docker-hello-world/archive/master.tar.gz | tar -xzvRUN cd python-flask-docker-hello-world-master && /usr/bin/pip install -r requirements.txtEXPOSE 5000CMD ["/usr/bin/python", "python-flask-docker-hello-world-master/app.py"]Python + Flask (372.2 MB)
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
12 Conferencia Latino-americana de Software Livre
PHP + Apache (480.7 MB)
https://hub.docker.com/_/php/
FROM php:5.6-apacheCOPY codigo_fonte/ /var/www/html/
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
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/
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
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/bashroot@teste1:/var/www/html# ping teste2PING teste2 (172.17.0.11): 56 data bytes64 bytes from 172.17.0.11: icmp_seq=0 ttl=64 time=0.139 ms64 bytes from 172.17.0.11: icmp_seq=1 ttl=64 time=0.112 ms64 bytes from 172.17.0.11: icmp_seq=2 ttl=64 time=0.124 ms64 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 lossround-trip min/avg/max/stddev = 0.081/0.114/0.139/0.000 msroot@teste1:/var/www/html#
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/bashroot@f3cf1438b914:/var/www/html# lscss.css index.php js.jsroot@f3cf1438b914:/var/www/html#
12 Conferencia Latino-americana de Software Livre
Firefox
https://hub.docker.com/r/jboss/wildfly/
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
12 Conferencia Latino-americana de Software Livre
Fatores a serem considerados
* Voc precisa de outro sistema operacional alm do GNU/Linux* Voc precisa de verses diferentes do kernel linux* Sua infra no pode ser mista (ubuntu)* Compreender as modificaes feitas na imagem que voc est usando (ex.: Debian)* Aumento da curva de aprendizagem (imagens personalizadas, logs, cron, rede)* est em evoluo (ex.: rede)
https://joeyh.name/blog/entry/docker_run_debian/
https://github.com/docker/libnetwork
12 Conferencia Latino-americana de Software Livre
https://github.com/opencontainers/runc/blob/master/libcontainer/SPEC.md
http://phusion.github.io/baseimage-docker/
* Orientado servios nicos e efmeros
Fix: init (runit), apt, syslog, cron, sshd, setuser
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 criao 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
12 Conferencia Latino-americana de Software Livre
DevOPS
* http://martinfowler.com/bliki/DevOpsCulture.html
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 revoluo 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 Virtualizao - Marcos Sungaila* 16/10 - 10h - DevOps: infraestrutura gil - Faw* 16/10 - 16:30 - Devops: Base para transformao da TI - Christiano (linuxmen)
Palestras
* 16/10/15 - 10h s 14h - Usando o Docker no ambiente de desenvolvimento - Christiano (linuxmen)
Minicursos
12 Conferencia Latino-americana de Software Livre
Busque!
No acredite em nada, mas entenda o quanto puder.
Esta palestra pode lhe dar um rumo ou ideias, mas no certezas. Descubra por voc mesmo e poder fixar melhor as informaes.
Dvidas?
Contato:
[email protected]://github.com/gnumoksha/
https://twitter.com/gnumoksha
12 Conferencia Latino-americana de Software Livre