Docker Machine


Conheça a ferramenta Docker Machine, veja situações em que ela é útil e aprenda a instalá-la no Ubuntu!


Objetivos do post:

  • Apresentar a ferramenta Docker Machine
  • Discutir as situações em que ela pode ser útil
  • Mostrar como instalá-la no Ubuntu e como gerenciar as máquinas com ela.

O que é Docker Machine?

Como sempre, quando vamos analisar a utilização de uma nova ferramenta, devemos nos questionar o que ela é, e qual o problema que ela se propõe a resolver.

A Docker Machine é uma ferramenta de linha de comando, que visa simplificar a instalação do Docker em hosts (vamos chamar somente de máquinas) de sua escolha, que podem ser desde máquinas virtuais na sua Virtual Box, a até mesmo servidores em provedores de nuvem, como AWS, Google Compute Engine (GCE) e Azure.

Entretanto, não só para instalar o Docker serve a Docker Machine. Ela também pode provisionar novas máquinas, pará-las, reiniciá-las, atualizar a versão do Docker existente nelas, e permitir que sejam executados comandos Docker remotamente nelas. Ou seja, do conforto do seu lar, é possível iniciar uma nova máquina na AWS, instalar o Docker nela, e executar containers apenas com dois comandos no terminal.

Outra possibilidade de utilização da Docker Machine é definir clusters Swarm. Se você utiliza esse tipo de cluster, a Docker Machine ajuda bastante na gerência deles.

Ou seja, a Docker Machine é interessante quando você quer gerenciar um conjunto de máquinas com Docker, para a execução de containers, estejam essas máquinas em cluster (Swarm) ou não.

Instalando a Docker Machine no Ubuntu

Agora que vimos o que a Docker Machine é, e o que ela faz, vamos conhecer seu modo de instalação. É importante ressaltar que para rodar a Docker Machine, você deve ter o Docker instalado na sua máquina. Podemos instalá-la numa tacada só, executando os seguintes comandos:

 base=https://github.com/docker/machine/releases/download/v0.16.0 &&
  curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine &&
  sudo mv /tmp/docker-machine /usr/local/bin/docker-machine &&
  chmod +x /usr/local/bin/docker-machine

Para a instalação, é necessário ter o curl instalado na sua máquina.

Após a instalação, podemos verificar a versão da Docker Machine assim:

docker-machine version

Que deve apresentar uma saída semelhante a:

docker-machine version 0.16.0, build 702c267f

Gerenciando máquinas com a Docker Machine

Antes de efetivamente vermos como gerenciar máquinas com a Docker Machine, é importante dizer que para conhecer os comandos que ela possui, basta executar:

docker-machine

Os comandos possíveis serão apresentados, bem como a sua descrição. Se você precisar de ajuda específica em um deles, basta substituir NOME_COMANDO pelo comando desejado na linha a seguir:

docker-machine NOME_COMANDO --help

Listando as máquinas criadas

Agora que conhecemos os comandos possíveis, podemos listar as máquinas criadas:

docker-machine ls

Inicialmente não haverá nenhuma máquina. Vamos ver então como criar máquinas.

Criando máquinas

Podemos criar uma nova máquina no Virtual Box assim:


docker-machine create \
    -d virtualbox \
    --virtualbox-boot2docker-url https://releases.rancher.com/os/latest/rancheros.iso \
    --virtualbox-memory 2048 \
    rancher-os-1

Vamos analisar cada um dos parâmetros do comando docker-machine. O primeiro parâmetro é o comando que querermos executar, ou seja, o create, para a ser realizada a criação de uma nova máquina.

Na sequencia, temos o parâmetro -d para indicar qual o driver que vamos utilizar. Cada driver é responsável por permitir a criação e gerência de máquinas em um determinado ambiente, como Virtual Box, AWS, etc. Veja a lista de drivers existentes para a Docker Machine.

Os parâmetros --virtualbox-boot2docker-url e --virtualbox-memory são para o driver do Virtual Box, e servem respectivamente para indicar a URL de uma imagem ISO, e para definir o tamanho da memória disponível para a máquina. Nesse exemplo, vamos usar a imagem do Rancher OS, que é uma distribuição leve do Linux, com 2GB de memória RAM.

Após a execução do comando, teremos uma saída semelhante a essa:

Running pre-create checks...
Creating machine...
(rancher-os-1) Downloading /home/bruno/.docker/machine/cache/boot2docker.iso from https://releases.rancher.com/os/latest/rancheros.iso...
(rancher-os-1) 0%....10%....20%....30%....40%....50%....60%....70%....80%....90%....100%
(rancher-os-1) Creating VirtualBox VM...
(rancher-os-1) Creating SSH key...
(rancher-os-1) Starting the VM...
(rancher-os-1) Check network to re-create if needed...
(rancher-os-1) Waiting for an IP...
Waiting for machine to be running, this may take a few minutes...
Detecting operating system of created instance...
Waiting for SSH to be available...
Detecting the provisioner...
Provisioning with rancheros...
Copying certs to the local machine directory...
Copying certs to the remote machine...
Setting Docker configuration on the remote daemon...
Checking connection to Docker...
Docker is up and running!
To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: docker-machine env rancher-os-1

