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:
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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
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
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
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
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
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.
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
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
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
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
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”.
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
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!