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

Desenvolvendo e implantando aplicações PHP utilizando Docker

  • 1.
    Clique para adicionartexto 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
  • 5.
  • 6.
  • 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 LinuxNamespaces 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 LinuxNamespaces 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 Unionmount – 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 Outrasferramentas 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 Userspacetools for the Linux kernel containers
  • 16.
    Globalcode – Open4education Executiondriver 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 Opensource Escrita em Go Redução de dependências Maior consistência
  • 18.
    Globalcode – Open4education Instalaçãoe 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 Scriptde 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 Ambientede 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 ParteII – Encapsulando aplicações PHP
  • 24.
    Globalcode – Open4education DockerHUB 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.
  • 26.
    Globalcode – Open4education DockerRegistry 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 Utilizandouma 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.
  • 29.
    Globalcode – Open4education Construindouma 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 Efetuandoimplantaçã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 Dockerremote 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 Dockerremote 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 ClienteDocker 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 Conectandoa 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.
  • 36.
    Globalcode – Open4education Pontospositivos 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.
  • 38.
    Globalcode – Open4education CoreOS “Applicationson CoreOS run as Docker containers. Containers provide maximum flexibility in packaging and can start in milliseconds.”
  • 39.
    Globalcode – Open4education GearD “geardis 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 Novasplataformas OpenVZ systemd-nspawn libvirt-lxc libvirt-sandbox qemu/kvm BSD Jails Solaris Zones OSX?? Windows??
  • 42.
    Globalcode – Open4education Equanto 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 ‘Namespacesin 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 DockerPHP 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.
  • 46.
    Globalcode – Open4education Obrigado! BrunoRicardo Siqueira @brunoric brunoric.info