Trabalhando em
ambientes PHP com
Darkmira Tour Community & PHP Com Rapadura - 12/2016
Darkmira Tour Community & PHP Com Rapadura - 12/2016
https://github.com/alefcastelo
https://twitter.com/alefcastelo
https://br.linkedin.com/in/alef-castelo-9639a673
https://medium.com/@alefcastelo/
Quem sou eu?
Darkmira Tour Community & PHP Com Rapadura - 12/2016
● O que é o Docker?
● Por que Docker e não Vagrant?
● Trabalhando com Docker
● Usando Docker com PHP
● Versionamento da imagem
● Dockerfile, Docker Hub, Docker Compose
Tópicos
Darkmira Tour Community & PHP Com Rapadura - 12/2016
Você já ouviu ou falou
aquela velha frase “na
minha máquina
funciona”?
Darkmira Tour Community & PHP Com Rapadura - 12/2016
Ou pior “no servidor
funciona”?
Darkmira Tour Community & PHP Com Rapadura - 12/2016
1. Diferenças entre o ambiente de
desenvolvimento e de produção.
2. Portabilidade da aplicação.
3. Padronização do ambiente.
Temos um problema...
Temos uma solução
Darkmira Tour Community & PHP Com Rapadura - 12/2016
Darkmira Tour Community & PHP Com Rapadura - 12/2016
Darkmira Tour Community & PHP Com Rapadura - 12/2016
Docker é uma plataforma aberta para
desenvolvedores e administradores de
sistemas para criar, enviar e executar
aplicativos distribuídos, seja em laptops,
VMs de data center ou na nuvem.
O que é o Docker?
Darkmira Tour Community & PHP Com Rapadura - 12/2016
Build, Ship, and Run Any
App, Anywhere
Darkmira Tour Community & PHP Com Rapadura - 12/2016
Crie, envie e execute
contêineres em qualquer
lugar
Darkmira Tour Community & PHP Com Rapadura - 12/2016
Darkmira Tour Community & PHP Com Rapadura - 12/2016
Container é basicamente o chroot em uso,
compartilhando o mesmo kernel do host,
onde é possível definir recursos como rede,
memória, cpu e outros.
O que são contêineres?
Darkmira Tour Community & PHP Com Rapadura - 12/2016
Por que Docker e não
Vagrant?
Darkmira Tour Community & PHP Com Rapadura - 12/2016
Vagrant
Darkmira Tour Community & PHP Com Rapadura - 12/2016
Docker
Darkmira Tour Community & PHP Com Rapadura - 12/2016
Comparação
Darkmira Tour Community & PHP Com Rapadura - 12/2016
1. São lentas para iniciar.
2. Problemas com portabilidade.
3. Precisam de mais espaço, pois
necessitam de todo o SO.
VMs
Darkmira Tour Community & PHP Com Rapadura - 12/2016
1. Rápidos para iniciar.
2. Podem ser transportados com facilidade.
3. Não necessita do SO completo, pois
rodam em cima do Kernel do Host OS.
Containers Docker
Darkmira Tour Community & PHP Com Rapadura - 12/2016
Trabalhando com Docker
Darkmira Tour Community & PHP Com Rapadura - 12/2016
Supondo que você já possui o docker
instalado, caso não tenha, essa é a url
de instalação:
https://docs.docker.com/engine/installation/
Darkmira Tour Community & PHP Com Rapadura - 12/2016
version Show the Docker version information
info Display system-wide information
images List images
ps List containers
run Run a command in a new container
exec Run a command in a running container
inspect Return low-level information on a container or image
kill Kill a running container
rm Remove one or more containers
A lista completa de comandos você pode conferir no link
https://docs.docker.com/engine/reference/commandline/
Comandos Básicos
1. Sempre precisamos de uma imagem para criar um container.
2. Sempre que criarmos um container, podemos expor uma porta onde será
acessível no host, fazendo com que você tenha possibilidade de
disponibilizar serviços para fora do container.
3. Possibilidade de entrar e sair de dentro do container, isso da facilidade de
modificação no container.
4. Todo container dura enquanto seu processo estiver sendo executado.
5. É possível, de fora do container executar comandos dentro dele.
Darkmira Tour Community & PHP Com Rapadura - 12/2016
Trabalhando com Docker
pc-docker:~ alefcastelo$ docker run -ti debian /bin/bash
Unable to find image 'debian:latest' locally
latest: Pulling from library/debian
75a822cd7888: Pull complete
Digest: sha256:f7062cf040f67f0c26ff46b3b44fe036c29468a7e69d8170f37c57f2eec1261b
Status: Downloaded newer image for debian:latest
root@3fb577e482d8:/# cat /etc/*-release
PRETTY_NAME="Debian GNU/Linux 8 (jessie)"
NAME="Debian GNU/Linux"
VERSION_ID="8"
VERSION="8 (jessie)"
…
Darkmira Tour Community & PHP Com Rapadura - 12/2016
Criando um container Debian
A partir desse momento eu tenho um container onde posso
instalar libs/bins para atender as necessidades da minha
aplicação, fazendo com que seja desnecessário possuir
ambiente localmente instalado, evitando aquele monte de
serviço sendo em paralelo.
Darkmira Tour Community & PHP Com Rapadura - 12/2016
Trabalhando com Docker
Com o docker você pode baixar imagens oficiais, PHP,
MySQL, Wordpress, Drupal onde é possível criar containers
com ambientes pré-configurados, sem que haja a
necessidade de instalação de dependências.
Darkmira Tour Community & PHP Com Rapadura - 12/2016
Trabalhando com Docker
Darkmira Tour Community & PHP Com Rapadura - 12/2016
Trabalhando com Docker
pc-docker:~ alefcastelo$ docker run -ti php:5.4 /bin/bash
Unable to find image 'php:5.4' locally
5.4: Pulling from library/php
1a1bc86469d0: Pull complete
Digest: sha256:6432eb062e481413223df92f86b2b93b2011a9f807d1461cb7ba38c2b646464a
Status: Downloaded newer image for php:5.4
root@3fb577e482d8:/# php -v
PHP 5.4.45 (cli) (built: Dec 5 2015 08:26:46)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2014 Zend Technologies
…
Darkmira Tour Community & PHP Com Rapadura - 12/2016
Usando Docker com PHP
Para iniciar uma aplicação php em um container você pode entrar na pasta da
aplicação e executar o comando
docker run -v $PWD:/var/www/html 
-p 80:80 
-ti php:5.6-apache 
/bin/bash
e já é o suficiente pra você possuir uma aplicação PHP rodando dentro do seu
container, para visualizar essa aplicação em funcionamento acesse o localhost
na porta 80.
Darkmira Tour Community & PHP Com Rapadura - 12/2016
Usando Docker com PHP
Se você está usando uma imagem oficial php, e caso você
precise instalar novas dependências, diferentes da que já
possui na imagem oficial, use o comando que já foi inserido
na imagem oficial exemplo:
docker-php-ext-install pgsql zip mysql gd
Darkmira Tour Community & PHP Com Rapadura - 12/2016
Versionamento
da imagem
Darkmira Tour Community & PHP Com Rapadura - 12/2016
Versionamento da imagem
Assim como existe o github, gitlab, bitbucket e outros, o docker
possui o Docker Hub, que é um lugar que prover repositório, onde
podemos salvar a imagem que criamos seja via Dockerfile ou um
Snapshot do Container.
Para criar uma imagem partindo de um container você executa o
seguinte comando:
docker commit <container_id> <image_name>:<image_tag>
Darkmira Tour Community & PHP Com Rapadura - 12/2016
Dockerfile
O Dockerfile é um arquivo onde dentro dele
contém instruções que irão automatizar o
processo de criação de imagens.
Darkmira Tour Community & PHP Com Rapadura - 12/2016
FROM php:5.6-apache
WORKDIR /var/www/html
RUN apt-get update && apt-get install -y 
libpcre3-dev 
libzip-dev
RUN a2enmod rewrite
RUN pecl install SPL_Types
RUN docker-php-ext-install zip
RUN touch /usr/local/etc/php/conf.d/spl.ini && echo "extension=spl_types.so" >
/usr/local/etc/php/conf.d/spl.ini
Dockerfile
Darkmira Tour Community & PHP Com Rapadura - 12/2016
Dockerfile
Possuindo o arquivo anterior com o nome ‘Dockerfile’, basta
entrar dentro da pasta onde o arquivo estar e executar o
seguinte comando:
docker build -t <imagem_name>:<tag_name> .
Darkmira Tour Community & PHP Com Rapadura - 12/2016
Dockerfile
O Dockerfile dá total liberdade para você criar suas imagem, e
liberar os arquivos fontes para que outras pessoas possam
melhorar e evoluir sua imagem adicionando novas
configurações. Esse é o Dockerfile da imagem oficial do
php:5.6-apache
https://github.com/docker-library/php/blob/master/5.6/Dockerfile
Darkmira Tour Community & PHP Com Rapadura - 12/2016
Dica Dockerfile
Ao criar uma imagem a partir de um Dockerfile, pode ser
necessário alterar a configuração original de algo que já esteja
dentro do sistema, exemplo: Caso você esteja baseando seu
Dockerfile na imagem oficial do php, php:5.6-apache você irá
precisar usar a instrução ADD, que irá adicionar um arquivo
para dentro da imagem, assim substituindo o arquivo original
caso o arquivo tenha o mesmo caminho.
Darkmira Tour Community & PHP Com Rapadura - 12/2016
Docker Hub
Docker hub é o repositório onde você pode colocar suas
imagens, facilitando o download dessa imagem para uso em
qualquer lugar, é como um git clone, essas imagens podem
ser baixadas por terceiros caso ela esteja marcada como
pública, ou somente por você caso forem privadas.
Darkmira Tour Community & PHP Com Rapadura - 12/2016
Docker Compose
Darkmira Tour Community & PHP Com Rapadura - 12/2016
Docker Compose
O Docker Compose, é um arquivo que contém instruções
que facilita a utilização de vários contêineres, sendo usado
ao mesmo tempo por uma aplicação, exemplo: para que
minha aplicação funcione eu preciso de um container, com
MySQL, outro com PHP, Redis e etc. Isso é o que
chamamos de Orquestração de Containers.
Darkmira Tour Community & PHP Com Rapadura - 12/2016
Docker Compose
web:
image: alefcastelo/php5.6-apache
volumes:
- ./:/var/www/
ports:
- 80:80
links:
- db:db
db:
image: mysql
ports:
- 3306:3306
environment:
- MYSQL_ROOT_PASSWORD=symfony
volumes:
- ./db:/var/lib/mysql
Darkmira Tour Community & PHP Com Rapadura - 12/2016
Docker Compose
Com esse arquivo eu consigo subir um ambiente completo,
com containers se comunicando, separando cada camada
da minha aplicação.
Para executar as instruções do docker-compose.yml basta
executar o comando:
docker-compose up -d
Darkmira Tour Community & PHP Com Rapadura - 12/2016
Perguntas?

