SlideShare uma empresa Scribd logo
1 de 37
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ª
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
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 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/
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/
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 virtualização do
Docker
https://en.wikipedia.org/wiki/Docker_%28software%29
https://docs.docker.com/introduction/understanding-docker/
Futuro:
BSD Jails
Solaris Zones
12 Conferencia Latino-americana de Software Livreª
http://docs.master.dockerproject.org/introduction/understanding-docker/
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
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
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 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.
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
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/
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
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
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
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).
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
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: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)
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-apache
COPY 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/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#
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#
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 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
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
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
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 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
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.
Dúvidas?
Contato:
contato@tobias.ws
https://github.com/gnumoksha/
https://twitter.com/gnumoksha
12 Conferencia Latino-americana de Software Livreª

Mais conteúdo relacionado

Mais procurados

Midi technique - présentation docker
Midi technique - présentation dockerMidi technique - présentation docker
Midi technique - présentation dockerOlivier Eeckhoutte
 
DCSF19 Dockerfile Best Practices
DCSF19 Dockerfile Best PracticesDCSF19 Dockerfile Best Practices
DCSF19 Dockerfile Best PracticesDocker, Inc.
 
Virtualization, Containers, Docker and scalable container management services
Virtualization, Containers, Docker and scalable container management servicesVirtualization, Containers, Docker and scalable container management services
Virtualization, Containers, Docker and scalable container management servicesabhishek chawla
 
Let's talk about Failures with Kubernetes - Hamburg Meetup
Let's talk about Failures with Kubernetes - Hamburg MeetupLet's talk about Failures with Kubernetes - Hamburg Meetup
Let's talk about Failures with Kubernetes - Hamburg MeetupHenning Jacobs
 
[CNCF TAG-Runtime 2022-10-06] Lima
[CNCF TAG-Runtime 2022-10-06] Lima[CNCF TAG-Runtime 2022-10-06] Lima
[CNCF TAG-Runtime 2022-10-06] LimaAkihiro Suda
 
Docker 101 - Getting started
Docker 101 - Getting startedDocker 101 - Getting started
Docker 101 - Getting startedMatheus Marabesi
 
Docker Introduction.pdf
Docker Introduction.pdfDocker Introduction.pdf
Docker Introduction.pdfOKLABS
 
Curso Kubernetes CodeURJC
Curso Kubernetes CodeURJCCurso Kubernetes CodeURJC
Curso Kubernetes CodeURJCMicael Gallego
 
Cloud Computing
Cloud ComputingCloud Computing
Cloud ComputingAlê Borba
 
초심자를 위한 도커 소개 및 입문
초심자를 위한 도커 소개 및 입문초심자를 위한 도커 소개 및 입문
초심자를 위한 도커 소개 및 입문Daniel Seo
 
Docker Explained | What Is A Docker Container? | Docker Simplified | Docker T...
Docker Explained | What Is A Docker Container? | Docker Simplified | Docker T...Docker Explained | What Is A Docker Container? | Docker Simplified | Docker T...
Docker Explained | What Is A Docker Container? | Docker Simplified | Docker T...Edureka!
 
How to write a Dockerfile
How to write a DockerfileHow to write a Dockerfile
How to write a DockerfileKnoldus Inc.
 

Mais procurados (20)

Docker
DockerDocker
Docker
 
Docker on Docker
Docker on DockerDocker on Docker
Docker on Docker
 
Midi technique - présentation docker
Midi technique - présentation dockerMidi technique - présentation docker
Midi technique - présentation docker
 
DCSF19 Dockerfile Best Practices
DCSF19 Dockerfile Best PracticesDCSF19 Dockerfile Best Practices
DCSF19 Dockerfile Best Practices
 
Virtualization, Containers, Docker and scalable container management services
Virtualization, Containers, Docker and scalable container management servicesVirtualization, Containers, Docker and scalable container management services
Virtualization, Containers, Docker and scalable container management services
 
Docker basics
Docker basicsDocker basics
Docker basics
 
Let's talk about Failures with Kubernetes - Hamburg Meetup
Let's talk about Failures with Kubernetes - Hamburg MeetupLet's talk about Failures with Kubernetes - Hamburg Meetup
Let's talk about Failures with Kubernetes - Hamburg Meetup
 
[CNCF TAG-Runtime 2022-10-06] Lima
[CNCF TAG-Runtime 2022-10-06] Lima[CNCF TAG-Runtime 2022-10-06] Lima
[CNCF TAG-Runtime 2022-10-06] Lima
 
