SlideShare uma empresa Scribd logo
1 de 30
Baixar para ler offline
Construção e provisionamento de ambientes
de desenvolvimento virtualizados
Thiago Rodrigues
Eng. de Software Sr.
CI&T - PHPSP
Thiago Rodrigues
Bacharel em Sistemas de Informação pela
Universidade do Estado de Minas Gerais (UEMG);
Engenheiro de Software Sênior na CI&T
Programador PHP há 11 anos;
Evangelista PHPSP e co-organizador do PHPSP
Campinas
Entusiasta do software livre
Gammer
Quem nunca?
Agenda
● Ambiente de desenvolvimento
● Problemas comuns
● Virtualização como possível solução
● Vagrant
● Docker
● Conclusões
Ambiente de desenvolvimento
Definição quase formal:
Ambiente onde as aplicações são desenvolvidas.
Geralmente montado no computador do desenvolvedor.
Possui ferramentas necessárias para execução da aplicação.
Semelhante ao ambiente de produção (onde a aplicação será usada).
Contém ferramentas que auxiliam no desenvolvimento.
Exemplo de ambiente de desenvolvimento
Ambiente de um site feito em Drupal 8
● Drupal 8
● Composer
● Sistema operacional (Linux, Windows, etc)
● Servidor Web (Apache, Nginx, etc)
● PHP + módulos requeridos
● SGBD (MySQL, PostgreSQL, etc)
● Ferramentas de desenvolvimento (Drush, XDebug, scripts de build,
etc).
Em suma: a construção do ambiente não é simples, tampouco trivial.
Problemas comuns
Documentação
O que tem que instalar?
Qual versão?
É necessário definir alguma configuração?
Quem vai lembrar daqui 1 ano?
E se o projeto for engavetado e ressurgir no futuro?
Se algo mudar, alguém vai atualizar?
Problemas comuns
Atualizações & Contribuições
Como agir quando precisamos atualizar as configurações do ambiente?
Como garantir que todos os devs apliquem as mudanças?
Como as pessoas podem contribuir?
Precisamos que todos atualizem a versão do PHP para versão 7.1!
Troquem o valor da diretiva error_reporting para E_ALL no php.ini.
Todos atualizem o script de build para a nova versão!
Problemas comuns
Tempo de construção
Quanto tempo é necessário para preparar o ambiente?
Será necessário que outro desenvolvedor ajude no procedimento?
E se for necessário reinstalar o SO ou montar o ambiente em outra
máquina?
Problemas comuns
Outros problemas
Como lidar com as preferências pessoais de cada desenvolvedor?
Como lidar com problemas do ambiente? Ex: bug na versão da biblioteca
cURL do Ubuntu 14.04.
Solução
Solução Ráááááá...
Solução
Virtualizar o ambiente de desenvolvimento
Isso permite:
● automação da construção (provisionamento);
● padronização do ambiente;
● versionamento do ambiente;
● independência do SO hospedeiro e das preferencias do usuário;
● reduz o tempo de preparação
● facilita atualizações & contribuições;
● dispensa documentação, basta um README.md informando como
provisionar.
Principais ferramentas de virtualização
Vagrant e Docker
Máquinas virtuais vs Containers
Vagrant
Automatiza a criação e provisionamento de máquinas virtuais.
Abstrai detalhes das ferramentas de virtualização.
Prós:
- simples e fácil
- funciona bem em Linux, Windows e Mac
- extensível através de plugins
Contras:
- overhead do SO da máquina Virtual;
- destina-se somente para ambiente de desenvolvimento
Vagrant - conceitos básicos
Provider: ferramenta de virtualização. Pode ser: VirtualBox,
VMware, DigitalOcean, Amazon AWS, etc.
Box: pacote Vagrant contendo o ambiente. Existem diversos na internet.
É possível criar um do 0 ou usar um pronto.
https://atlas.hashicorp.com/boxes/search
Provisioner: método de provisionamento. Pode ser shell, Ansible, Chef,
Puppet, etc.
Vagrantfile: arquivo de configuração onde as opções acima são
especificadas.
Vagrant - ambiente com PHP + Apache + MySQL
cd ~/projetos/drupalcamp
vagrant init hashicorp/precise64
Vagrant.configure(2) do |config|
config.vm.box = "hashicorp/precise64"
config.vm.provision :shell, :path => "provisionamento.sh"
config.vm.network :forwarded_port, host: 2015, guest: 80
config.vm.synced_folder ".", "/files"
end
Código completo em: https://github.com/xthiago/palestra-vagrant-docker
Vagrant - ambiente com PHP + Apache + MySQL
vim provisionamento.sh
#!/usr/bin/env bash
sudo apt-get install -y php5 apache2 libapache2-mod-php5 php5-mysql
mysql-server
sudo rm -rf /var/www/
sudo ln -sf /files /var/www
echo "<?php phpinfo(); ?>" > /var/www/index.php
echo ">>> Provisionamento finalizado. Acesse: http://127.0.0.1:2015"
Código completo em: https://github.com/xthiago/palestra-vagrant-docker
Vagrant - Principais comandos
Subir a máquina virtual (VM):
vagrant up
Reiniciar a VM:
vagrant restart
Desligar a VM:
vagrant halt
Destruir VM:
vagrant destroy
Conectar-se na VM via SSH:
vagrant ssh
Vagrant - Prática
clique na imagem p/abrir o
vídeo no YouTube
Docker + Docker Compose
Docker oferece um ecossistema muito além do ambiente de
desenvolvimento, que abrange também produção e deploy.
Docker Compose visa definir e executar containers docker através
de um único arquivo.
Prós:
- leve (principalmente em Linux)
- imagens são reutilizáveis e fácilmente extendidas;
- pode ser usado em produção;
- containers isolados;
Contras:
- necessita de VM no Windows e Mac;
- mais complicado que Vagrant;
Docker + Docker Compose - conceitos básicos
Imagem: é o template do container. Similar ao Box do Vagrant.
https://hub.docker.com/
Container: é a instância da imagem. A grosso modo é um processo
isolado do SO que possui acesso limitado a CPU, memória, file system e
rede.
São efêmeros, sendo necessário commitar alterações.
Dockerfile: arquivo que descreve ao Docker como construir uma
imagem.
docker-compose.yml: arquivo que especifica os serviços (containers), a
ligação entre eles, variáveis de ambiente, portas, etc.
Docker - ambiente com PHP + Apache + MySQL
Dockerfile
FROM php:7-apache
MAINTAINER Thiago Rodrigues <thiago@phpsp.org.br>
RUN apt-get update && apt-cache search xdebug && apt-get install -y
libfreetype6-dev libjpeg62-turbo-dev 
libmcrypt-dev libpng12-dev 
&& docker-php-ext-install -j$(nproc) iconv mcrypt pdo_mysql
RUN pecl install xdebug && docker-php-ext-enable xdebug
RUN a2enmod rewrite
Código completo em: https://github.com/xthiago/palestra-vagrant-docker
Docker - ambiente com PHP + Apache + MySQL
docker-compose.yml - parte 1
mysqlphpsp:
image: mysql:5.5
container_name: mysqlphpsp
ports:
- "2017:3306"
volumes:
- ./config/mysql/conf.d/my.cnf:/etc/mysql/conf.d/my.cnf
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: name
MYSQL_USER: admin
MYSQL_PASSWORD: admin
Código completo em: https://github.com/xthiago/palestra-vagrant-docker
Docker - ambiente com PHP + Apache + MySQL
docker-compose.yml - parte 2
phpsp:
build: .
container_name: phpsp
command: "/data/php-apache.sh"
volumes:
- .:/var/www/phpsp
- ./config/apache/phpsp.conf:/etc/apache2/sites-enabled/phpsp.conf
- ./config/php/php.ini:/usr/local/etc/php/php.ini
- ./config/php:/data
ports:
- "2016:80"
links:
- mysqlphpsp
environment:
APACHE_LOG_DIR: /var/log/apache2
working_dir: /var/www/phpsp
Código completo em: https://github.com/xthiago/palestra-vagrant-docker
Docker Compose - Principais comandos
Subir containers:
docker-compose up -d
Listar containers:
docker-compose ls
Reiniciar os containers:
docker-compose restart
Desligar containers:
docker-compose stop
Destruir constainers (desligados):
docker-compose rm
Conectar-se ao container:
docker exec -it NOME_CONTAINER
Docker Compose - Prática
clique na imagem p/abrir o
vídeo no YouTube
Algumas recomendações
● Incluir arquivos do Vagrant/Docker no repositório de código
da aplicação.
○ permite que outros entendam e contribuam
○ facilita a distribuição de alterações
○ garante rastreabilidade das alterações - Algo saiu errado? Reverta ;)
● Mapear diretório de scripts do repositório no $PATH da VM/container.
● Vagrant: usar NFS para aumentar a performance
● Subir a imagem para o Docker Hub - poupa o tempo de construção.
○ Plus: integrar com Github para fazer builds automáticos
● Colocar arquivo Vagrantfile no gitignore. Incluir no repo versão com sufixo
.dist.
○ isso permite que devs façam pequenas customizações sem afetar
ambiente de outros. Ex: quantidade de memória RAM.
Conclusão
Ambas ferramentas são sólidas e oferecem recursos que mitigam
os problemas citados previamente.
use Vagrant se
● deseja algo mais simples
● não possui muito tempo para estudar
use Docker se
● possui uma arquitetura complexa
● almeja maior paridade com produção
● almeja uma ferramenta que possa ser usada em produção
● procura diversão ;)
Contato
xthiago@gmail.com
xthiago.com
+ PHP dia 20/agosto em Campinas:
phpspima.com.br

