Vagrant e Docker

Vagrant

editar
 
Logo Vagrant

Vagrant é uma ferramenta de GCS que permite configurar e virtualizar um ambiente de desenvolvimento. Ele utiliza utiliza uma máquina virtual como a VirtualBox ou VMware.

Uma máquina virtual envolve componentes como:

  • Host: pode ser entendido como hardware do sistema que roda uma virtual machine.
  • Guest: é um processo virtual copiado do host, geralmente é um sistema operacional.
  • Virtual Machine Manager (VMM): provê ambientes virtuais para rodar sistemas hospedeiros, é também conhecido como hypervisor.

No Vagrant é possível criar uma configuração de uma máquina virtual própria com facilidade.

Em casos que existe uma configuração de software em um sistema operacional e que outras pessoas precisam ter a mesma configuração, o Vagrant pode ser uma boa saída para a resolução de problemas com o ambiente de desenvolvimento.

O Vagrant utiliza conceitos como:

  • Box: é o nome utilizado para definir cada máquina virtual.
  • Vagrantfile: arquivo gerado para configurar o Vagrant.

Instalação

editar

Utilização

editar

Inicie em novo diretório um novo projeto Vagrant:

$ vagrant init

Selecione um sistema operacional para o seu projeto:

Esse comando irá criar um arquivo Vagrantfile com um conteúdo similar a esse:

VAGRANTFILE_API_VERSION = '2'

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = 'debian/jessie64'
  config.vm.network :forwarded_port, guest: 3000, host: 3000
end
  • VAGRANTFILE_API_VERSION define a versão do Vagrant utilizada.
  • config.vm.box é utilizado para configurar a box que será utilizada.
  • config.vm.network especifica o número da porta. Essa configuração permite acessar o servidor por exemplo do rails da sua máquina virtual no seu navegador local.

Então crie uma máquina virtual e instale suas configurações:

$ vagrant up

Entre na sua máquina virtual:

$ vagrant ssh

Outros Comandos

editar

Se o conteúdo do arquivo Vagrant for alterado com por exemplo a adição de mais algum comando de instalação utilize o seguinte comando para atualizar a sua máquina virtual

$ vagrant provision

Destruir a máquina virtual

$ vagrant destroy

Reinicia as configurações da máquina virtual do Vagrant

$ vagrant reload

Selecione o software de virtualização:

$ vagrant up --provider virtualbox

Vantagens

editar
  • Compartilha mesmo hardware para ambientes de execução diferentes.
  • Compartilha diretório entre host e guest.
  • Sistema host é protegido das máquinas virtuais, assim como máquinas virtuais são protegidas umas das outras.
  • Possibilidade de suspender uma maquina virtual e entrar em outra.

Desvantagens

editar
  • Ambientes virtualizados apresentam menor performance.
  • Instalações podem demorar.

Problemas resolvidos para o Vagrant

editar

Ubuntu 16.04 e VirtualBox

editar

Na instalação do VirtualBox em algumas distribuições do linux é possível encontrar o seguinte erro:

VirtualBox is complaining that the kernel module is not loaded. Please run 'VBoxManage --version' or open the VirtualBox GUI to see the error message which should contain instructions on how to fix this error.

Ele acontece porque alguns modulos do VirtualBox não estão instalados. Acontece isso pois o Secure Boot do computador está em Enable. Com o seguinte comando é possível contornar o problema:

$ sudo apt-get --reinstall install virtualbox-dkms
  • Com isso o VirtualBox será reinstalado e será necessário o usuário criar uma senha durante o procedimento.
  • Após a finalização do processo, o usuário deverá reiniciar o computador.
  • Um menu será apresentado e necessário alterar a configuração do Secure Boot para disable, a senha configurada na instalação será solicitada.
  • Com isso será possível utilizar o VirtualBox.

Inicialização de vários ambientes com Vagrant

editar

Ao iniciar máquinas com o Vagrant uma após a outra é possível haver conflitos de uso de portas configuradas no Vagrantfile. Com isso, será necessário encontrar o PID do virtualbox que está em execução e encerra-lo.

