SlideShare uma empresa Scribd logo
1 de 37
Baixar para ler offline
André Luiz Teodoro
Problema
Nós queremos entregar nosso software funcional para
diferentes ambientes de forma simples.
Development
Production
CI Server
Contributor’s laptop
?
...
Principais problemas
 Mover do ambiente de desenvolvimento para
produção é difícil
 Libs conflitantes / diferentes versões;
 Diferentes SOs;
 Diferentes versões de banco de dados.
 Criar, atualizar e manter toda a software stack é difícil
 O projeto usualmente contém muitas libs, bd, serviços..;
 Difícil de manter uma versão do projeto reproduzível.
 Teste / Integração Contínua / Entrega contínua é
difícil de automatizar
Como resolver?
 Faça você mesmo (Do-It-Yourself)
1. Copiar / Instalar dependências (manualmente);
2. Preparar os bancos de dados;
3. Instalar a última versão do projeto;
4. Configurar as propriedades;
5. Testar o projeto em execução;
Como resolver?
6. Epaa! Alguma coisa está faltando, não está
funcionando!
7. Consertar os erros;
8. Repetir os testes da aplicação novamente até estar
funcionando;
9. Escrever manuais para ajudar outras pessoas a
configurar o (monstrinho).
Como resolver isso (VMs)
Empacotar tudo em uma VM e executar o deploy em
diferentes ambientes.
Development
Production
CI Server
Contributor’s laptop
...
Desvantagens das VMs
 Pesada. Quantas VMs você pode rodar em sua máquina?
 Consumo alto de recursos. Virtualização completa OS,
I/O, etc...
 Tamanho. Usualmente precisa de muitos GB para cada
VM.
 Problemas de portabilidade. Diferentes soluções de
virtualização.
 Gerenciamento. Difícil de manter / configurar / reusar
diferentes versões de cada VM.
Container?
Sim!
Linux Containers (LXC)
LXC
Ele é executado como um processo isolado no sistema
operacional hospedeiro, compartilhando o kernel com
outros recipientes, ou seja, permitem códigos e
aplicações rodarem separados de outros containers
compartilhando os mesmos recursos de hardware
LXC
Para construir uma área isolada para sua aplicação o
container utiliza entre outras funcionalidades do kernel:
 namespaces;
 cgroups;
 chroot.
Containers nova tecpix?
 Criar um container novo consiste em criar um novo
“chroot” o que exige muito I/O;
 Não é simples replicar um container.
Como resolver isso?
O que é docker?
Uma plataforma opensource (escrita em Go) que
automatiza a implementação de qualquer aplicação
de forma leve e portátil em containers auto-
suficientes, onde poderão ser executados nos mais
diversos ambientes.
Vantagens
 Cada novo imagem é um “diff” de outra imagem base
(rápido);
 Build automática (Dockerfile);
 Reuso (FROM: image);
 Compartilhamento (dockerhub);
 Funciona em qualquer máquina Linux.
Docker images
Uma imagem pode ser um sistema operacional como o
Ubuntu, mas também pode ser um Ubuntu com o seu
aplicativo web e todos os seus pacotes necessários
instalados.
*Cada imagem começa de uma imagem base, por
exemplo uma imagem do ubuntu ou fedora.
Docker container
Um Container nada mais é do que um chroot.
Podemos dizer que são as instâncias reais criados a partir
das imagens do Docker. Eles podem ser iniciados,
executados, parados, deletados, e movidos.
Docker Hub
Github do docker!
Oferece um sistema open-source para que pessoas
possam ter seus próprios servidores e armazenar
imagens privadas ou públicas.
Exemplo
$ docker pull ubuntu:14.04
No comando acima, realizamos o download da imagem
do ubuntu na tag 14.04.
Exemplo
Essa instrução irá executar o comando “cat /etc/lsb-release”
dentro do container do ubuntu. Se você conseguiu executar esse
comando com sucesso, parabéns, você já está utilizando o
Docker :).
$ docker run ubuntu:14.04 cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04.1 LTS"
Dockerfile
Basicamente um shell script com instruções para construir
uma imagem.
Comandos exclusivos dos Docker também podem ser
utilizados:
 Rodar um comando;
 Adicionar um arquivo ou diretório;
 Criar uma variável de ambiente.
Dockerfile: Exemplo
 Imagem base do ubuntu;
 Instala coisas básicas do ubuntu como gcc, make, curl;
 Instala o GhostScript;
 Instala o OpenJDK;
 Instala o ImageMagick;
