Vagrant e Docker
Vagrant e Docker
Vagrant
editarVagrant é 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
editarUtilização
editarInicie 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
editarSe 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
editarUbuntu 16.04 e VirtualBox
editarNa 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
editarAo 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
editarDocker é 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
editarUtilização
editarFaz 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
editarVagrant
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)
Ambos
editarAinda 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
editarRecurso | 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: