SlideShare una empresa de Scribd logo
1 de 46
Descargar para leer sin conexión
Clique para adicionar texto
Globalcode – Open4education
Desenvolvendo e implantando
aplicações PHP utilizando Docker
Bruno Ricardo Siqueira
@brunoric
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
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
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
Globalcode – Open4education
Parte I - Docker
Globalcode – Open4education
Docker: o que é?
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
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
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
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 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
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
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
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
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 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
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, 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
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)
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
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)
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
Globalcode – Open4education
Parte II – Encapsulando aplicações PHP
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
Globalcode – Open4education
Docker HUB
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
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
Globalcode – Open4education
Construindo uma imagem
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
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
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
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}]
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"
}
}
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);
Globalcode – Open4education
Parte III - Considerações
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
Globalcode – Open4education
Quem está utilizando?
Globalcode – Open4education
CoreOS
“Applications on
CoreOS run as
Docker containers.
Containers provide
maximum flexibility in
packaging and can
start in milliseconds.”
Globalcode – Open4education
GearD
“geard is a command-line client and agent for
integrating and linking Docker containers into systemd
across multiple hosts.”
Globalcode – Open4education
libswarm
“… a minimalist
toolkit to
orchestrate and
compose network
services for
distributed
systems.”
Globalcode – Open4education
Novas plataformas
OpenVZ
systemd-nspawn
libvirt-lxc
libvirt-sandbox
qemu/kvm
BSD Jails
Solaris Zones
OSX??
Windows??
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
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/
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/
Globalcode – Open4education
Dúvidas?
Globalcode – Open4education
Obrigado!
Bruno Ricardo Siqueira
@brunoric
brunoric.info

Más contenido relacionado

La actualidad más candente

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
 
Vagrant vs docker? Melhor vagrant + docker
Vagrant vs docker? Melhor vagrant + dockerVagrant vs docker? Melhor vagrant + docker
Vagrant vs docker? Melhor vagrant + dockerWellington Silva
 
Deploying Docker Containers
Deploying Docker ContainersDeploying Docker Containers
Deploying Docker ContainersHugo Henley
 
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
 
Introdução a Containers Docker
Introdução a Containers DockerIntrodução a Containers Docker
Introdução a Containers DockerMatheus Fidelis
 
Testadores 2015 - O Fantástico Mundo de Docker
Testadores 2015 - O Fantástico Mundo de DockerTestadores 2015 - O Fantástico Mundo de Docker
Testadores 2015 - O Fantástico Mundo de DockerStefan Teixeira
 
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 usoTobias Sette
 
Container revolucao
Container revolucaoContainer revolucao
Container revolucaoFernando Ike
 
Desenvolvendo com PHP e Docker
Desenvolvendo com PHP e DockerDesenvolvendo com PHP e Docker
Desenvolvendo com PHP e DockerWaldemar Neto
 
Um milhao de usuários simultâneos
Um milhao de usuários simultâneosUm milhao de usuários simultâneos
Um milhao de usuários simultâneosFernando Ike
 

La actualidad más candente (20)

Docker volumes
Docker volumesDocker volumes
Docker volumes
 
Apresentação docker
Apresentação dockerApresentação docker
Apresentação docker
 
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
 
Bem vindo ao Docker
Bem vindo ao DockerBem vindo ao Docker
Bem vindo ao 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
 
Vagrant vs docker? Melhor vagrant + docker
Vagrant vs docker? Melhor vagrant + dockerVagrant vs docker? Melhor vagrant + docker
Vagrant vs docker? Melhor vagrant + docker
 
Iniciando com docker
Iniciando com dockerIniciando com docker
Iniciando com docker
 
Deploying Docker Containers
Deploying Docker ContainersDeploying Docker Containers
Deploying Docker Containers
 
O que é Docker?
O que é Docker?O que é Docker?
O que é 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)
 
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
 
Introdução a Containers Docker
Introdução a Containers DockerIntrodução a Containers Docker
Introdução a Containers Docker
 
Testadores 2015 - O Fantástico Mundo de Docker
Testadores 2015 - O Fantástico Mundo de DockerTestadores 2015 - O Fantástico Mundo de Docker
Testadores 2015 - O Fantástico Mundo de 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
 
Container revolucao
Container revolucaoContainer revolucao
Container revolucao
 