Como podemos perceber, a Docker Machine:

  • Baixa a imagem que passamos como parâmetro;
  • Cria uma máquina no Virtual Box usando essa imagem;
  • Define uma chave SSH para permitir o acesso remoto à máquina;
  • Cria a rede;
  • Obtém o IP da máquina;
  • Configura o Docker;
  • Verifica que ele está rodando;
  • E de brinde apresenta o comando que mostra como conectar diretamente no Docker da nova máquina para rodar containers.

Tudo isso é feito de modo transparente, simplificando bastante o processo.

Acessando a máquina por SSH

Você pode acessar a máquina remotamente por SSH facilmente:

docker-machine ssh rancher-os-1

Para voltar para seu terminal basta digitar exit e apertar o ENTER.

Verificando o status da máquina

É possível verificar o status da máquina com o seguinte comando:

docker-machine status rancher-os-1

Ou listar novamente as máquinas rodando para ver seu status:

docker-machine ls

Cuja saída será semelhante a essa:

NAME           ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER     ERRORS
rancher-os-1   -        virtualbox   Running   tcp://192.168.99.101:2376           v19.03.5

Note que podemos verificar o IP da máquina (192.168.99.101), e a versão do Docker em execução (v19.03.5).

Executando um container na máquina

Vamos agora executar um container na máquina sem precisar acessá-la por SSH. Para isso, primeiro vamos verificar as configurações para acesso ao Docker presente nela:

docker-machine env rancher-os-1

Note que a saída desse comando nos indica como configurar nosso shell para execução de containers na máquina, usando o comando eval:

export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.101:2376"
export DOCKER_CERT_PATH="/home/bruno/.docker/machine/machines/rancher-os-1"
export DOCKER_MACHINE_NAME="rancher-os-1"
# Run this command to configure your shell: 
# eval $(docker-machine env rancher-os-1)

Esse comando vai exportar todas as variáveis de ambiente definidas pela saída do comando docker env, ou seja:

  • DOCKER_TLS_VERIFY
  • DOCKER_HOST
  • DOCKER_CERT_PATH
  • DOCKER_MACHINE_NAME

Vamos executá-lo:

eval $(docker-machine env rancher-os-1)

E novamente o docker-machine ls, cuja saída será a seguinte:

NAME           ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER     ERRORS
rancher-os-1   *        virtualbox   Running   tcp://192.168.99.101:2376           v19.03.5

Perceba que agora a máquina está marcada como ativa. Ou seja, podemos executar containers Docker direto nela. Esse comando deixa a máquina ativa somente no terminal atual. Se você abrir outro terminal, e rodar docker-machine ls novamente verá que nenhuma máquina estará ativa.

Para exemplificar a execução de um container na máquina criada, vamos usar a imagem do NGINX, e mapear a porta 80 do container criado, para a porta 80 da máquina que criamos com a Docker Machine:

docker run -d --name=nginx -p80:80 nginx:1.17.7-alpine-perl

Se agora acessarmos no navegador o endereço http://192.168.99.101 (lembre-se de usar o IP que aparece no docker-machine ls, que pode ser diferente desse), veremos uma imagem semelhante a essa:

Página inicial do NGINX
Figura 1 - Página inicial do NGINX

É importante ressaltar que o container está sendo executado na máquina virtual do Virtual Box, com o Docker instalado lá, e não no Docker instalado na sua própria máquina. Se você tentar acessar http://localhost, verá que não está sendo executado o NGINX na porta 80 dela. O mesmo é verdade caso tenha criado a máquina na Azure por exemplo.

Parando a máquina

Caso você queira parar sua máquina (fique tranquilo, ela não será removida), basta rodar:

docker-machine stop rancher-os-1

O status da máquina mudará agora para Stopped.

Reiniciando a máquina

Para reiniciar uma máquina, basta rodar:

docker-machine start rancher-os-1

Removendo a máquina

Quando você quiser de fato remover a máquina, execute:

docker-machine rm rancher-os-4

Será apresentada uma mensagem com o aviso de a referência local (na sua Docker Machine) e instância serão removidas, e você terá que confirmar para remover a máquina:

About to remove rancher-os-1
WARNING: This action will delete both local reference and remote instance.
Are you sure? (y/n): y
Successfully removed rancher-os-1

Considerações finais

Espero que você tenha gostado da Docker Machine e entendido quando ela pode ser útil. Talvez faça cada vez menos sentido usá-la hoje em dia, devido ao crescimento do Kubernetes em oposição ao Docker Swarm, e também a ferramentas que facilitam o gerenciamento de clusters Kubernetes, como o Rancher, mas ainda pode ser interessante se você quiser rodar containers, mas não precisar de um cluster com todo o poder do Kubernetes.

Outra utilização, é para subir máquinas virtuais no Virtual Box, como fizemos aqui. É isso aí, compartihe esse post, e nos siga com o RSS (topo direito da página) para receber notificações dos próximos posts.

Abraços!

results matching ""

    No results matching ""