Tutorial como instalar Docker no Raspberry Pi

Objetivos

  • Entender o que é o software Docker e sua proposta
  • Prover os passos necessários para instalar o Docker no Raspberry Pi

Setup

Para que seja possível seguir este tutorial, é necessário que tenha os itens disponíveis:

  • Raspberry Pi
  • Fonte de alimentação dimensionada com corrente mínima para seu Raspberry Pi
  • Unidade de armazenamento: cartão SD, pen drive, disco rígido USB ou SSD USB.
  • Conexão com internet (wi-fi ou cabeada)

O que é o software Docker?

O Docker é também uma plataforma que facilita a criação, implantação e execução de aplicativos em containers. Um container é um encapsulamento leve e independente que pode conter todo o código e as bibliotecas necessárias para executar um aplicativo, incluindo o próprio aplicativo. Desta forma, o Docker permite empacotar um aplicativo juntamente com suas dependências em um container, garantindo que ele funcione consistentemente em outros ambientes, seja em um ambiente de desenvolvimento, teste ou produção. É interessante destacar que um container pode não funcionar em todos os ambientes, é necessário verificar a compatibilidade do software encapsulado com arquitetura x86 e arm, porém há formas de emular a compatibilidade.

Aqui estão algumas características e conceitos-chave relacionados ao Docker:

  1. Containers: Os containers são unidades isoladas que incluem o aplicativo, suas bibliotecas e dependências, tornando-os portáteis e independentes do ambiente em que são executados. Eles são mais leves que máquinas virtuais e compartilham o kernel do sistema operacional com o host, o que os torna mais eficientes.
  2. Imagens: As imagens do Docker são modelos somente leitura que contêm instruções para criar um container. Você pode pensar nelas como um plano de construção para um container. Imagens podem ser compartilhadas e versionadas, o que facilita a colaboração e a implantação consistente de aplicativos.
  3. Dockerfile: Um Dockerfile é um arquivo de configuração que define como uma imagem do Docker deve ser construída. Ele especifica quais bibliotecas e dependências devem ser instaladas no container e como o aplicativo deve ser configurado.
  4. Orquestração: O Docker pode ser usado em conjunto com ferramentas de orquestração, como o Kubernetes, para gerenciar a implantação e o dimensionamento de aplicativos em containers em ambientes de produção. Essas ferramentas permitem que você automatize tarefas como balanceamento de carga, escalabilidade automática e recuperação de falhas.
  5. Docker Hub: É um repositório público de imagens do Docker, onde você pode encontrar imagens prontas para uso em uma ampla variedade de aplicativos e serviços.
  6. Isolamento: Os contêineres Docker fornecem um alto grau de isolamento entre aplicativos, o que significa que eles não interferem uns nos outros e não afetam o sistema host.
  7. Portabilidade: Como os containers encapsulam todas as dependências necessárias, eles são altamente portáteis. Você pode criar um container em um ambiente de desenvolvimento e executá-lo em qualquer lugar que tenha o Docker instalado.

Em resumo, o Docker simplifica o processo de desenvolvimento, implantação e gerenciamento de aplicativos, tornando-os mais eficientes, escaláveis e consistentes em diferentes ambientes. É amplamente utilizado na indústria de desenvolvimento de software para criar e distribuir aplicativos de forma confiável e rápida.

Passo a passo de como instalar o Docker no Raspberry Pi

Passo 1 – Conexão no raspberry

Caso esteja utilizando seu Raspberry de forma “headless”, basta conectar ao mesmo por SSH. É necessário saber o endereço IP do seu Raspberry, neste exemplo vamos adotar o usuário de login como “viniciuspaes” e o IP sendo 192.168.1.100:

ssh viniciuspaes@192.168.1.100

Passo 2 – Atualização de software do Raspberry

Utilize o comando abaixo para realizar update da lista de pacotes que podem ser atualizados e em seguida realizar o upgrade destes:

sudo apt update && sudo apt upgrade

Instalar Docker no Raspberry Pi - atualizando primeiro o sistema operacional
Instalar Docker no Raspberry Pi - sistema operacional atualizado

Passo 3 – Remover softwares que podem gerar conflitos

Caso tenha instalado o docker anteriormente pelo gerenciador de pacotes apt, é possível que cause conflitos de instalação. O recomendado é instalar diretamente pelo repositório oficial do Docker, para ter acesso as versões mais atuais. Com o comando abaixo, vamos procurar por diversos pacotes relacionados ao docker e solicitar a remoção, caso estejam instalados pelo apt:

for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt-get remove $pkg; done

Instalar Docker no Raspberry Pi - remover pacotes para evitar conflitos
Instalar Docker no Raspberry Pi - remover pacotes para evitar conflitos - finalizado

Passo 4 – Download do script oficial de instalação do Docker e execução

Neste passo, vamos utilizar o Curl para realizar o download do script de instalação do Docker:

curl -fsSL https://get.docker.com -o get-docker.sh

Agora precisamos executar o script com o comando:

sudo sh get-docker.sh

Instalar Docker no Raspberry Pi - download script de instalação docker
Instalar Docker no Raspberry Pi - execução script de instalação docker
Instalar Docker no Raspberry Pi - execução script de instalação docker - finalizado

Passo 5 – Adicionar usuário não privilegiado para ter permissão de execução do Docker.

Neste exemplo, vou utilizar o usuário viniciuspaes, adicionando o mesmo no grupo do Docker, desta forma este usuário poderá executar o docker e gerenciar os containers.

sudo usermod -aG docker viniciuspaes