O que é docker?
O que é docker?O que é docker?
O que é docker?
 
Desenvolvendo com PHP e Docker
Desenvolvendo com PHP e DockerDesenvolvendo com PHP e Docker
Desenvolvendo com PHP e Docker
 
Um milhao de usuários simultâneos
Um milhao de usuários simultâneosUm milhao de usuários simultâneos
Um milhao de usuários simultâneos
 

Destacado

Apresentação Docker
Apresentação DockerApresentação Docker
Apresentação DockerAndré Justi
 
DevOps II - Ambientes padronizados e Monitoramento da Aplicação | Monografia II
DevOps II - Ambientes padronizados e Monitoramento da Aplicação | Monografia IIDevOps II - Ambientes padronizados e Monitoramento da Aplicação | Monografia II
DevOps II - Ambientes padronizados e Monitoramento da Aplicação | Monografia IIAlefe Variani
 
DevOps utilizando Docker
DevOps utilizando DockerDevOps utilizando Docker
DevOps utilizando Dockerthdotnet
 
Automatizando a implantação e operação de aplicações conteinerizadas no...
Automatizando a implantação e operação de aplicações conteinerizadas no...Automatizando a implantação e operação de aplicações conteinerizadas no...
Automatizando a implantação e operação de aplicações conteinerizadas no...Elo7
 
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
 
Trabalhando em ambientes php com docker
Trabalhando em ambientes php com dockerTrabalhando em ambientes php com docker
Trabalhando em ambientes php com dockerAlef Castelo
 
Docker: um linux container engine
Docker:  um linux container engineDocker:  um linux container engine
Docker: um linux container engineHudson Brendon
 
Docker para deploy de aplicação
Docker para deploy de aplicaçãoDocker para deploy de aplicação
Docker para deploy de aplicaçãoMundo Docker
 
DevOps e redes -- SDN NFV e Docker
DevOps e redes -- SDN NFV e DockerDevOps e redes -- SDN NFV e Docker
DevOps e redes -- SDN NFV e DockerLucas Arbiza
 
Blue Green Deployment com Docker
Blue Green Deployment com DockerBlue Green Deployment com Docker
Blue Green Deployment com DockerPedro Cavalheiro
 
Da Integração Contínua à Entrega Contínua apenas com ferramentas open-source
Da Integração Contínua à Entrega Contínua apenas com ferramentas open-sourceDa Integração Contínua à Entrega Contínua apenas com ferramentas open-source
Da Integração Contínua à Entrega Contínua apenas com ferramentas open-sourceRaphael Paiva
 
Into the ZF2 Service Manager
Into the ZF2 Service ManagerInto the ZF2 Service Manager
Into the ZF2 Service ManagerChris Tankersley
 

Destacado (15)

Apresentação Docker
Apresentação DockerApresentação Docker
Apresentação Docker
 
DevOps II - Ambientes padronizados e Monitoramento da Aplicação | Monografia II
DevOps II - Ambientes padronizados e Monitoramento da Aplicação | Monografia IIDevOps II - Ambientes padronizados e Monitoramento da Aplicação | Monografia II
DevOps II - Ambientes padronizados e Monitoramento da Aplicação | Monografia II
 
DevOps utilizando Docker
DevOps utilizando DockerDevOps utilizando Docker
DevOps utilizando Docker
 
Automatizando a implantação e operação de aplicações conteinerizadas no...
Automatizando a implantação e operação de aplicações conteinerizadas no...Automatizando a implantação e operação de aplicações conteinerizadas no...
Automatizando a implantação e operação de aplicações conteinerizadas no...
 
Webinar: Apresentando AWS Device Farm
Webinar: Apresentando AWS Device Farm Webinar: Apresentando AWS Device Farm
Webinar: Apresentando AWS Device Farm
 
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
 
Trabalhando em ambientes php com docker
Trabalhando em ambientes php com dockerTrabalhando em ambientes php com docker
Trabalhando em ambientes php com docker
 
Alagoas Dev Day
Alagoas Dev DayAlagoas Dev Day
Alagoas Dev Day
 
Docker: um linux container engine
Docker:  um linux container engineDocker:  um linux container engine
Docker: um linux container engine
 
Docker
DockerDocker
Docker
 
Docker para deploy de aplicação
Docker para deploy de aplicaçãoDocker para deploy de aplicação
Docker para deploy de aplicação
 