Docker Introduction
Docker IntroductionDocker Introduction
Docker Introduction
 
Docker 101 - Getting started
Docker 101 - Getting startedDocker 101 - Getting started
Docker 101 - Getting started
 
Présentation Docker
Présentation DockerPrésentation Docker
Présentation Docker
 
Docker Introduction.pdf
Docker Introduction.pdfDocker Introduction.pdf
Docker Introduction.pdf
 
Computação nas nuvens
Computação nas nuvensComputação nas nuvens
Computação nas nuvens
 
Curso Kubernetes CodeURJC
Curso Kubernetes CodeURJCCurso Kubernetes CodeURJC
Curso Kubernetes CodeURJC
 
Cloud Computing
Cloud ComputingCloud Computing
Cloud Computing
 
Docker Container Introduction
Docker Container IntroductionDocker Container Introduction
Docker Container Introduction
 
초심자를 위한 도커 소개 및 입문
초심자를 위한 도커 소개 및 입문초심자를 위한 도커 소개 및 입문
초심자를 위한 도커 소개 및 입문
 
Docker Explained | What Is A Docker Container? | Docker Simplified | Docker T...
Docker Explained | What Is A Docker Container? | Docker Simplified | Docker T...Docker Explained | What Is A Docker Container? | Docker Simplified | Docker T...
Docker Explained | What Is A Docker Container? | Docker Simplified | Docker T...
 
Docker
DockerDocker
Docker
 
How to write a Dockerfile
How to write a DockerfileHow to write a Dockerfile
How to write a Dockerfile
 

Destaque

Docker na vida real
Docker na vida realDocker na vida real
Docker na vida realFernando Ike
 
TDC 2015 POA - O Fantástico Mundo de Docker
TDC 2015 POA - O Fantástico Mundo de DockerTDC 2015 POA - O Fantástico Mundo de Docker
TDC 2015 POA - O Fantástico Mundo de DockerStefan Teixeira
 
Desenvolvendo e implantando aplicações PHP utilizando Docker
Desenvolvendo e implantando aplicações PHP utilizando DockerDesenvolvendo e implantando aplicações PHP utilizando Docker
Desenvolvendo e implantando aplicações PHP utilizando DockerBruno Ricardo Siqueira
 
Docker, facilitando a vida do desenvolvimento
Docker, facilitando a vida do desenvolvimentoDocker, facilitando a vida do desenvolvimento
Docker, facilitando a vida do desenvolvimentoSérgio Lima
 
Verdades que não querem te contar sobre Docker
Verdades que não querem te contar sobre DockerVerdades que não querem te contar sobre Docker
Verdades que não querem te contar sobre DockerLuís Bianchin
 
O poder do Docker (7 Masters)
O poder do Docker (7 Masters)O poder do Docker (7 Masters)
O poder do Docker (7 Masters)Wellington Silva
 
Deploying Docker Containers
Deploying Docker ContainersDeploying Docker Containers
Deploying Docker ContainersHugo Henley
 
AWS Experience Fortaleza: Escalando sua aplicação Web com Beanstalk
AWS Experience Fortaleza: Escalando sua aplicação Web com BeanstalkAWS Experience Fortaleza: Escalando sua aplicação Web com Beanstalk
AWS Experience Fortaleza: Escalando sua aplicação Web com BeanstalkAmazon Web Services LATAM
 
Docker introduction
Docker introductionDocker introduction
Docker introductiondotCloud
 
Stop Being Lazy and Test Your Software
Stop Being Lazy and Test Your SoftwareStop Being Lazy and Test Your Software
Stop Being Lazy and Test Your SoftwareLaura Frank Tacho
 
Docker: um linux container engine
Docker:  um linux container engineDocker:  um linux container engine
Docker: um linux container engineHudson Brendon
 
Atividade5
Atividade5Atividade5
Atividade5abramo
 
Introdução ao NodeJS
Introdução ao NodeJSIntrodução ao NodeJS
Introdução ao NodeJSGiovanni Bassi
 

Destaque (20)

Docker na vida real
Docker na vida realDocker na vida real
Docker na vida real
 
TDC 2015 POA - O Fantástico Mundo de Docker
TDC 2015 POA - O Fantástico Mundo de DockerTDC 2015 POA - O Fantástico Mundo de Docker
TDC 2015 POA - O Fantástico Mundo de Docker
 