Trabalhando em ambientes php com docker

  • 1.
    Trabalhando em ambientes PHPcom Darkmira Tour Community & PHP Com Rapadura - 12/2016
  • 2.
    Darkmira Tour Community& PHP Com Rapadura - 12/2016 https://github.com/alefcastelo https://twitter.com/alefcastelo https://br.linkedin.com/in/alef-castelo-9639a673 https://medium.com/@alefcastelo/ Quem sou eu?
  • 3.
    Darkmira Tour Community& PHP Com Rapadura - 12/2016 ● O que é o Docker? ● Por que Docker e não Vagrant? ● Trabalhando com Docker ● Usando Docker com PHP ● Versionamento da imagem ● Dockerfile, Docker Hub, Docker Compose Tópicos
  • 4.
    Darkmira Tour Community& PHP Com Rapadura - 12/2016 Você já ouviu ou falou aquela velha frase “na minha máquina funciona”?
  • 5.
    Darkmira Tour Community& PHP Com Rapadura - 12/2016 Ou pior “no servidor funciona”?
  • 6.
    Darkmira Tour Community& PHP Com Rapadura - 12/2016 1. Diferenças entre o ambiente de desenvolvimento e de produção. 2. Portabilidade da aplicação. 3. Padronização do ambiente. Temos um problema...
  • 7.
    Temos uma solução DarkmiraTour Community & PHP Com Rapadura - 12/2016
  • 8.
    Darkmira Tour Community& PHP Com Rapadura - 12/2016
  • 9.
    Darkmira Tour Community& PHP Com Rapadura - 12/2016 Docker é uma plataforma aberta para desenvolvedores e administradores de sistemas para criar, enviar e executar aplicativos distribuídos, seja em laptops, VMs de data center ou na nuvem. O que é o Docker?
  • 10.
    Darkmira Tour Community& PHP Com Rapadura - 12/2016 Build, Ship, and Run Any App, Anywhere
  • 11.
    Darkmira Tour Community& PHP Com Rapadura - 12/2016 Crie, envie e execute contêineres em qualquer lugar
  • 12.
    Darkmira Tour Community& PHP Com Rapadura - 12/2016
  • 13.
    Darkmira Tour Community& PHP Com Rapadura - 12/2016 Container é basicamente o chroot em uso, compartilhando o mesmo kernel do host, onde é possível definir recursos como rede, memória, cpu e outros. O que são contêineres?
  • 14.
    Darkmira Tour Community& PHP Com Rapadura - 12/2016 Por que Docker e não Vagrant?
  • 15.
    Darkmira Tour Community& PHP Com Rapadura - 12/2016 Vagrant
  • 16.
    Darkmira Tour Community& PHP Com Rapadura - 12/2016 Docker
  • 17.
    Darkmira Tour Community& PHP Com Rapadura - 12/2016 Comparação
  • 18.
    Darkmira Tour Community& PHP Com Rapadura - 12/2016 1. São lentas para iniciar. 2. Problemas com portabilidade. 3. Precisam de mais espaço, pois necessitam de todo o SO. VMs
  • 19.
    Darkmira Tour Community& PHP Com Rapadura - 12/2016 1. Rápidos para iniciar. 2. Podem ser transportados com facilidade. 3. Não necessita do SO completo, pois rodam em cima do Kernel do Host OS. Containers Docker
  • 20.
    Darkmira Tour Community& PHP Com Rapadura - 12/2016 Trabalhando com Docker
  • 21.
    Darkmira Tour Community& PHP Com Rapadura - 12/2016 Supondo que você já possui o docker instalado, caso não tenha, essa é a url de instalação: https://docs.docker.com/engine/installation/
  • 22.
    Darkmira Tour Community& PHP Com Rapadura - 12/2016 version Show the Docker version information info Display system-wide information images List images ps List containers run Run a command in a new container exec Run a command in a running container inspect Return low-level information on a container or image kill Kill a running container rm Remove one or more containers A lista completa de comandos você pode conferir no link https://docs.docker.com/engine/reference/commandline/ Comandos Básicos
  • 23.
    1. Sempre precisamosde uma imagem para criar um container. 2. Sempre que criarmos um container, podemos expor uma porta onde será acessível no host, fazendo com que você tenha possibilidade de disponibilizar serviços para fora do container. 3. Possibilidade de entrar e sair de dentro do container, isso da facilidade de modificação no container. 4. Todo container dura enquanto seu processo estiver sendo executado. 5. É possível, de fora do container executar comandos dentro dele. Darkmira Tour Community & PHP Com Rapadura - 12/2016 Trabalhando com Docker
  • 24.
    pc-docker:~ alefcastelo$ dockerrun -ti debian /bin/bash Unable to find image 'debian:latest' locally latest: Pulling from library/debian 75a822cd7888: Pull complete Digest: sha256:f7062cf040f67f0c26ff46b3b44fe036c29468a7e69d8170f37c57f2eec1261b Status: Downloaded newer image for debian:latest root@3fb577e482d8:/# cat /etc/*-release PRETTY_NAME="Debian GNU/Linux 8 (jessie)" NAME="Debian GNU/Linux" VERSION_ID="8" VERSION="8 (jessie)" … Darkmira Tour Community & PHP Com Rapadura - 12/2016 Criando um container Debian
  • 25.
    A partir dessemomento eu tenho um container onde posso instalar libs/bins para atender as necessidades da minha aplicação, fazendo com que seja desnecessário possuir ambiente localmente instalado, evitando aquele monte de serviço sendo em paralelo. Darkmira Tour Community & PHP Com Rapadura - 12/2016 Trabalhando com Docker
  • 26.
    Com o dockervocê pode baixar imagens oficiais, PHP, MySQL, Wordpress, Drupal onde é possível criar containers com ambientes pré-configurados, sem que haja a necessidade de instalação de dependências. Darkmira Tour Community & PHP Com Rapadura - 12/2016 Trabalhando com Docker
  • 27.
    Darkmira Tour Community& PHP Com Rapadura - 12/2016 Trabalhando com Docker pc-docker:~ alefcastelo$ docker run -ti php:5.4 /bin/bash Unable to find image 'php:5.4' locally 5.4: Pulling from library/php 1a1bc86469d0: Pull complete Digest: sha256:6432eb062e481413223df92f86b2b93b2011a9f807d1461cb7ba38c2b646464a Status: Downloaded newer image for php:5.4 root@3fb577e482d8:/# php -v PHP 5.4.45 (cli) (built: Dec 5 2015 08:26:46) Copyright (c) 1997-2014 The PHP Group Zend Engine v2.4.0, Copyright (c) 1998-2014 Zend Technologies …
  • 28.
    Darkmira Tour Community& PHP Com Rapadura - 12/2016 Usando Docker com PHP Para iniciar uma aplicação php em um container você pode entrar na pasta da aplicação e executar o comando docker run -v $PWD:/var/www/html -p 80:80 -ti php:5.6-apache /bin/bash e já é o suficiente pra você possuir uma aplicação PHP rodando dentro do seu container, para visualizar essa aplicação em funcionamento acesse o localhost na porta 80.
  • 29.
    Darkmira Tour Community& PHP Com Rapadura - 12/2016 Usando Docker com PHP Se você está usando uma imagem oficial php, e caso você precise instalar novas dependências, diferentes da que já possui na imagem oficial, use o comando que já foi inserido na imagem oficial exemplo: docker-php-ext-install pgsql zip mysql gd
  • 30.
    Darkmira Tour Community& PHP Com Rapadura - 12/2016 Versionamento da imagem
  • 31.
    Darkmira Tour Community& PHP Com Rapadura - 12/2016 Versionamento da imagem Assim como existe o github, gitlab, bitbucket e outros, o docker possui o Docker Hub, que é um lugar que prover repositório, onde podemos salvar a imagem que criamos seja via Dockerfile ou um Snapshot do Container. Para criar uma imagem partindo de um container você executa o seguinte comando: docker commit <container_id> <image_name>:<image_tag>
  • 32.
    Darkmira Tour Community& PHP Com Rapadura - 12/2016 Dockerfile O Dockerfile é um arquivo onde dentro dele contém instruções que irão automatizar o processo de criação de imagens.
  • 33.
    Darkmira Tour Community& PHP Com Rapadura - 12/2016 FROM php:5.6-apache WORKDIR /var/www/html RUN apt-get update && apt-get install -y libpcre3-dev libzip-dev RUN a2enmod rewrite RUN pecl install SPL_Types RUN docker-php-ext-install zip RUN touch /usr/local/etc/php/conf.d/spl.ini && echo "extension=spl_types.so" > /usr/local/etc/php/conf.d/spl.ini Dockerfile
  • 34.
    Darkmira Tour Community& PHP Com Rapadura - 12/2016 Dockerfile Possuindo o arquivo anterior com o nome ‘Dockerfile’, basta entrar dentro da pasta onde o arquivo estar e executar o seguinte comando: docker build -t <imagem_name>:<tag_name> .
  • 35.
    Darkmira Tour Community& PHP Com Rapadura - 12/2016 Dockerfile O Dockerfile dá total liberdade para você criar suas imagem, e liberar os arquivos fontes para que outras pessoas possam melhorar e evoluir sua imagem adicionando novas configurações. Esse é o Dockerfile da imagem oficial do php:5.6-apache https://github.com/docker-library/php/blob/master/5.6/Dockerfile
  • 36.
    Darkmira Tour Community& PHP Com Rapadura - 12/2016 Dica Dockerfile Ao criar uma imagem a partir de um Dockerfile, pode ser necessário alterar a configuração original de algo que já esteja dentro do sistema, exemplo: Caso você esteja baseando seu Dockerfile na imagem oficial do php, php:5.6-apache você irá precisar usar a instrução ADD, que irá adicionar um arquivo para dentro da imagem, assim substituindo o arquivo original caso o arquivo tenha o mesmo caminho.
  • 37.
    Darkmira Tour Community& PHP Com Rapadura - 12/2016 Docker Hub Docker hub é o repositório onde você pode colocar suas imagens, facilitando o download dessa imagem para uso em qualquer lugar, é como um git clone, essas imagens podem ser baixadas por terceiros caso ela esteja marcada como pública, ou somente por você caso forem privadas.
  • 38.
    Darkmira Tour Community& PHP Com Rapadura - 12/2016 Docker Compose
  • 39.
    Darkmira Tour Community& PHP Com Rapadura - 12/2016 Docker Compose O Docker Compose, é um arquivo que contém instruções que facilita a utilização de vários contêineres, sendo usado ao mesmo tempo por uma aplicação, exemplo: para que minha aplicação funcione eu preciso de um container, com MySQL, outro com PHP, Redis e etc. Isso é o que chamamos de Orquestração de Containers.
  • 40.
    Darkmira Tour Community& PHP Com Rapadura - 12/2016 Docker Compose web: image: alefcastelo/php5.6-apache volumes: - ./:/var/www/ ports: - 80:80 links: - db:db db: image: mysql ports: - 3306:3306 environment: - MYSQL_ROOT_PASSWORD=symfony volumes: - ./db:/var/lib/mysql
  • 41.
    Darkmira Tour Community& PHP Com Rapadura - 12/2016 Docker Compose Com esse arquivo eu consigo subir um ambiente completo, com containers se comunicando, separando cada camada da minha aplicação. Para executar as instruções do docker-compose.yml basta executar o comando: docker-compose up -d
  • 42.
    Darkmira Tour Community& PHP Com Rapadura - 12/2016 Perguntas?