DevOps e redes -- SDN NFV e Docker
DevOps e redes -- SDN NFV e DockerDevOps e redes -- SDN NFV e Docker
DevOps e redes -- SDN NFV e Docker
 
Blue Green Deployment com Docker
Blue Green Deployment com DockerBlue Green Deployment com Docker
Blue Green Deployment com Docker
 
Da Integração Contínua à Entrega Contínua apenas com ferramentas open-source
Da Integração Contínua à Entrega Contínua apenas com ferramentas open-sourceDa Integração Contínua à Entrega Contínua apenas com ferramentas open-source
Da Integração Contínua à Entrega Contínua apenas com ferramentas open-source
 
Into the ZF2 Service Manager
Into the ZF2 Service ManagerInto the ZF2 Service Manager
Into the ZF2 Service Manager
 

Similar a Docker PHP desenvolvimento aplicações

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 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
 
Usp codelabs (docker)
Usp codelabs (docker)Usp codelabs (docker)
Usp codelabs (docker)TechCobli
 
Padrōes, Especificações, Runtimes: construindo containers melhores
Padrōes, Especificações, Runtimes: construindo containers melhoresPadrōes, Especificações, Runtimes: construindo containers melhores
Padrōes, Especificações, Runtimes: construindo containers melhoresCarlos Andre Fernandes
 
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
 
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
 
Introdução ao docker
Introdução ao dockerIntrodução ao docker
Introdução ao dockerBenicio Ávila
 
Orchestrando na linha
Orchestrando na linhaOrchestrando na linha
Orchestrando na linhamatheuscmpm
 
Orquestrando ambientes com docker e kubernetes
Orquestrando ambientes com docker e kubernetes	Orquestrando ambientes com docker e kubernetes
Orquestrando ambientes com docker e kubernetes Rhuan Karlus Silva
 
Introdução ao Docker
Introdução ao DockerIntrodução ao Docker
Introdução ao DockerGeorge Moura
 
Treinamento Docker Básico
Treinamento Docker BásicoTreinamento Docker Básico
Treinamento Docker BásicoAndré Justi
 
TDC2018SP | Trilha Testes II - Descomplicando a montagem de ambientes de Test...
TDC2018SP | Trilha Testes II - Descomplicando a montagem de ambientes de Test...TDC2018SP | Trilha Testes II - Descomplicando a montagem de ambientes de Test...
TDC2018SP | Trilha Testes II - Descomplicando a montagem de ambientes de Test...tdc-globalcode
 

Similar a Docker PHP desenvolvimento aplicações (20)

Freedomday2016 - Fique na caixinha, docker
Freedomday2016 - Fique na caixinha, dockerFreedomday2016 - Fique na caixinha, docker
Freedomday2016 - Fique na caixinha, 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 101 e Ambientes Imutáveis
Docker 101 e Ambientes Imutáveis Docker 101 e Ambientes Imutáveis
Docker 101 e Ambientes Imutáveis
 
Usp codelabs (docker)
Usp codelabs (docker)Usp codelabs (docker)
Usp codelabs (docker)
 
Padrōes, Especificações, Runtimes: construindo containers melhores
Padrōes, Especificações, Runtimes: construindo containers melhoresPadrōes, Especificações, Runtimes: construindo containers melhores
Padrōes, Especificações, Runtimes: construindo containers melhores
 
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...
 
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
 
Introdução ao docker
Introdução ao dockerIntrodução ao docker
Introdução ao docker
 
Docker
DockerDocker
Docker
 
Orchestrando na linha
Orchestrando na linhaOrchestrando na linha
Orchestrando na linha
 
Docker
Docker Docker
Docker
 
Oficina docker
Oficina dockerOficina docker
Oficina docker
 
Orquestrando ambientes com docker e kubernetes
Orquestrando ambientes com docker e kubernetes	Orquestrando ambientes com docker e kubernetes
Orquestrando ambientes com docker e kubernetes
 
Introdução ao Docker
Introdução ao DockerIntrodução ao Docker
Introdução ao Docker
 
Olá docker
Olá dockerOlá docker
Olá docker
 
Treinamento Docker Básico
Treinamento Docker BásicoTreinamento Docker Básico
Treinamento Docker Básico
 
Docker para maiores
Docker para maioresDocker para maiores
Docker para maiores
 
