Docker: uma visão geral e exemplos de uso

Embed Size (px)

Citation preview

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&section=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