Mais conteúdo relacionado

Mais procurados

Mocking Test - ThinkUp! - Abril/2017
Mocking Test - ThinkUp! - Abril/2017Mocking Test - ThinkUp! - Abril/2017
Mocking Test - ThinkUp! - Abril/2017Renato Groff
 
.NET Core e Testes de Unidade - Visual Studio Summit 2017
.NET Core e Testes de Unidade - Visual Studio Summit 2017.NET Core e Testes de Unidade - Visual Studio Summit 2017
.NET Core e Testes de Unidade - Visual Studio Summit 2017Renato Groff
 
Automatizando Testes de Integração com Azure DevOps | DevOps Experience - Fev...
Automatizando Testes de Integração com Azure DevOps | DevOps Experience - Fev...Automatizando Testes de Integração com Azure DevOps | DevOps Experience - Fev...
Automatizando Testes de Integração com Azure DevOps | DevOps Experience - Fev...Renato Groffe
 
Performance de verdade com Phalcon Framework
Performance de verdade com Phalcon FrameworkPerformance de verdade com Phalcon Framework
Performance de verdade com Phalcon FrameworkJaime Neto
 
.NET + Microsserviços: alternativas open source para descomplicar a vida | TD...
.NET + Microsserviços: alternativas open source para descomplicar a vida | TD....NET + Microsserviços: alternativas open source para descomplicar a vida | TD...
.NET + Microsserviços: alternativas open source para descomplicar a vida | TD...Renato Groffe
 
