Clique para adicionar texto
Globalcode – Open4education
Desenvolvendo e implantando
aplicações PHP utilizando Docker
Bruno...
Globalcode – Open4education
Agenda – Parte I
Docker
O que é? Qual a proposta?
Origem
VMs x Docker
Linux Namespaces, AUFS, ...
Globalcode – Open4education
Agenda – Parte II
Encapsulando aplicações PHP
Preparando o ambiente de desenvolvimento
Docker ...
Globalcode – Open4education
Agenda – Parte III
Considerações
Pontos positivos e negativos
Quem está utilizando Docker?
O q...
Globalcode – Open4education
Parte I - Docker
Globalcode – Open4education
Docker: o que é?
Globalcode – Open4education
Docker: o que é?
“Docker é uma plataforma aberta para desenvolvedores e
administradores de sis...
Globalcode – Open4education
Docker: qual a proposta?
Eliminar (na maioria dos casos):
Hypervisors
Máquinas virtuais
Gestor...
Globalcode – Open4education
Docker: origem
dotCloud
PaaS lançada em 2011
Solomon Hykes inicia o projeto Docker
Docker tem ...
Globalcode – Open4education
Docker: VMs x Docker
Máquina Virtual
Docker
Globalcode – Open4education
Linux Namespaces
Mount namespaces
Linux 2.4.19
Isolamento do sistema de arquivos
UTS namespace...
Globalcode – Open4education
Linux Namespaces
PID namespaces
Linux 2.6.24
init (PID 1), mesmo PID em diferentes PID namespa...
Globalcode – Open4education
AUFS
Union mount – UnionFS
(1990!)
AnotherUnionFS – AUFS
(2006)
Live CDs, ..., Docker
Monta o ...
Globalcode – Open4education
Outras ferramentas
AppArmor e SELinux profiles
Restringem as capacidades dos softwares (proces...
Globalcode – Open4education
LXC
Userspace tools for the Linux kernel containers
Globalcode – Open4education
Execution driver API
Camada de padronização do acesso ao ambiente
de execução
LXC não é mais o...
Globalcode – Open4education
libcontainer
Open source
Escrita em Go
Redução de
dependências
Maior
consistência
Globalcode – Open4education
Instalação e utilização
Lembrete:
Utiliza funcionalidades específicas do Linux
Windows, OS X, ...
Globalcode – Open4education
Dockerfile
Script de montagem automatizada de imagens
Executa ações em uma imagem base para cr...
Globalcode – Open4education
Escalabilidade, portabilidade
Replicação de containers
Gestão de mudança
Rollback, versionamen...
Globalcode – Open4education
Intersecções
Vagrant
Ambiente de desenvolvimento e execução compatíveis
Puppet, Chef, CFEngine...
Globalcode – Open4education
Buildstep, Dokku
Buildstep
Utiliza os buildpacks do Heroku para construir
Dockerfiles automati...
Globalcode – Open4education
Parte II – Encapsulando aplicações PHP
Globalcode – Open4education
Docker HUB
Diferencial colaborativo
Índice de repositórios de imagens
Imagens oficiais de vári...
Globalcode – Open4education
Docker HUB
Globalcode – Open4education
Docker Registry
Container pré-configurado
Gerenciar repositórios Docker em sua própria
infraes...
Globalcode – Open4education
Utilizando uma imagem
Conta no Docker Hub (ou Registry próprio)
Pulling das imagens
Executando...
Globalcode – Open4education
Construindo uma imagem
Globalcode – Open4education
Construindo uma imagem
$ sudo docker build -t brunoric/docker 
apache2-php-mariadb .
Criando i...
Globalcode – Open4education
Efetuando implantação
Pulling da imagem
Executando o container (e montando a pasta da
aplicaçã...
Globalcode – Open4education
Docker remote API
RESTfull
unix:///var/run/docker.sock (padrão)
É possível utilizar outro host...
Globalcode – Open4education
Docker remote API
$ echo -e "GET /images/json HTTP/1.0rn" | nc -U
/var/run/docker.sock
HTTP/1....
Globalcode – Open4education
Docker-PHP
Cliente Docker escrito em PHP
Ainda em estágio inicial de desenvolvimento
O objetiv...
Globalcode – Open4education
Docker-PHP
Conectando a um container
<?php
$client = new DockerHttpDockerClient(array(), 'tcp:...
Globalcode – Open4education
Parte III - Considerações
Globalcode – Open4education
Pontos positivos e negativos
Até agora só pontos positivos...
Pontos negativos?
Segurança? App...
Globalcode – Open4education
Quem está utilizando?
Globalcode – Open4education
CoreOS
“Applications on
CoreOS run as
Docker containers.
Containers provide
maximum flexibilit...
Globalcode – Open4education
GearD
“geard is a command-line client and agent for
integrating and linking Docker containers ...
Globalcode – Open4education
libswarm
“… a minimalist
toolkit to
orchestrate and
compose network
services for
distributed
s...
Globalcode – Open4education
Novas plataformas
OpenVZ
systemd-nspawn
libvirt-lxc
libvirt-sandbox
qemu/kvm
BSD Jails
Solaris...
Globalcode – Open4education
E quanto a nós?
Tempo
Simplificação de processos
Redução de surpresas (e tempo às
corrigindo/e...
Globalcode – Open4education
Referências
‘Namespaces in operation’ series:
Part I - Namespaces overview - http://lwn.net/Ar...
Globalcode – Open4education
Referências
Docker PHP Farm - http://www.splitbrain.org/blog/2014-02/02-docker_phpfarm
Docker ...
Globalcode – Open4education
Dúvidas?
Globalcode – Open4education
Obrigado!
Bruno Ricardo Siqueira
@brunoric
brunoric.info
Próximos SlideShares
Carregando em…5
×

Desenvolvendo e implantando aplicações PHP utilizando Docker

2.119 visualizações

Publicada em

Slides da palestra ministrada no TDC São Paulo 2014, na trilha PHP. A idéia central da palestra é introduzir os conceitos da ferramenta Docker, apresentados da visão de um programador PHP, denotando as vantagens de se utilizar a ferramenta para o desenvolvimento de software em PHP.

Publicada em: Software
1 comentário
36 gostaram
Estatísticas
Notas
Sem downloads
Visualizações
Visualizações totais
2.119
No SlideShare
0
A partir de incorporações
0
Número de incorporações
59
Ações
Compartilhamentos
0
Downloads
61
Comentários
1
Gostaram
36
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Desenvolvendo e implantando aplicações PHP utilizando Docker

  1. 1. Clique para adicionar texto Globalcode – Open4education Desenvolvendo e implantando aplicações PHP utilizando Docker Bruno Ricardo Siqueira @brunoric
  2. 2. Globalcode – Open4education Agenda – Parte I Docker O que é? Qual a proposta? Origem VMs x Docker Linux Namespaces, AUFS, outras ferramentas, LXC Execution driver API, libcontainer Instalação e utilização, Dockerfile Escalabilidade, portabilidade Intersecções Vagrant, Puppet, Chef, CFEngine, Heroku Buildstep, Dokku
  3. 3. Globalcode – Open4education Agenda – Parte II Encapsulando aplicações PHP Preparando o ambiente de desenvolvimento Docker Hub e Registry Utilizando uma imagem Construindo uma imagem Ambiente de produção Efetuando a implantação Docker-PHP Docker remote API Docker client em PHP
  4. 4. Globalcode – Open4education Agenda – Parte III Considerações Pontos positivos e negativos Quem está utilizando Docker? O que vem por aí? CoreOS, GearD Novas plataformas (OpenVZ, systemd-nspawn, libvirt-lxc, libvirt- sandbox, qemu/kvm, BSD Jails, Solaris Zones) E nós desenvolvedores PHP o que temos com isso? Tempo e dinheiro Novas ferramentas
  5. 5. Globalcode – Open4education Parte I - Docker
  6. 6. Globalcode – Open4education Docker: o que é?
  7. 7. Globalcode – Open4education Docker: o que é? “Docker é uma plataforma aberta para desenvolvedores e administradores de sistema construírem, entregarem e executarem aplicações distribuídas. Consistindo do Docker Engine, um leve ambiente de execução portátil e ferramenta de empacotamento, e do Docker Hub, um serviço baseado na nuvem para compartilhamento de aplicações e automação de fluxo de trabalho, Docker permite que aplicações sejam rapidamente montadas através de seus componentes eliminando a fricção entre desenvolvimento, garantia da qualidade e ambientes de produção. Como resultado, a TI pode entregar mais rapidamente e executar o mesmo aplicativo, sem alterações, em laptops, data center VMs e qualquer infraestrutura na nuvem.” - Solomon Hykes
  8. 8. Globalcode – Open4education Docker: qual a proposta? Eliminar (na maioria dos casos): Hypervisors Máquinas virtuais Gestores de configuração (Puppet, Chef, CFEngine, etc) Como? Isolar a aplicação e suas dependências Não virtualizar o sistema operacional Executar a aplicação em um 'espaço de usuário' próprio 'VM' com MUITO menos overhead
  9. 9. Globalcode – Open4education Docker: origem dotCloud PaaS lançada em 2011 Solomon Hykes inicia o projeto Docker Docker tem seu código aberto em março de 2013 Linguagem de programação Go Primeiras versões Possuem LXC como ambiente de execução padrão Basicamente um wrapper LXC centrado em aplicações Docker Remote API Docker Hub
  10. 10. Globalcode – Open4education Docker: VMs x Docker Máquina Virtual Docker
  11. 11. Globalcode – Open4education Linux Namespaces Mount namespaces Linux 2.4.19 Isolamento do sistema de arquivos UTS namespaces Linux 2.6.19 Hostname e NIS domain name IPC namespaces Linux 2.6.19 e Linux 2.6.30 Identificadores System V IPC e POSIX message queues
  12. 12. Globalcode – Open4education Linux Namespaces PID namespaces Linux 2.6.24 init (PID 1), mesmo PID em diferentes PID namespaces Network namespaces Linux 2.6.24 e Linux 2.6.29 Isolamento de recursos de rede User namespaces Linux 2.6.23 e Linux 3.8 Identificadores System V IPC e POSIX message queues
  13. 13. Globalcode – Open4education AUFS Union mount – UnionFS (1990!) AnotherUnionFS – AUFS (2006) Live CDs, ..., Docker Monta o sistema em modo ready-only Adiciona camada(s) de sistemas de arquivo em modo ready-only Camada final (container) com permissão de escrita
  14. 14. Globalcode – Open4education Outras ferramentas AppArmor e SELinux profiles Restringem as capacidades dos softwares (processos) seccomp policies Linux 2.6.12 Estado seguro, chamadas limitadas ao sistema chroot Muda o diretório root do processo corrente (e dos filhos) cgroups control groups, Linux 2.6.24 Controla e isola a utilização de recursos
  15. 15. Globalcode – Open4education LXC Userspace tools for the Linux kernel containers
  16. 16. Globalcode – Open4education Execution driver API Camada de padronização do acesso ao ambiente de execução LXC não é mais o ambiente de execução padrão (mais ainda pode ser utilizado) Possibilidade para novas ferramentas de isolamento (e outras plataformas) OpenVZ, systemd-nspawn, libvirt-lxc, libvirt-sandbox, qemu/kvm, BSD Jails, Solaris Zones Novo driver de execução padrão libcontainer
  17. 17. Globalcode – Open4education libcontainer Open source Escrita em Go Redução de dependências Maior consistência
  18. 18. Globalcode – Open4education Instalação e utilização Lembrete: Utiliza funcionalidades específicas do Linux Windows, OS X, etc... por enquanto só com VM Instalação Download de imagem padrão Shell interativa $ curl –sSL https://get.docker.io/ubuntu | sudo sh $ sudo docker pull ubuntu $ sudo docker run –i –t ubuntu /bin/bash
  19. 19. Globalcode – Open4education Dockerfile Script de montagem automatizada de imagens Executa ações em uma imagem base para criar outra imagem Sintaxe simples comando [argumento] [argumento] [...] ADD, CMD, COPY, ENTRYPOINT, ENV, EXPOSE, FROM, MANTAINER, ONBUILD, RUN, USER, VOLUME, WORKDIR Camadas AUFS para cada comando Reaproveitamento de camadas (cache)
  20. 20. Globalcode – Open4education Escalabilidade, portabilidade Replicação de containers Gestão de mudança Rollback, versionamento Workflow simplificado commit, push, pull, run Rollback, versionamento, redundância... Encapsulamento de dependências Aplicação independente das configurações do linux host
  21. 21. Globalcode – Open4education Intersecções Vagrant Ambiente de desenvolvimento e execução compatíveis Puppet, Chef, CFEngine Gerenciamento de configuração de sistema Gerenciamento de mudança Heroku Gerenciamento automatizado de dependências Runtime forks Runtime revisions (release history)
  22. 22. Globalcode – Open4education Buildstep, Dokku Buildstep Utiliza os buildpacks do Heroku para construir Dockerfiles automaticamente Cria containers autosuficientes através de sua aplicação Transforma aplicações Heroku em containers Dokku "Docker powered mini-Heroku. The smallest PaaS implementation you've ever seen." Utiliza buildstep
  23. 23. Globalcode – Open4education Parte II – Encapsulando aplicações PHP
  24. 24. Globalcode – Open4education Docker HUB Diferencial colaborativo Índice de repositórios de imagens Imagens oficiais de vários vendors Imagens públicas de usuários Repositórios ilimitados e gratuitos para projetos de código aberto 1 repositório privado gratuito Registry é a alternativa Builds automáticos Integração com GitHub e Bitbucket
  25. 25. Globalcode – Open4education Docker HUB
  26. 26. Globalcode – Open4education Docker Registry Container pré-configurado Gerenciar repositórios Docker em sua própria infraestrutura Índice de repositórios (busca) Espelhamento de imagens Container pré-configurado Integração out-of-the-box com Amazon S3, Google Cloud Storage, OpenStack Swift, OpenStack Glance Open source
  27. 27. Globalcode – Open4education Utilizando uma imagem Conta no Docker Hub (ou Registry próprio) Pulling das imagens Executando os containers (e montando a pasta da aplicação) $ sudo docker pull brunoric/docker-apache2-php $ sudo docker pull brunoric/docker-apache2-phpng $ sudo docker pull brunoric/docker-apache2-hhvm $ sudo docker run -d -p 8081:80 -v /path/of/your/app:/app brunoric/docker-apache2-php $ sudo docker run -d -p 8082:80 -v /path/of/your/app:/app brunoric/docker-phpng $ sudo docker run -d -p 8083:80 -v /path/of/your/app:/app brunoric/docker-hhvm
  28. 28. Globalcode – Open4education Construindo uma imagem
  29. 29. Globalcode – Open4education Construindo uma imagem $ sudo docker build -t brunoric/docker apache2-php-mariadb . Criando imagem $ sudo docker run -d -p 80:80 -p 3306:3306 -v /path/of/your/app:/app brunoric/docker-apache2-php-mariadb Executando
  30. 30. Globalcode – Open4education Efetuando implantação Pulling da imagem Executando o container (e montando a pasta da aplicação) $ sudo docker pull brunoric/docker-apache2-php $ sudo docker run -d -p 80:80 -v /path/of/your/app:/app brunoric/docker-apache2-php
  31. 31. Globalcode – Open4education Docker remote API RESTfull unix:///var/run/docker.sock (padrão) É possível utilizar outro host/porta ou Unix socket Possibilita a criação de outros clientes Docker Shipyard (GUI escrita em Python) PHP-Docker
  32. 32. Globalcode – Open4education Docker remote API $ echo -e "GET /images/json HTTP/1.0rn" | nc -U /var/run/docker.sock HTTP/1.0 200 OK Content-Type: application/json Content-Length: 858 Connection: close Date: Fri, 20 Dec 2013 16:02:41 GMT [{"Repository":"ubuntu","Tag":"12.04","Id":"8dbd9e392...", "Created":1365714795,"Size":131502179,"VirtualSize":131502179}, {"Repository":"ubuntu","Tag":"latest","Id":"8dbd9e392...", "Created":1365714795,"Size":131502179,"VirtualSize":131502179}, {"Repository":"ubuntu","Tag":"precise","Id":"8dbd9e392...", "Created":1365714795,"Size":131502179,"VirtualSize":131502179}, {"Repository":"ubuntu","Tag":"12.10","Id":"b750fe792...", "Created":1364102658,"Size":24653,"VirtualSize":180116135}, {"Repository":"ubuntu","Tag":"quantal","Id":"b750fe792...", "Created":1364102658,"Size":24653,"VirtualSize":180116135}]
  33. 33. Globalcode – Open4education Docker-PHP Cliente Docker escrito em PHP Ainda em estágio inicial de desenvolvimento O objetivo é cobrir 100% da API do docker Utiliza o Guzzle Client Instalação { "require": { "stage1/docker-php": "@dev" } }
  34. 34. Globalcode – Open4education Docker-PHP Conectando a um container <?php $client = new DockerHttpDockerClient(array(), 'tcp://127.0.0.1'); $docker = new DockerDocker($client); <?php $container = new DockerContainer(['Image' => 'ubuntu:precise']); $docker->getContainerManager()->run($container); Executando um container Parando e removendo um container <?php $manager ->stop($container) ->remove($container);
  35. 35. Globalcode – Open4education Parte III - Considerações
  36. 36. Globalcode – Open4education Pontos positivos e negativos Até agora só pontos positivos... Pontos negativos? Segurança? AppArmor e SELinux Imaturidade da comunidade Ausência de ferramentas estabelecidas (o próprio Docker teve a versão 1.0.0 lançada em 09 junho de 2014. Isolamento demais, pode perder a parte boa do compartilhamento de ambiente de execução
  37. 37. Globalcode – Open4education Quem está utilizando?
  38. 38. Globalcode – Open4education CoreOS “Applications on CoreOS run as Docker containers. Containers provide maximum flexibility in packaging and can start in milliseconds.”
  39. 39. Globalcode – Open4education GearD “geard is a command-line client and agent for integrating and linking Docker containers into systemd across multiple hosts.”
  40. 40. Globalcode – Open4education libswarm “… a minimalist toolkit to orchestrate and compose network services for distributed systems.”
  41. 41. Globalcode – Open4education Novas plataformas OpenVZ systemd-nspawn libvirt-lxc libvirt-sandbox qemu/kvm BSD Jails Solaris Zones OSX?? Windows??
  42. 42. Globalcode – Open4education E quanto a nós? Tempo Simplificação de processos Redução de surpresas (e tempo às corrigindo/entendendo) Facilidade em testar aplicações em novos e diferentes ambientes (php5, phpng, hhvm, ...) Dinheiro Construção de novas ferramentas Redução de custos, afinal tempo = dinheiro Constante atualização tecnológica
  43. 43. Globalcode – Open4education Referências ‘Namespaces in operation’ series: Part I - Namespaces overview - http://lwn.net/Articles/531114/ Part II - The namespaces API - http://lwn.net/Articles/531381/ Part III - PID namespaces - http://lwn.net/Articles/531419/ Part IV - More on PID namespaces - http://lwn.net/Articles/532748/ Part V - User namespaces - http://lwn.net/Articles/532593/ Part VI - More on user namespaces - http://lwn.net/Articles/540087/ Part VII - Network namespaces - http://lwn.net/Articles/580893/ LXC: Linux container tools - http://www.ibm.com/developerworks/linux/library/l-lxc-containers/ Docker: Using Linux Containers to Support Portable Application Deployment - http://www.infoq.com/articles/docker-containers Docker Case-Study #1: Interview with Matt Butcher from Revolv - http://www.centurylinklabs.com/docker-case-study-1-interview-with-matt-butcher-from-revolv/ Docker drops LXC as default execution environment - http://www.infoq.com/news/2014/03/docker_0_9 Docker libcontainer unifies Linux container powers - http://www.zdnet.com/docker-libcontainer-unifies- linux-container-powers-7000030397/
  44. 44. Globalcode – Open4education Referências Docker PHP Farm - http://www.splitbrain.org/blog/2014-02/02-docker_phpfarm Docker 0.9: introducing execution drivers and libcontainer - http://blog.docker.com/2014/03/docker-0-9- introducing-execution-drivers-and-libcontainer/ Understanding LXC & Docker - http://pt.slideshare.net/coprinno/lxc-n-docker Docker is the Heroku Killer - http://www.brightball.com/devops/docker-is-the-heroku-killer How to scale Docker containers in production - http://stackoverflow.com/questions/18285212/how-to- scale-docker-containers-in-production Ubuntu Wiki - LXC - https://help.ubuntu.com/lts/serverguide/lxc.html Docker Documentation - https://docs.docker.com/ Docker for your dev environment - https://julo.ch/blog/docker-dev-environment/
  45. 45. Globalcode – Open4education Dúvidas?
  46. 46. Globalcode – Open4education Obrigado! Bruno Ricardo Siqueira @brunoric brunoric.info

×