Desenvolvendo e implantando aplicações PHP utilizando Docker
Desenvolvendo e implantando aplicações PHP utilizando DockerDesenvolvendo e implantando aplicações PHP utilizando Docker
Desenvolvendo e implantando aplicações PHP utilizando Docker
 
Bem vindo ao Docker
Bem vindo ao DockerBem vindo ao Docker
Bem vindo ao Docker
 
Apresentação docker
Apresentação dockerApresentação docker
Apresentação docker
 
Webinar: Apresentando AWS Device Farm
Webinar: Apresentando AWS Device Farm Webinar: Apresentando AWS Device Farm
Webinar: Apresentando AWS Device Farm
 
Docker, facilitando a vida do desenvolvimento
Docker, facilitando a vida do desenvolvimentoDocker, facilitando a vida do desenvolvimento
Docker, facilitando a vida do desenvolvimento
 
Verdades que não querem te contar sobre Docker
Verdades que não querem te contar sobre DockerVerdades que não querem te contar sobre Docker
Verdades que não querem te contar sobre Docker
 
O poder do Docker (7 Masters)
O poder do Docker (7 Masters)O poder do Docker (7 Masters)
O poder do Docker (7 Masters)
 
Introdução ao docker
Introdução ao dockerIntrodução ao docker
Introdução ao docker
 
Deploying Docker Containers
Deploying Docker ContainersDeploying Docker Containers
Deploying Docker Containers
 
5. rodando containers docker na aws
5. rodando containers docker na aws5. rodando containers docker na aws
5. rodando containers docker na aws
 
AWS Experience Fortaleza: Escalando sua aplicação Web com Beanstalk
AWS Experience Fortaleza: Escalando sua aplicação Web com BeanstalkAWS Experience Fortaleza: Escalando sua aplicação Web com Beanstalk
AWS Experience Fortaleza: Escalando sua aplicação Web com Beanstalk
 
Docker introduction
Docker introductionDocker introduction
Docker introduction
 
Stop Being Lazy and Test Your Software
Stop Being Lazy and Test Your SoftwareStop Being Lazy and Test Your Software
Stop Being Lazy and Test Your Software
 
Apresentacao docker
Apresentacao dockerApresentacao docker
Apresentacao docker
 
Docker: um linux container engine
Docker:  um linux container engineDocker:  um linux container engine
Docker: um linux container engine
 
Docker
DockerDocker
Docker
 
Atividade5
Atividade5Atividade5
Atividade5
 
Introdução ao NodeJS
Introdução ao NodeJSIntrodução ao NodeJS
Introdução ao NodeJS
 

Semelhante a Docker: uma visão geral e exemplos de uso

Docker e suas tecnologias por @cesarnog
Docker e suas tecnologias por @cesarnogDocker e suas tecnologias por @cesarnog
Docker e suas tecnologias por @cesarnogCesar Augusto Nogueira
 
Re pensando-virtualização-através-linux containers
Re pensando-virtualização-através-linux containersRe pensando-virtualização-através-linux containers
Re pensando-virtualização-através-linux containersFrancisco Gonçalves
 
Container revolucao
Container revolucaoContainer revolucao
Container revolucaoFernando Ike
 
Primeiros passos com o Docker
Primeiros passos com o DockerPrimeiros passos com o Docker
Primeiros passos com o DockerWebSix
 
Docker 101 e Ambientes Imutáveis
Docker 101 e Ambientes Imutáveis Docker 101 e Ambientes Imutáveis
Docker 101 e Ambientes Imutáveis Wallison Marra
 
Treinamento Docker Básico
Treinamento Docker BásicoTreinamento Docker Básico
Treinamento Docker BásicoAndré Justi
 
Docker Para Maiores - GDG Cabreúva
Docker Para Maiores - GDG CabreúvaDocker Para Maiores - GDG Cabreúva
Docker Para Maiores - GDG CabreúvaMatheus Fidelis
 
Docker do básico a orquestração (PHPeste2016)
Docker do básico a orquestração (PHPeste2016)Docker do básico a orquestração (PHPeste2016)
Docker do básico a orquestração (PHPeste2016)Wellington Silva
 
Introdução-a-Docker-compactado.pdf
Introdução-a-Docker-compactado.pdfIntrodução-a-Docker-compactado.pdf
Introdução-a-Docker-compactado.pdfdadalt1
 
Usp codelabs (docker)
Usp codelabs (docker)Usp codelabs (docker)
Usp codelabs (docker)TechCobli
 