Test-Driven Development (TDD) - MSP Coding Day
Test-Driven Development (TDD) - MSP Coding DayTest-Driven Development (TDD) - MSP Coding Day
Test-Driven Development (TDD) - MSP Coding DayRenato Groff
 
Behavior-Driven Development (BDD) - QA Ninja Conf 2016
Behavior-Driven Development (BDD) - QA Ninja Conf 2016Behavior-Driven Development (BDD) - QA Ninja Conf 2016
Behavior-Driven Development (BDD) - QA Ninja Conf 2016Renato Groff
 
Testes de interfaces Web com Selenium
Testes de interfaces Web com SeleniumTestes de interfaces Web com Selenium
Testes de interfaces Web com SeleniumRenato Groff
 
Behavior-Driven Development (BDD) - DevOps Summit 2016
Behavior-Driven Development (BDD) - DevOps Summit 2016Behavior-Driven Development (BDD) - DevOps Summit 2016
Behavior-Driven Development (BDD) - DevOps Summit 2016Renato Groff
 
Contribuindo e criando software livre
Contribuindo e criando software livreContribuindo e criando software livre
Contribuindo e criando software livreVitor Mattos
 
Zend Framework: Reuso e extensão de componentes para fácil manutenção
Zend Framework: Reuso e extensão de componentes para fácil manutençãoZend Framework: Reuso e extensão de componentes para fácil manutenção
Zend Framework: Reuso e extensão de componentes para fácil manutençãoFlávio Lisboa
 
Pense no futuro: PHP com Zend Framework
Pense no futuro: PHP com Zend FrameworkPense no futuro: PHP com Zend Framework
Pense no futuro: PHP com Zend FrameworkFlávio Lisboa
 
Certificação Zend Framework
Certificação Zend FrameworkCertificação Zend Framework
Certificação Zend FrameworkJaime Neto
 
Mocking Test - QA Ninja Conf 2016
Mocking Test - QA Ninja Conf 2016Mocking Test - QA Ninja Conf 2016
Mocking Test - QA Ninja Conf 2016Renato Groff
 
Criando Aplicações PHP Poderosas com Zend Framework 2 - 8º SOLISC
Criando Aplicações PHP Poderosas com Zend Framework 2 - 8º SOLISCCriando Aplicações PHP Poderosas com Zend Framework 2 - 8º SOLISC
Criando Aplicações PHP Poderosas com Zend Framework 2 - 8º SOLISCFlávio Lisboa
 
