Este documento fornece uma introdução ao Docker, discutindo: (1) o que é Docker e como ele resolve problemas com ambientes de desenvolvimento e produção diferentes; (2) como trabalhar com Docker e comandos básicos; (3) usando Docker com PHP.
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”?
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...
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?
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?
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
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 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
24. 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
25. 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
26. 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
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
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.
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