PHP Experience 2016 - [Palestra] Vagrant, LXC, Docker, etc: Entenda as difere...
PHP Experience 2016 - [Palestra] Vagrant, LXC, Docker, etc: Entenda as difere...PHP Experience 2016 - [Palestra] Vagrant, LXC, Docker, etc: Entenda as difere...
PHP Experience 2016 - [Palestra] Vagrant, LXC, Docker, etc: Entenda as difere...iMasters
 
Trabalhando em ambientes php com docker
Trabalhando em ambientes php com dockerTrabalhando em ambientes php com docker
Trabalhando em ambientes php com dockerAlef Castelo
 
Introdução ao docker
Introdução ao dockerIntrodução ao docker
Introdução ao dockerBenicio Ávila
 

Semelhante a Docker: uma visão geral e exemplos de uso (20)

Freedomday2016 - Fique na caixinha, docker
Freedomday2016 - Fique na caixinha, dockerFreedomday2016 - Fique na caixinha, docker
Freedomday2016 - Fique na caixinha, docker
 
Docker e suas tecnologias
Docker e suas tecnologiasDocker e suas tecnologias
Docker e suas tecnologias
 
Docker e suas tecnologias por @cesarnog
Docker e suas tecnologias por @cesarnogDocker e suas tecnologias por @cesarnog
Docker e suas tecnologias por @cesarnog
 
Re pensando-virtualização-através-linux containers
Re pensando-virtualização-através-linux containersRe pensando-virtualização-através-linux containers
Re pensando-virtualização-através-linux containers
 
Container revolucao
Container revolucaoContainer revolucao
Container revolucao
 
Primeiros passos com o Docker
Primeiros passos com o DockerPrimeiros passos com o Docker
Primeiros passos com o Docker
 
Olá docker
Olá dockerOlá docker
Olá docker
 
Oficina docker
Oficina dockerOficina docker
Oficina docker
 
Docker 101 e Ambientes Imutáveis
Docker 101 e Ambientes Imutáveis Docker 101 e Ambientes Imutáveis
Docker 101 e Ambientes Imutáveis
 
Treinamento Docker Básico
Treinamento Docker BásicoTreinamento Docker Básico
Treinamento Docker Básico
 
Docker Para Maiores - GDG Cabreúva
Docker Para Maiores - GDG CabreúvaDocker Para Maiores - GDG Cabreúva
Docker Para Maiores - GDG Cabreúva
 
Docker do básico a orquestração (PHPeste2016)
Docker do básico a orquestração (PHPeste2016)Docker do básico a orquestração (PHPeste2016)
Docker do básico a orquestração (PHPeste2016)
 
Aulão de docker
Aulão de dockerAulão de docker
Aulão de docker
 
Introdução-a-Docker-compactado.pdf
Introdução-a-Docker-compactado.pdfIntrodução-a-Docker-compactado.pdf
Introdução-a-Docker-compactado.pdf
 
O que é Docker?
O que é Docker?O que é Docker?
O que é Docker?
 
Usp codelabs (docker)
Usp codelabs (docker)Usp codelabs (docker)
Usp codelabs (docker)
 
PHP Experience 2016 - [Palestra] Vagrant, LXC, Docker, etc: Entenda as difere...
PHP Experience 2016 - [Palestra] Vagrant, LXC, Docker, etc: Entenda as difere...PHP Experience 2016 - [Palestra] Vagrant, LXC, Docker, etc: Entenda as difere...
PHP Experience 2016 - [Palestra] Vagrant, LXC, Docker, etc: Entenda as difere...
 
Trabalhando em ambientes php com docker
Trabalhando em ambientes php com dockerTrabalhando em ambientes php com docker
Trabalhando em ambientes php com docker
 
Docker
DockerDocker
Docker
 
Introdução ao docker
Introdução ao dockerIntrodução ao docker
Introdução ao docker
 

Docker: uma visão geral e exemplos de uso

  • 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
  • 8. 12 Conferencia Latino-americana de Software Livreª http://docs.master.dockerproject.org/introduction/understanding-docker/
  • 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
  • 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. 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
  • 20. 12 Conferencia Latino-americana de Software Livreª
  • 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. 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. 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. 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. 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. 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. 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. 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. 12 Conferencia Latino-americana de Software Livreª Firefox https://hub.docker.com/r/jboss/wildfly/
  • 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. 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
  • 34. 12 Conferencia Latino-americana de Software Livreª DevOPS * http://martinfowler.com/bliki/DevOpsCulture.html
  • 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.

Notas do Editor

  1. 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.