Django: desenvolvendo aplicações web de maneira simples e rápida!
Django: desenvolvendo aplicações web de maneira simples e rápida!Django: desenvolvendo aplicações web de maneira simples e rápida!
Django: desenvolvendo aplicações web de maneira simples e rápida!Felipe Queiroz
 
BDD (Behavior-Driven Development) - Setembro/2015
BDD (Behavior-Driven Development) - Setembro/2015BDD (Behavior-Driven Development) - Setembro/2015
BDD (Behavior-Driven Development) - Setembro/2015Renato Groff
 

Mais procurados (20)

Mocking Test - ThinkUp! - Abril/2017
Mocking Test - ThinkUp! - Abril/2017Mocking Test - ThinkUp! - Abril/2017
Mocking Test - ThinkUp! - Abril/2017
 
.NET Core e Testes de Unidade - Visual Studio Summit 2017
.NET Core e Testes de Unidade - Visual Studio Summit 2017.NET Core e Testes de Unidade - Visual Studio Summit 2017
.NET Core e Testes de Unidade - Visual Studio Summit 2017
 
Automatizando Testes de Integração com Azure DevOps | DevOps Experience - Fev...
Automatizando Testes de Integração com Azure DevOps | DevOps Experience - Fev...Automatizando Testes de Integração com Azure DevOps | DevOps Experience - Fev...
Automatizando Testes de Integração com Azure DevOps | DevOps Experience - Fev...
 
PHP: Como não programar em POG
PHP: Como não programar em POGPHP: Como não programar em POG
PHP: Como não programar em POG
 
Performance de verdade com Phalcon Framework
Performance de verdade com Phalcon FrameworkPerformance de verdade com Phalcon Framework
Performance de verdade com Phalcon Framework
 
.NET + Microsserviços: alternativas open source para descomplicar a vida | TD...
.NET + Microsserviços: alternativas open source para descomplicar a vida | TD....NET + Microsserviços: alternativas open source para descomplicar a vida | TD...
.NET + Microsserviços: alternativas open source para descomplicar a vida | TD...
 
Test-Driven Development (TDD) - MSP Coding Day
Test-Driven Development (TDD) - MSP Coding DayTest-Driven Development (TDD) - MSP Coding Day
Test-Driven Development (TDD) - MSP Coding Day
 
Behavior-Driven Development (BDD) - QA Ninja Conf 2016
Behavior-Driven Development (BDD) - QA Ninja Conf 2016Behavior-Driven Development (BDD) - QA Ninja Conf 2016
Behavior-Driven Development (BDD) - QA Ninja Conf 2016
 
Testes de interfaces Web com Selenium
Testes de interfaces Web com SeleniumTestes de interfaces Web com Selenium
Testes de interfaces Web com Selenium
 
Behavior-Driven Development (BDD) - DevOps Summit 2016
Behavior-Driven Development (BDD) - DevOps Summit 2016Behavior-Driven Development (BDD) - DevOps Summit 2016
Behavior-Driven Development (BDD) - DevOps Summit 2016
 
Contribuindo e criando software livre
Contribuindo e criando software livreContribuindo e criando software livre
Contribuindo e criando software livre
 
Zend Framework: Reuso e extensão de componentes para fácil manutenção
Zend Framework: Reuso e extensão de componentes para fácil manutençãoZend Framework: Reuso e extensão de componentes para fácil manutenção
Zend Framework: Reuso e extensão de componentes para fácil manutenção
 
Pense no futuro: PHP com Zend Framework
Pense no futuro: PHP com Zend FrameworkPense no futuro: PHP com Zend Framework
Pense no futuro: PHP com Zend Framework
 
Certificação Zend Framework
Certificação Zend FrameworkCertificação Zend Framework
Certificação Zend Framework
 
Vraptor 3
Vraptor 3Vraptor 3
Vraptor 3
 
Mocking Test - QA Ninja Conf 2016
Mocking Test - QA Ninja Conf 2016Mocking Test - QA Ninja Conf 2016
Mocking Test - QA Ninja Conf 2016
 
Criando Aplicações PHP Poderosas com Zend Framework 2 - 8º SOLISC
Criando Aplicações PHP Poderosas com Zend Framework 2 - 8º SOLISCCriando Aplicações PHP Poderosas com Zend Framework 2 - 8º SOLISC
Criando Aplicações PHP Poderosas com Zend Framework 2 - 8º SOLISC
 
Django: desenvolvendo aplicações web de maneira simples e rápida!
Django: desenvolvendo aplicações web de maneira simples e rápida!Django: desenvolvendo aplicações web de maneira simples e rápida!
Django: desenvolvendo aplicações web de maneira simples e rápida!
 