TDC2018SP | Trilha Testes II - Descomplicando a montagem de ambientes de Test...
TDC2018SP | Trilha Testes II - Descomplicando a montagem de ambientes de Test...TDC2018SP | Trilha Testes II - Descomplicando a montagem de ambientes de Test...
TDC2018SP | Trilha Testes II - Descomplicando a montagem de ambientes de Test...
 

Más de Bruno Ricardo Siqueira

Managing e commerce systems codebase with git
Managing e commerce systems codebase with gitManaging e commerce systems codebase with git
Managing e commerce systems codebase with gitBruno Ricardo Siqueira
 
Construindo aplicações CLI com Symfony Console
Construindo aplicações CLI com Symfony ConsoleConstruindo aplicações CLI com Symfony Console
Construindo aplicações CLI com Symfony ConsoleBruno Ricardo Siqueira
 
TDC SP 2015 - PHP7: melhor e mais rápido
TDC SP 2015 - PHP7: melhor e mais rápidoTDC SP 2015 - PHP7: melhor e mais rápido
TDC SP 2015 - PHP7: melhor e mais rápidoBruno Ricardo Siqueira
 
Fluxo de desenvolvimento de software utilizando Git
Fluxo de desenvolvimento de software utilizando GitFluxo de desenvolvimento de software utilizando Git
Fluxo de desenvolvimento de software utilizando GitBruno Ricardo Siqueira
 

Más de Bruno Ricardo Siqueira (6)

Managing e commerce systems codebase with git
Managing e commerce systems codebase with gitManaging e commerce systems codebase with git
Managing e commerce systems codebase with git
 
Construindo aplicações CLI com Symfony Console
Construindo aplicações CLI com Symfony ConsoleConstruindo aplicações CLI com Symfony Console
Construindo aplicações CLI com Symfony Console
 
TDC SP 2015 - PHP7: better & faster
TDC SP 2015 - PHP7: better & fasterTDC SP 2015 - PHP7: better & faster
TDC SP 2015 - PHP7: better & faster
 
TDC SP 2015 - PHP7: melhor e mais rápido
TDC SP 2015 - PHP7: melhor e mais rápidoTDC SP 2015 - PHP7: melhor e mais rápido
TDC SP 2015 - PHP7: melhor e mais rápido
 
Fluxo de desenvolvimento de software utilizando Git
Fluxo de desenvolvimento de software utilizando GitFluxo de desenvolvimento de software utilizando Git
Fluxo de desenvolvimento de software utilizando Git
 
Impulsionando sua presença Online
Impulsionando sua presença OnlineImpulsionando sua presença Online
Impulsionando sua presença Online
 

Docker PHP desenvolvimento aplicações

  • 1. Clique para adicionar texto Globalcode – Open4education Desenvolvendo e implantando aplicações PHP utilizando Docker Bruno Ricardo Siqueira @brunoric
  • 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. 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. 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
  • 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. 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. 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. Globalcode – Open4education Docker: VMs x Docker Máquina Virtual Docker
  • 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. 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. 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. 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. Globalcode – Open4education LXC Userspace tools for the Linux kernel containers
  • 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. Globalcode – Open4education libcontainer Open source Escrita em Go Redução de dependências Maior consistência
  • 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. 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. 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. 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. 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. Globalcode – Open4education Parte II – Encapsulando aplicações PHP
  • 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
  • 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. 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
  • 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. 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. 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. 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. 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. 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. Globalcode – Open4education Parte III - Considerações
  • 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
  • 38. Globalcode – Open4education CoreOS “Applications on CoreOS run as Docker containers. Containers provide maximum flexibility in packaging and can start in milliseconds.”
  • 39. Globalcode – Open4education GearD “geard is a command-line client and agent for integrating and linking Docker containers into systemd across multiple hosts.”
  • 40. Globalcode – Open4education libswarm “… a minimalist toolkit to orchestrate and compose network services for distributed systems.”
  • 41. Globalcode – Open4education Novas plataformas OpenVZ systemd-nspawn libvirt-lxc libvirt-sandbox qemu/kvm BSD Jails Solaris Zones OSX?? Windows??
  • 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. 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. 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/
  • 46. Globalcode – Open4education Obrigado! Bruno Ricardo Siqueira @brunoric brunoric.info