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.

Avatar for Jonata Weber

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