Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Docker for PHP Developers

Docker for PHP Developers

Já ouviu aquela velha frase: "na minha máquina funciona"? Muito chato, né?

Vou apresentar para vocês um solução para esse e outros problemas utilizando o Docker em ambientes de desenvolvimento e produção. O Docker faz uso de uma tecnologia conhecida como Linux Containers e facilita muito o processo de deploy da sua aplicação PHP.

Jonata Weber

April 09, 2016
Tweet

More Decks by Jonata Weber

Other Decks in Technology

Transcript

  1. Virtual Machines Vantagem • Isolação total dos ambientes Desvantagens •

    Alto consumo de memória e disco; • Alto overhead e baixa performance; • Inicialização lenta; • Lento para recriar e provisionar;
  2. "LXC is a userspace interface for the Linux kernel containment

    features. Through a powerful API and simple tools, it lets Linux users easily create and manage system or application containers."
  3. Kernel Features • Kernel namespaces (ipc, uts, mount, pid, network

    and user) • Apparmor and SELinux profiles • Seccomp policies • Chroots (using pivot_root) • Kernel capabilities • CGroups (control groups)
  4. Containers Vantagens • Inicialização em milissegundos • Menos consumo de

    memória e disco • Aplicação 2x mais rápida (em relação a VMs) • Múltiplos containers no mesmo SO Desvantagens • Só é nativo no Linux (uso de VMs em outros SOs)
  5. O que é o Docker? • Open Source (pela dotCloud

    em março de 2008) • Desenvolvimento, Implantação e Execução • Desenvolvido em Golang • Linux Containers • Interface própria para acessar namespaces, cgroup e afins • Images Layers • Disco, memória, CPU e rede são isolados
  6. Por que devo usá-lo? • Ambientes semelhantes • Aplicação como

    pacote completo • Padronização e replicação • Infraestrutura e desenvolvimento juntos! • Comunidade
  7. Ecossistema Docker • Docker Engine • Docker Compose • Docker

    Machine • Docker Hub • Kitematic • Docker Swarm
  8. Hello, Docker! $ docker run hello-world 1. Checa se existe

    a imagem "hello-world" 2. Faz o download da imagem (se ainda não foi baixado) 3. Carrega a imagem e executa!
  9. Rodando um PHP7 webserver $ docker run -d \ --name

    web7 \ -p 8000:8000 \ -v $PWD:/usr/src/myapp \ php:7 php -S 0.0.0.0:8000
  10. MySQL container $ docker run -d \ --name db \

    -e MYSQL_ROOT_PASSWORD=123456 \ -p 3306:3306 \ mysql
  11. Criando minha primeira imagem FROM php:7 CMD php -v $

    docker build -t php7-version -f Dockerfile . $ docker run php7-version Dockerfile
  12. PHP7 webserver com Dockerfile FROM php:7 COPY ./ /usr/src/myapp WORKDIR

    /usr/src/myapp CMD php -S 0.0.0.0:9000 EXPOSE 9000 Dockerfile
  13. PHP7 + Apache + MySQL #dockerfile FROM php:7.0.5-apache RUN docker-php-ext-install

    pdo pdo_mysql COPY . /var/www/html $ docker run -d --name db -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 mysql $ docker build -t myapp-php7 . $ docker run -d --name myapp --link db:db -p 80:80 myapp-php7
  14. Docker Compose web: build: . ports: - "80:80" volumes: -

    ./:/usr/src/myapp links: - db db: image: mysql environment: - MYSQL_ROOT_PASSWORD=123456 Dockerfile $ docker-compose up -d