Dockerfile: Exemplo
 Instala as fontes padrões;
 Instala o Tomcat;
 Copia o war do Projeto que está na mesma pasta para o
diretório webapps do Tomcat;
 Inicia o Tomcat.
Dockerfile: Exemplo
# Pull base image.
FROM ubuntu:14.04
# Install Java.
RUN 
apt-get update && 
apt-get install -y openjdk-7-jdk && 
rm -rf /var/lib/apt/lists/*
Construir uma imagem
$ docker build -t pdfsevices/ubuntu .
Constrói uma imagem com o nome pdfservices/ubuntu.
Construir uma imagem
$ docker images
Executando um container com
base na imagem criada
$ docker run -p 3389:8080 -d pdfservices/ubuntu
Comandos úteis
 Open terminal shell in the container
$ docker run -i -t pdfservices/ubuntu /bin/bash
 List running containers
$ docker ps
 Execute a shell command inside the container
$ docker exec <CONTAINER ID> ls
Mais informações
 https://docs.docker.com
 https://github.com/IPGPTP/pdfservices/blob/r6s2/del
iverables/docker/docker_config.txt
Obrigado!

Mais conteúdo relacionado

Mais procurados

Mais procurados (20)

Apresentacao docker
Apresentacao dockerApresentacao docker
Apresentacao docker
 
Docker: uma visão geral
Docker: uma visão geralDocker: uma visão geral
Docker: uma visão geral
 
O que é docker?
O que é docker?O que é docker?
O que é docker?
 
O que é Docker?
O que é Docker?O que é Docker?
O que é Docker?
 
Introdução a Containers Docker
Introdução a Containers DockerIntrodução a Containers Docker
Introdução a Containers Docker
 
Docker: uma visão geral e exemplos de uso
Docker: uma visão geral e exemplos de usoDocker: uma visão geral e exemplos de uso
Docker: uma visão geral e exemplos de uso
 
Apresentação docker
Apresentação dockerApresentação docker
Apresentação docker
 
Introdução ao docker
Introdução ao dockerIntrodução ao docker
Introdução ao docker
 
Introdução à plataforma Docker
Introdução à plataforma DockerIntrodução à plataforma Docker
Introdução à plataforma Docker
 
Treinamento Docker Básico
Treinamento Docker BásicoTreinamento Docker Básico
Treinamento Docker Básico
 
Olá docker
Olá dockerOlá docker
Olá docker
 
Docker, facilitando a vida do desenvolvimento
Docker, facilitando a vida do desenvolvimentoDocker, facilitando a vida do desenvolvimento
Docker, facilitando a vida do desenvolvimento
 
Freedomday2016 - Fique na caixinha, docker
Freedomday2016 - Fique na caixinha, dockerFreedomday2016 - Fique na caixinha, docker
Freedomday2016 - Fique na caixinha, docker
 
Bem vindo ao Docker
Bem vindo ao DockerBem vindo ao Docker
Bem vindo ao Docker
 
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
 
Desenvolvendo com PHP e Docker
Desenvolvendo com PHP e DockerDesenvolvendo com PHP e Docker
Desenvolvendo com PHP e Docker
 
GIT Básico
GIT BásicoGIT Básico
GIT Básico
 
O poder do Docker (7 Masters)
O poder do Docker (7 Masters)O poder do Docker (7 Masters)
O poder do Docker (7 Masters)
 
Docker na vida real
Docker na vida realDocker na vida real
Docker na vida real
 
Docker
DockerDocker
Docker
 

Semelhante a Automatize entregas com Docker

Introdução ao docker
Introdução ao dockerIntrodução ao docker
Introdução ao dockerBenicio Ávila
 
Desenvolvimento em .NET utilizando Docker - Meetup 8 Itu Developers
Desenvolvimento em .NET utilizando Docker - Meetup 8 Itu DevelopersDesenvolvimento em .NET utilizando Docker - Meetup 8 Itu Developers
Desenvolvimento em .NET utilizando Docker - Meetup 8 Itu DevelopersDextra Sistemas / Etec Itu
 
Introdução-a-Docker-compactado.pdf
Introdução-a-Docker-compactado.pdfIntrodução-a-Docker-compactado.pdf
Introdução-a-Docker-compactado.pdfdadalt1
 
Introdução ao Docker
Introdução ao DockerIntrodução ao Docker
Introdução ao DockerRafael Dutra
 
Docker: um linux container engine
Docker:  um linux container engineDocker:  um linux container engine
Docker: um linux container engineHudson Brendon
 
Usp codelabs (docker)
Usp codelabs (docker)Usp codelabs (docker)
Usp codelabs (docker)TechCobli
 
Orchestrando na linha
Orchestrando na linhaOrchestrando na linha
Orchestrando na linhamatheuscmpm
 
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
 
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
 
Containers com docker #CPRecife4
Containers com docker #CPRecife4Containers com docker #CPRecife4
Containers com docker #CPRecife4David Ruiz
 
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
 
Transportando as aplicações entre vários ambientes com Docker
Transportando as aplicações entre vários ambientes com DockerTransportando as aplicações entre vários ambientes com Docker
Transportando as aplicações entre vários ambientes com DockerAécio Pires
 

Semelhante a Automatize entregas com Docker (20)

Introdução ao docker
Introdução ao dockerIntrodução ao docker
Introdução ao docker
 
Desenvolvimento em .NET utilizando Docker - Meetup 8 Itu Developers
Desenvolvimento em .NET utilizando Docker - Meetup 8 Itu DevelopersDesenvolvimento em .NET utilizando Docker - Meetup 8 Itu Developers
Desenvolvimento em .NET utilizando Docker - Meetup 8 Itu Developers
 
Usando Docker no desenvolvimento .NET
Usando Docker no desenvolvimento .NETUsando Docker no desenvolvimento .NET
Usando Docker no desenvolvimento .NET
 
Conheça o Docker
Conheça o DockerConheça o Docker
Conheça o Docker
 
Introdução-a-Docker-compactado.pdf
Introdução-a-Docker-compactado.pdfIntrodução-a-Docker-compactado.pdf
Introdução-a-Docker-compactado.pdf
 
Aulão de docker
Aulão de dockerAulão de docker
Aulão de docker
 
Introdução ao Docker
Introdução ao DockerIntrodução ao Docker
Introdução ao Docker
 
Docker: um linux container engine
Docker:  um linux container engineDocker:  um linux container engine
Docker: um linux container engine
 
Docker para iniciantes
Docker para iniciantesDocker para iniciantes
Docker para iniciantes
 
Usp codelabs (docker)
Usp codelabs (docker)Usp codelabs (docker)
Usp codelabs (docker)
 
Iniciando com docker
Iniciando com dockerIniciando com docker
Iniciando com docker
 
Alagoas Dev Day
Alagoas Dev DayAlagoas Dev Day
Alagoas Dev Day
 
Orchestrando na linha
Orchestrando na linhaOrchestrando na linha
Orchestrando na linha
 
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
 
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
 
Containers com docker #CPRecife4
Containers com docker #CPRecife4Containers com docker #CPRecife4
Containers com docker #CPRecife4
 
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
 
Iniciando com django
Iniciando com djangoIniciando com django
Iniciando com django
 
Transportando as aplicações entre vários ambientes com Docker
Transportando as aplicações entre vários ambientes com DockerTransportando as aplicações entre vários ambientes com Docker
Transportando as aplicações entre vários ambientes com Docker
 

Automatize entregas com Docker

  • 2. Problema Nós queremos entregar nosso software funcional para diferentes ambientes de forma simples. Development Production CI Server Contributor’s laptop ? ...
  • 3. Principais problemas  Mover do ambiente de desenvolvimento para produção é difícil  Libs conflitantes / diferentes versões;  Diferentes SOs;  Diferentes versões de banco de dados.  Criar, atualizar e manter toda a software stack é difícil  O projeto usualmente contém muitas libs, bd, serviços..;  Difícil de manter uma versão do projeto reproduzível.  Teste / Integração Contínua / Entrega contínua é difícil de automatizar
  • 4. Como resolver?  Faça você mesmo (Do-It-Yourself) 1. Copiar / Instalar dependências (manualmente); 2. Preparar os bancos de dados; 3. Instalar a última versão do projeto; 4. Configurar as propriedades; 5. Testar o projeto em execução;
  • 5. Como resolver? 6. Epaa! Alguma coisa está faltando, não está funcionando! 7. Consertar os erros; 8. Repetir os testes da aplicação novamente até estar funcionando; 9. Escrever manuais para ajudar outras pessoas a configurar o (monstrinho).
  • 6.
  • 7.
  • 8. Como resolver isso (VMs) Empacotar tudo em uma VM e executar o deploy em diferentes ambientes. Development Production CI Server Contributor’s laptop ...
  • 9. Desvantagens das VMs  Pesada. Quantas VMs você pode rodar em sua máquina?  Consumo alto de recursos. Virtualização completa OS, I/O, etc...  Tamanho. Usualmente precisa de muitos GB para cada VM.  Problemas de portabilidade. Diferentes soluções de virtualização.  Gerenciamento. Difícil de manter / configurar / reusar diferentes versões de cada VM.
  • 10.
  • 11.
  • 12.
  • 14. LXC Ele é executado como um processo isolado no sistema operacional hospedeiro, compartilhando o kernel com outros recipientes, ou seja, permitem códigos e aplicações rodarem separados de outros containers compartilhando os mesmos recursos de hardware
  • 15. LXC Para construir uma área isolada para sua aplicação o container utiliza entre outras funcionalidades do kernel:  namespaces;  cgroups;  chroot.
  • 16.
  • 17. Containers nova tecpix?  Criar um container novo consiste em criar um novo “chroot” o que exige muito I/O;  Não é simples replicar um container.
  • 19. O que é docker? Uma plataforma opensource (escrita em Go) que automatiza a implementação de qualquer aplicação de forma leve e portátil em containers auto- suficientes, onde poderão ser executados nos mais diversos ambientes.
  • 20.
  • 21.
  • 22. Vantagens  Cada novo imagem é um “diff” de outra imagem base (rápido);  Build automática (Dockerfile);  Reuso (FROM: image);  Compartilhamento (dockerhub);  Funciona em qualquer máquina Linux.
  • 23. Docker images Uma imagem pode ser um sistema operacional como o Ubuntu, mas também pode ser um Ubuntu com o seu aplicativo web e todos os seus pacotes necessários instalados. *Cada imagem começa de uma imagem base, por exemplo uma imagem do ubuntu ou fedora.
  • 24. Docker container Um Container nada mais é do que um chroot. Podemos dizer que são as instâncias reais criados a partir das imagens do Docker. Eles podem ser iniciados, executados, parados, deletados, e movidos.
  • 25. Docker Hub Github do docker! Oferece um sistema open-source para que pessoas possam ter seus próprios servidores e armazenar imagens privadas ou públicas.
  • 26. Exemplo $ docker pull ubuntu:14.04 No comando acima, realizamos o download da imagem do ubuntu na tag 14.04.
  • 27. Exemplo Essa instrução irá executar o comando “cat /etc/lsb-release” dentro do container do ubuntu. Se você conseguiu executar esse comando com sucesso, parabéns, você já está utilizando o Docker :). $ docker run ubuntu:14.04 cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=14.04 DISTRIB_CODENAME=trusty DISTRIB_DESCRIPTION="Ubuntu 14.04.1 LTS"
  • 28. Dockerfile Basicamente um shell script com instruções para construir uma imagem. Comandos exclusivos dos Docker também podem ser utilizados:  Rodar um comando;  Adicionar um arquivo ou diretório;  Criar uma variável de ambiente.
  • 29. Dockerfile: Exemplo  Imagem base do ubuntu;  Instala coisas básicas do ubuntu como gcc, make, curl;  Instala o GhostScript;  Instala o OpenJDK;  Instala o ImageMagick;
  • 30. Dockerfile: Exemplo  Instala as fontes padrões;  Instala o Tomcat;  Copia o war do Projeto que está na mesma pasta para o diretório webapps do Tomcat;  Inicia o Tomcat.
  • 31. Dockerfile: Exemplo # Pull base image. FROM ubuntu:14.04 # Install Java. RUN apt-get update && apt-get install -y openjdk-7-jdk && rm -rf /var/lib/apt/lists/*
  • 32. Construir uma imagem $ docker build -t pdfsevices/ubuntu . Constrói uma imagem com o nome pdfservices/ubuntu.
  • 33. Construir uma imagem $ docker images
  • 34. Executando um container com base na imagem criada $ docker run -p 3389:8080 -d pdfservices/ubuntu
  • 35. Comandos úteis  Open terminal shell in the container $ docker run -i -t pdfservices/ubuntu /bin/bash  List running containers $ docker ps  Execute a shell command inside the container $ docker exec <CONTAINER ID> ls
  • 36. Mais informações  https://docs.docker.com  https://github.com/IPGPTP/pdfservices/blob/r6s2/del iverables/docker/docker_config.txt