Instalar Docker no Raspberry Pi - adicionar usuário ao grupo do docker

Passo 6 – Reiniciar Conexão ao Raspberry

Uma etapa necessária é realizar o logout e posterior login no seu raspberry, para que as modificações de permissão do grupo do seu usuário tenham efeito. Caso tenha formatado o seu raspberry do zero para seguir este tutorial, provavelmente o sistema operacional também deve pedir para que realize a reinicialização. Então é recomendado que utilize o comando para reiniciar o raspberry pi:

sudo reboot now

Passo 7 – Nova conexão e verificar versão do Docker instalado

Realize novamente a conexão SSH ao seu raspberry após a reinicialização, caso esteja com um setup “headless”. Agora podemos ver a versão do Docker instalado com o comando:

docker version

Instalar Docker no Raspberry Pi - verificar versão do docker instalada

Instalar Docker no Raspberry Pi - verificar versão do docker instalada - resultado

Passo 8 – Testar instalação do docker com execução da imagem de hello-world

Para finalizar a instalação do Docker é interessante testar a mesma executando a imagem de hello-world. Vamos então utilizar o comando:

docker run hello-world

Tudo certo! Caso tenha sucesso na execução da imagem de hello-world o docker foi instalado e configurado corretamente. Caso tenha algum erro, interessante verificar se seu usuário tem privilégio de execução do Docker, igual configuramos no passo 5. Se ainda tiver dúvidas, você pode testar a execução do Docker com o comando “sudo”, para ter certeza que não é um problema de privilégio de execução.

Instalar Docker no Raspberry Pi - executar imagem de teste hello-world do docker

Instalar Docker no Raspberry Pi - executar imagem de teste hello-world do docker - resultado

Lista de comandos úteis para utilização do Docker

Fazer o download de uma imagem de um container

Você pode buscar por imagens prontas diretamente no site do docker hub. No exemplo do comando abaixo, vamos realizar somente o download da imagem oficial do nginx:

docker pull nginx

docker pull nginx

Criar um container a partir de uma imagem

O comando docker run permite iniciar um container a partir de uma imagem. No exemplo do comando abaixo, vamos criar um container que contém a instalação do servidor de páginas nginx:

docker run nginx

Ao executar o comando, caso o docker não encontre a imagem localmente, ele irá buscar a mesma diretamente no docker hub e irá criar o container. Mas caso já tenha feito o download da imagem com o comando docker pull, o container é criado mais rapidamente, pois não precisa realizar o download da mesma.

O problema do comando acima, é que o terminal fica bloqueado na execução. Como opção, podemos passar por referência o prefixo -d, para que o container fique em funcionamento em segundo plano.

docker run -d nginx

O problema do comando acima é que não mapeamos a porta de execução do container. Como o nginx pode funcionar como um servidor de páginas, para que seja possível testar o funcionamento, é interessante que a porta http seja mapeada para o host. Podemos então mapear a porta do host para o container com o prefixo -p [portaHost]:[portaContainer]. Neste exemplo, vamos mapear a porta 8080 do host para ser redirecionada para a porta 80 do Container:

docker run -d -p 8080:80 nginx

docker run nginx

docker run -d nginx

docker run -p 8080:80 -d nginx

Nginx Docker Container Running

Verificar os containers em funcionamento

Para verificar quais container estão ativos, podemos utilizar o comando:

docker ps

Neste exemplo, verificamos 2 containers sendo executados. Ambos os containers utilizam a imagem oficial do nginx:

CONTAINER ID IMAGE COMMAND                CREATED       STATUS       PORTS                                 NAMES
58a23436fc0e nginx "/docker-entrypoint.…" 4 minutes ago Up 4 minutes 0.0.0.0:8080->80/tcp, :::8080->80/tcp festive_cori
c46cd9b051a9 nginx "/docker-entrypoint.…" 7 minutes ago Up 7 minutes 80/tcp                                pensive_carson

docker ps

Parar e remover um container

Vamos remover o container da imagem do nginx que esquecemos de mapear a porta externa do host. Olhando a saída do Docker ps, temos o ID do container que queremos remover. Neste caso o ID é:

c46cd9b051a9

Não é possível remover um container que está em funcionamento, então primeiro precisamos parar o container com o comando:

docker stop c46cd9b051a9

Em seguida podemos proseguir com a remoção do container:

docker rm c46cd9b051a9

docker stop

docker rm

Entrar dentro de um container e executar comandos

Caso precise entrar dentro do container que possui ID “58a23436fc0e” para executar algum comando:

docker exec -it 58a23436fc0e /bin/bash

No comando acima, executamos o bash dentro do container. Se o comando acima não funcionar, é possível que a imagem que esteja utilizando não ter o bash. Para sair do container, lembre-se de digitar “exit”.

docker exec -it ID /bin/bash

Listar as imagens de containers que já fez download

Caso queira verificar quais imagens de containers já fez download e estão disponíveis em seu computador, utilize o comando:

docker images
REPOSITORY  TAG    IMAGE ID     CREATED      SIZE
nginx       latest 91582cfffc2d 38 hours ago 192MB
hello-world latest b038788ddb22 4 months ago 9.14kB

docker images

Considerações Finais

A instalação do Docker no Raspberry Pi é bem simples e pode ser realizada com poucos passos. É um excelente setup para começar a aprender a utilizar o docker e gerenciar aplicativos ou projetos pessoais na sua rede local. Os principais comandos de utilização do Docker também foram listados

Caso tenha dúvidas sobre a instalação ou execução do Docker, basta escrever aí nos comentários!