Desenvolvimento Mobile Web usando PHP
Desenvolvimento Mobile Web usando PHPDesenvolvimento Mobile Web usando PHP
Desenvolvimento Mobile Web usando PHP
 
BDD (Behavior-Driven Development) - Setembro/2015
BDD (Behavior-Driven Development) - Setembro/2015BDD (Behavior-Driven Development) - Setembro/2015
BDD (Behavior-Driven Development) - Setembro/2015
 

Destaque

Destaque (9)

Modern PHP
Modern PHPModern PHP
Modern PHP
 
DevOps
DevOpsDevOps
DevOps
 
DEV-OPS para teste de software
DEV-OPS para teste de softwareDEV-OPS para teste de software
DEV-OPS para teste de software
 
Doctrine for Dummies
Doctrine for DummiesDoctrine for Dummies
Doctrine for Dummies
 
DevOps
DevOpsDevOps
DevOps
 
DevOps: A Culture Transformation, More than Technology
DevOps: A Culture Transformation, More than TechnologyDevOps: A Culture Transformation, More than Technology
DevOps: A Culture Transformation, More than Technology
 
Introducing DevOps
Introducing DevOpsIntroducing DevOps
Introducing DevOps
 
DevOps 101
DevOps 101DevOps 101
DevOps 101
 
Integração contínua em PHP com Jenkins
Integração contínua em PHP com JenkinsIntegração contínua em PHP com Jenkins
Integração contínua em PHP com Jenkins
 

Semelhante a Ambiente de desenvolvimento virtualizado com Vagrant e Docker

Vagrant uma ferramenta realmente útil e versátil
Vagrant   uma ferramenta realmente útil e versátilVagrant   uma ferramenta realmente útil e versátil
Vagrant uma ferramenta realmente útil e versátilWanderlei Silva do Carmo
 
Programação Multiplataforma em Ambiente Web
Programação Multiplataforma em Ambiente WebProgramação Multiplataforma em Ambiente Web
Programação Multiplataforma em Ambiente WebIsrael Messias
 
Evitando a fadiga com Laravel Homestead
Evitando a fadiga com Laravel HomesteadEvitando a fadiga com Laravel Homestead
Evitando a fadiga com Laravel HomesteadDanilo Esser
 
Mercurianos - .Net na Prática - Da instalação até o debug da nossa API em um ...
Mercurianos - .Net na Prática - Da instalação até o debug da nossa API em um ...Mercurianos - .Net na Prática - Da instalação até o debug da nossa API em um ...
Mercurianos - .Net na Prática - Da instalação até o debug da nossa API em um ...Eliel Simoncelo
 
Ferramentas Essenciais para Desenvolvedores de Plugins WordPress
Ferramentas Essenciais para Desenvolvedores de Plugins WordPressFerramentas Essenciais para Desenvolvedores de Plugins WordPress
Ferramentas Essenciais para Desenvolvedores de Plugins WordPressTiago Hillebrandt
 
Google App Engine e PHP
Google App Engine e PHPGoogle App Engine e PHP
Google App Engine e PHPLuiz Messias
 
Desenvolvendo com PHP e Docker
Desenvolvendo com PHP e DockerDesenvolvendo com PHP e Docker
Desenvolvendo com PHP e DockerWaldemar Neto
 
Desenvolvendo para WordPress com Docker, Git e WP-CLI
Desenvolvendo para WordPress com Docker, Git e WP-CLIDesenvolvendo para WordPress com Docker, Git e WP-CLI
Desenvolvendo para WordPress com Docker, Git e WP-CLIRudá Almeida
 
Banco de Dados - Docker Compose + Bancos Relacionais: descomplicando a montag...
Banco de Dados - Docker Compose + Bancos Relacionais: descomplicando a montag...Banco de Dados - Docker Compose + Bancos Relacionais: descomplicando a montag...
Banco de Dados - Docker Compose + Bancos Relacionais: descomplicando a montag...Renato Groff
 
Aplicações Profissionais para Internet com Zend Framework
Aplicações Profissionais para Internet com Zend FrameworkAplicações Profissionais para Internet com Zend Framework
Aplicações Profissionais para Internet com Zend FrameworkFlávio Lisboa
 
Source-to-container no mundo real
Source-to-container no mundo realSource-to-container no mundo real
Source-to-container no mundo realEvandro Silvestre
 
Lab python django - parte 2 - python + virtualenv
Lab python django - parte 2 - python + virtualenvLab python django - parte 2 - python + virtualenv
Lab python django - parte 2 - python + virtualenvPedro Fernandes Vieira
 