Docker

editar
 
Logo Docker

Docker é um projeto de código aberto que automatiza a implantação de aplicativos dentro de recipientes de software, fornecendo uma camada adicional de abstração e automação de virtualização de sistemas.

“Docker é uma ferramenta que permite empacotar uma aplicação com todas as suas dependências em uma unidade padronizada para desenvolvimento de software.” [1]

Instalação

editar

Utilização

editar

Faz uma listagem das imagens em seu computador

$ docker images

Baixa uma imagem em sua máquina

$ docker pull nome_imagem

Envia a imagem para repositório remoto do Docker Hub

$ docker push nome_imagem

Cria um container utilizando uma imagem existente ou se ela não estiver adicionada a sua listagem de imagens, ele procurará no docker hub.

$ docker run -it nome_imagem

Lista os containers em execução

$ docker ps

Lista os containers em execução e os desligados

$ docker ps -a

Para o container ou inicia o containers

$ docker stop/start nome_container

Exclui container ou imagem

$ docker rm/rmi nome_container/nome_imagem

Vantagens

editar
  • Containers fácilmente portáveis: você pode criar uma imagem de toda a configuração e aplicativos instalados em seu container, transferir e instalar em outro host com Docker previamente instalado.
  • Versionamento: Docker permite que você versione as alterações de um container de uma forma muito semelhante ao git. Permitindo portanto verificar as diferenças entre versões, commitar novas versões e voltar (rollback) versões.
  • Reutilização de componentes: como citado anteriormente as imagens criadas podem ser reutilizadas, vamos supor que diversas de suas aplicações utilizem um stack com Apache e MySQL, desta maneira você instala e configura ambos e cria uma imagem base, contendo estes itens, que representará a sua instalação e configuração, desta maneira esta imagem poderá ser reutilizada em quantos forem os containers que a necessite
  • Compartilhamento: o Docker Hub, citado no incício, já está povoado de milhares de containers com as mais diversas aplicações instaladas e configurações aplicadas, desta maneira você pode rápidamente criar sua aplicação com uma base desenvolvida por outra pessoa, ou ainda criar sua base e compartilhá-la.

Desvantagens

editar
  • Pelo fato de compartilhar o kernel, seus containers não terão completo isolamento.
  • Não tem garantia de recursos a nível de hardware.
  • Enquanto a instalação é fácil no Linux, outros sistemas precisam de Máquina Virtual.

Quando utilizar

editar

Vagrant

editar
  • Para executar em seu computador a aplicação com o mesmo ambiente do servidor em que a mesma encontra-se em produção
  • Sempre que sua aplicação necessite de várias etapas de desenvolvimento (desenvolvimento, testes, qualidade, produção)
  • Quando você ou sua equipe trabalham com poucas aplicações/projetos simultâneos

Docker

editar
  • Como sistema de controle de versão do SO de sua aplicação
  • Quando você deseja distribuir (ou colaborar) o SO de sua aplicação com uma equipe
  • Para executar em seu computador a aplicação com o mesmo ambiente do servidor em que a mesma encontra-se em produção
  • Sempre que sua aplicação necessite de várias etapas de desenvolvimento (desenvolvimento, testes, qualidade, produção)

Ainda que pareçam competir entre si alguns administradores conseguiram unir as duas tecnologias a modo de complementarem-se.

Em determinado cenário temos a seguinte situação: Vagrant é utilizado para criar a máquina virtual base, então quando necessitar criar configurações distintas, mas que continuem utilizando esta base, utilize o Docker para pré-configurar e criar versões leves desta base.

Principais diferenças

editar
Recurso Docker Vagrant
Tipo de virtualização VE VM
Garantia de recursos a nível de hardware Não Sim
Tempo de inicialização Segundos Alguns minutos
Nível de isolamento Parcial Total
Tamanho dos sitemas virtuais Muito leve Pesado

LEMBRE-SE: