Download - Vagrant sti
Encontro Técnico STI - UFF
#quemnunca?
• Entrou numa empresa e levou dias para ter a sua máquina configurada
• Testou na máquina e quando colocou em homologação/produção encontrou alguns bugs por causa de dependência que você desconhecia que eram necessárias?
• Sofreu para tentar instalar o Oracle no OSX e não obteve sucesso
• …
Solução?
O que é o Vagrant?
• Software open-source para criação e configuração de máquinas virtuais
• Compatível com VirtualBox 4.0.x, 4.1.x, 4.2.x e 4.3.x.
• Também funciona com VMWare e Hyper-V.
• Escrito em Ruby :)
O que eu ganho?
Se você é um desenvolvedor…
• Isolamento de dependências sem sacrificar ferramentas que você já usa para trabalhar.
• Uma vez que o arquivo Vagrantfile existe no projeto, basta rodar ‘vagrant up’ para ter todo o ambiente instalado e configurado (banco de dados, ruby, memcached…).
• Todos os membros da equipe estarão rodando o projeto na mesma máquina! Não importa se usam OSX, Linux ou Windows para programar.
Se você é DevOps…
• Ambiente para testar rapidamente seus shell scripts, Chef cookbooks, Puppet modules, etc.
• Possibilidade de testar scripts em clouds remotas como AWS e RackSpace.
Se você é designer…
• Agora você pode focar no que interessa pra você!
• Se preocupe apenas com design. Crie seus layouts no photoshop, CSS, etc sem se preocupar como fazer o projeto rodar. Tudo que você precisa aprender é ‘vagrant up’, ‘vagrant halt’ e ’vagrant destroy’.
O que preciso para começar?
• Instale o VirtualBox
• Instale o Vagrant (compatível com OSX, Windows, Debian e CentOS).
• Crie o seu Vagrantfile
Vagrantfile
Esse comando cria um Vagrantfile inicial
Principais comandos
• vagrant init
• vagrant up
• vagrant halt
• vagrant destroy
• vagrant package
Vagranfile - UFF
Um projeto padrão Rails…
Puppet Manifests default.pp
Vantagem
• Ambiente provisionado rapidamente
• Ampla utilização de Puppet no mercado
• Muitos scripts disponíveis e documentação na internet
• Automação!
Desvantagem
• Usar o Puppet não é tão simples quanto parece
• Quando não se tem um DevOps, a manutenção se torna mais complicada
Rodando o Discourse• git clone https://github.com/discourse/discourse.git
• cd discourse
• vagrant up
• vagrant ssh
• bundle install
• rake db:create
• rake db:migrate
• rails server
Nunca foi tão fácil rodar um projeto!
O que é?
• Projeto open-source para criar containers leves e auto-suficientes que podem conter qualquer tipo de aplicação/serviço
• Possui integração com Jenkins, Travis, Chef, Puppet, Vagrant e OpenStack
• Se é possível rodar em um Kernel Linux, pode rodar no Docker !
• Escrito em Go :)
Como começar…
http://docs.docker.io/installation/#installation
Rodando o Ubuntu
• docker pull ubuntu
• docker run -i -t ubuntu /bin/bash
Baixa o container
Abre o terminal dentro do container
Hands On!
Sim, é MUITO rápido!
E como eu crio uma imagem?
Lembra do Vagrantfile?
Dockerfile!
Dockerfile MySQL
[https://github.com/tutumcloud/tutum-docker-mysql]
Talk is cheap!
Observações
• Tempo de boot do container? < 1seg
• As migrações rodam dentro do container! Você não precisa ter o MySQL instalado na sua máquina
• Possibilidade de criar vários containers, cada um com um serviço
• Ganhamos isolamento e velocidade!
Observações
• Grande facilidade na criação dos containers
• Não precisamos usar Puppet ou Chef para provisionamento da máquina
• Depois que o container for criado, é possível acessá-lo via ssh
• Podemos salvar o estado de uma imagem com facilidade
Sim! Commits!
Commits
Se tentarmos rodar a imagem novamente, não vemos o arquivo criado…
Isso ocorre porque cada container é completamente
isolado do outro!
Commits
Esse é o container que contém o arquivo que criamos
Aqui está a nova imagem salva
Commits
Agora quando rodamos a imagem, temos o nosso arquivo lá dentro!
Docker x Vagrant
[http://www.scriptrock.com/articles/docker-vs-vagrant/]
Docker & Vagrant
• Uma solução possível é rodar os containers dentro do Vagrant
• http://docs.vagrantup.com/v2/provisioning/docker.html
Quem está usando?
Próximos passos
• Definir o uso de Vagrant e Docker como padrão na STI
• Integração entre o Jenkins e Vagrant/Docker.
• Passar o conhecimento adiante!
Jenkins
+ + =
Links recomendados
• https://www.scriptrock.com/articles/docker-vs-vagrant/
• http://docs.docker.io/use/basics/
• http://docs.vagrantup.com/v2/getting-started/index.html
• http://blog.relateiq.com/a-docker-dev-environment-in-24-hours-part-1-of-2/
Dúvidas?