Xdebug seus problemas acabaram - tdc floripa 2017
Xdebug   seus problemas acabaram - tdc floripa 2017Xdebug   seus problemas acabaram - tdc floripa 2017
Xdebug seus problemas acabaram - tdc floripa 2017Vitor Mattos
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...tdc-globalcode
 
Containers com docker #CPRecife4
Containers com docker #CPRecife4Containers com docker #CPRecife4
Containers com docker #CPRecife4David Ruiz
 
Desenvolvimento web no Linux
Desenvolvimento web no LinuxDesenvolvimento web no Linux
Desenvolvimento web no LinuxEduardo Rozario
 

Semelhante a Ambiente de desenvolvimento virtualizado com Vagrant e Docker (20)

Vagrant uma ferramenta realmente útil e versátil
Vagrant   uma ferramenta realmente útil e versátilVagrant   uma ferramenta realmente útil e versátil
Vagrant uma ferramenta realmente útil e versátil
 
Programação Multiplataforma em Ambiente Web
Programação Multiplataforma em Ambiente WebProgramação Multiplataforma em Ambiente Web
Programação Multiplataforma em Ambiente Web
 
Evitando a fadiga com Laravel Homestead
Evitando a fadiga com Laravel HomesteadEvitando a fadiga com Laravel Homestead
Evitando a fadiga com Laravel Homestead
 
PHP com Docker
PHP com DockerPHP com Docker
PHP com Docker
 
Cake Php
Cake PhpCake Php
Cake Php
 
Mercurianos - .Net na Prática - Da instalação até o debug da nossa API em um ...
Mercurianos - .Net na Prática - Da instalação até o debug da nossa API em um ...Mercurianos - .Net na Prática - Da instalação até o debug da nossa API em um ...
Mercurianos - .Net na Prática - Da instalação até o debug da nossa API em um ...
 
Ferramentas Essenciais para Desenvolvedores de Plugins WordPress
Ferramentas Essenciais para Desenvolvedores de Plugins WordPressFerramentas Essenciais para Desenvolvedores de Plugins WordPress
Ferramentas Essenciais para Desenvolvedores de Plugins WordPress
 
MigraçãO
MigraçãOMigraçãO
MigraçãO
 
Google App Engine e PHP
Google App Engine e PHPGoogle App Engine e PHP
Google App Engine e PHP
 
Desenvolvendo com PHP e Docker
Desenvolvendo com PHP e DockerDesenvolvendo com PHP e Docker
Desenvolvendo com PHP e Docker
 
Desenvolvendo para WordPress com Docker, Git e WP-CLI
Desenvolvendo para WordPress com Docker, Git e WP-CLIDesenvolvendo para WordPress com Docker, Git e WP-CLI
Desenvolvendo para WordPress com Docker, Git e WP-CLI
 
Banco de Dados - Docker Compose + Bancos Relacionais: descomplicando a montag...
Banco de Dados - Docker Compose + Bancos Relacionais: descomplicando a montag...Banco de Dados - Docker Compose + Bancos Relacionais: descomplicando a montag...
Banco de Dados - Docker Compose + Bancos Relacionais: descomplicando a montag...
 
I educar-manual-de-instalaao
I educar-manual-de-instalaaoI educar-manual-de-instalaao
I educar-manual-de-instalaao
 
Aplicações Profissionais para Internet com Zend Framework
Aplicações Profissionais para Internet com Zend FrameworkAplicações Profissionais para Internet com Zend Framework
Aplicações Profissionais para Internet com Zend Framework
 
Source-to-container no mundo real
Source-to-container no mundo realSource-to-container no mundo real
Source-to-container no mundo real
 
Lab python django - parte 2 - python + virtualenv
Lab python django - parte 2 - python + virtualenvLab python django - parte 2 - python + virtualenv
Lab python django - parte 2 - python + virtualenv
 
Xdebug seus problemas acabaram - tdc floripa 2017
Xdebug   seus problemas acabaram - tdc floripa 2017Xdebug   seus problemas acabaram - tdc floripa 2017
Xdebug seus problemas acabaram - tdc floripa 2017
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
 
Containers com docker #CPRecife4
Containers com docker #CPRecife4Containers com docker #CPRecife4
Containers com docker #CPRecife4
 
Desenvolvimento web no Linux
Desenvolvimento web no LinuxDesenvolvimento web no Linux
Desenvolvimento web no Linux
 

Ambiente de desenvolvimento virtualizado com Vagrant e Docker

  • 1. Construção e provisionamento de ambientes de desenvolvimento virtualizados Thiago Rodrigues Eng. de Software Sr. CI&T - PHPSP
  • 2. Thiago Rodrigues Bacharel em Sistemas de Informação pela Universidade do Estado de Minas Gerais (UEMG); Engenheiro de Software Sênior na CI&T Programador PHP há 11 anos; Evangelista PHPSP e co-organizador do PHPSP Campinas Entusiasta do software livre Gammer
  • 4. Agenda ● Ambiente de desenvolvimento ● Problemas comuns ● Virtualização como possível solução ● Vagrant ● Docker ● Conclusões
  • 5. Ambiente de desenvolvimento Definição quase formal: Ambiente onde as aplicações são desenvolvidas. Geralmente montado no computador do desenvolvedor. Possui ferramentas necessárias para execução da aplicação. Semelhante ao ambiente de produção (onde a aplicação será usada). Contém ferramentas que auxiliam no desenvolvimento.
  • 6. Exemplo de ambiente de desenvolvimento Ambiente de um site feito em Drupal 8 ● Drupal 8 ● Composer ● Sistema operacional (Linux, Windows, etc) ● Servidor Web (Apache, Nginx, etc) ● PHP + módulos requeridos ● SGBD (MySQL, PostgreSQL, etc) ● Ferramentas de desenvolvimento (Drush, XDebug, scripts de build, etc). Em suma: a construção do ambiente não é simples, tampouco trivial.
  • 7. Problemas comuns Documentação O que tem que instalar? Qual versão? É necessário definir alguma configuração? Quem vai lembrar daqui 1 ano? E se o projeto for engavetado e ressurgir no futuro? Se algo mudar, alguém vai atualizar?
  • 8. Problemas comuns Atualizações & Contribuições Como agir quando precisamos atualizar as configurações do ambiente? Como garantir que todos os devs apliquem as mudanças? Como as pessoas podem contribuir? Precisamos que todos atualizem a versão do PHP para versão 7.1! Troquem o valor da diretiva error_reporting para E_ALL no php.ini. Todos atualizem o script de build para a nova versão!
  • 9. Problemas comuns Tempo de construção Quanto tempo é necessário para preparar o ambiente? Será necessário que outro desenvolvedor ajude no procedimento? E se for necessário reinstalar o SO ou montar o ambiente em outra máquina?
  • 10. Problemas comuns Outros problemas Como lidar com as preferências pessoais de cada desenvolvedor? Como lidar com problemas do ambiente? Ex: bug na versão da biblioteca cURL do Ubuntu 14.04.
  • 13. Solução Virtualizar o ambiente de desenvolvimento Isso permite: ● automação da construção (provisionamento); ● padronização do ambiente; ● versionamento do ambiente; ● independência do SO hospedeiro e das preferencias do usuário; ● reduz o tempo de preparação ● facilita atualizações & contribuições; ● dispensa documentação, basta um README.md informando como provisionar.
  • 14. Principais ferramentas de virtualização Vagrant e Docker Máquinas virtuais vs Containers
  • 15. Vagrant Automatiza a criação e provisionamento de máquinas virtuais. Abstrai detalhes das ferramentas de virtualização. Prós: - simples e fácil - funciona bem em Linux, Windows e Mac - extensível através de plugins Contras: - overhead do SO da máquina Virtual; - destina-se somente para ambiente de desenvolvimento
  • 16. Vagrant - conceitos básicos Provider: ferramenta de virtualização. Pode ser: VirtualBox, VMware, DigitalOcean, Amazon AWS, etc. Box: pacote Vagrant contendo o ambiente. Existem diversos na internet. É possível criar um do 0 ou usar um pronto. https://atlas.hashicorp.com/boxes/search Provisioner: método de provisionamento. Pode ser shell, Ansible, Chef, Puppet, etc. Vagrantfile: arquivo de configuração onde as opções acima são especificadas.
  • 17. Vagrant - ambiente com PHP + Apache + MySQL cd ~/projetos/drupalcamp vagrant init hashicorp/precise64 Vagrant.configure(2) do |config| config.vm.box = "hashicorp/precise64" config.vm.provision :shell, :path => "provisionamento.sh" config.vm.network :forwarded_port, host: 2015, guest: 80 config.vm.synced_folder ".", "/files" end Código completo em: https://github.com/xthiago/palestra-vagrant-docker
  • 18. Vagrant - ambiente com PHP + Apache + MySQL vim provisionamento.sh #!/usr/bin/env bash sudo apt-get install -y php5 apache2 libapache2-mod-php5 php5-mysql mysql-server sudo rm -rf /var/www/ sudo ln -sf /files /var/www echo "<?php phpinfo(); ?>" > /var/www/index.php echo ">>> Provisionamento finalizado. Acesse: http://127.0.0.1:2015" Código completo em: https://github.com/xthiago/palestra-vagrant-docker
  • 19. Vagrant - Principais comandos Subir a máquina virtual (VM): vagrant up Reiniciar a VM: vagrant restart Desligar a VM: vagrant halt Destruir VM: vagrant destroy Conectar-se na VM via SSH: vagrant ssh
  • 20. Vagrant - Prática clique na imagem p/abrir o vídeo no YouTube
  • 21. Docker + Docker Compose Docker oferece um ecossistema muito além do ambiente de desenvolvimento, que abrange também produção e deploy. Docker Compose visa definir e executar containers docker através de um único arquivo. Prós: - leve (principalmente em Linux) - imagens são reutilizáveis e fácilmente extendidas; - pode ser usado em produção; - containers isolados; Contras: - necessita de VM no Windows e Mac; - mais complicado que Vagrant;
  • 22. Docker + Docker Compose - conceitos básicos Imagem: é o template do container. Similar ao Box do Vagrant. https://hub.docker.com/ Container: é a instância da imagem. A grosso modo é um processo isolado do SO que possui acesso limitado a CPU, memória, file system e rede. São efêmeros, sendo necessário commitar alterações. Dockerfile: arquivo que descreve ao Docker como construir uma imagem. docker-compose.yml: arquivo que especifica os serviços (containers), a ligação entre eles, variáveis de ambiente, portas, etc.
  • 23. Docker - ambiente com PHP + Apache + MySQL Dockerfile FROM php:7-apache MAINTAINER Thiago Rodrigues <thiago@phpsp.org.br> RUN apt-get update && apt-cache search xdebug && apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libmcrypt-dev libpng12-dev && docker-php-ext-install -j$(nproc) iconv mcrypt pdo_mysql RUN pecl install xdebug && docker-php-ext-enable xdebug RUN a2enmod rewrite Código completo em: https://github.com/xthiago/palestra-vagrant-docker
  • 24. Docker - ambiente com PHP + Apache + MySQL docker-compose.yml - parte 1 mysqlphpsp: image: mysql:5.5 container_name: mysqlphpsp ports: - "2017:3306" volumes: - ./config/mysql/conf.d/my.cnf:/etc/mysql/conf.d/my.cnf environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: name MYSQL_USER: admin MYSQL_PASSWORD: admin Código completo em: https://github.com/xthiago/palestra-vagrant-docker
  • 25. Docker - ambiente com PHP + Apache + MySQL docker-compose.yml - parte 2 phpsp: build: . container_name: phpsp command: "/data/php-apache.sh" volumes: - .:/var/www/phpsp - ./config/apache/phpsp.conf:/etc/apache2/sites-enabled/phpsp.conf - ./config/php/php.ini:/usr/local/etc/php/php.ini - ./config/php:/data ports: - "2016:80" links: - mysqlphpsp environment: APACHE_LOG_DIR: /var/log/apache2 working_dir: /var/www/phpsp Código completo em: https://github.com/xthiago/palestra-vagrant-docker
  • 26. Docker Compose - Principais comandos Subir containers: docker-compose up -d Listar containers: docker-compose ls Reiniciar os containers: docker-compose restart Desligar containers: docker-compose stop Destruir constainers (desligados): docker-compose rm Conectar-se ao container: docker exec -it NOME_CONTAINER
  • 27. Docker Compose - Prática clique na imagem p/abrir o vídeo no YouTube
  • 28. Algumas recomendações ● Incluir arquivos do Vagrant/Docker no repositório de código da aplicação. ○ permite que outros entendam e contribuam ○ facilita a distribuição de alterações ○ garante rastreabilidade das alterações - Algo saiu errado? Reverta ;) ● Mapear diretório de scripts do repositório no $PATH da VM/container. ● Vagrant: usar NFS para aumentar a performance ● Subir a imagem para o Docker Hub - poupa o tempo de construção. ○ Plus: integrar com Github para fazer builds automáticos ● Colocar arquivo Vagrantfile no gitignore. Incluir no repo versão com sufixo .dist. ○ isso permite que devs façam pequenas customizações sem afetar ambiente de outros. Ex: quantidade de memória RAM.
  • 29. Conclusão Ambas ferramentas são sólidas e oferecem recursos que mitigam os problemas citados previamente. use Vagrant se ● deseja algo mais simples ● não possui muito tempo para estudar use Docker se ● possui uma arquitetura complexa ● almeja maior paridade com produção ● almeja uma ferramenta que possa ser usada em produção ● procura diversão ;)
  • 30. Contato xthiago@gmail.com xthiago.com + PHP dia 20/agosto em Campinas: phpspima.com.br