Execução de containers Docker com Raspberry Pi 7

Que a placa Raspberry Pi é poderosa, todos já sabemos, atuando às vezes como servidor de mídia, servidor de arquivos, e até servidor de automação utilizando dispositivos Apple. Mas essa plaquinha pode ir além disso, chegando inclusive a executar máquinas virtuais em seu sistema. Isso se deve ao Docker, uma plataforma de construção, execução e distribuição de sistemas através de containers, e neste post vamos mostrar como você pode realizar a excução de containers Docker com Raspberry Pi.

Que negócio é esse de Docker?

O Docker é muito utilizado no mundo de desenvolvimento de software, pois ele permite virtualizar a mesma infraestrutura da sua máquina em qualquer ambiente que também aceite os containers Docker. Basicamente, é possível criar uma rede de máquinas virtuais isoladas logicamente do host, permitindo a representação fiel tanto em modo de desenvolvimento, quanto em modo de distribuição. Para os desenvolvedores, é o fim da desculpa “mas na minha máquina tá rodando…”.

Docker com Raspberry Pi

O Docker tem se tornado muito popular pois roda em Windows, Linux e macOS, e conta com uma gama enorme de imagens oficiais disponibilizadas para diversas finalidades, através do Docker Hub. Essas imagens são softwares pré carregados em um sistema operacional, que permitem a execução em formato de containers. Nesse artigo, vamos fazer uso de duas imagens: Wordpress e MySQL, ambas rodando para Linux na arquitetura ARM. O que é mostrado aqui, pode ser executado em qualquer outro sistema operacional, desde que tenha imagens compatíveis com sua arquitetura (x86, x64 e ARM)

Ok… Onde entram os Containers?

Containers nada mais são do que as imagens executando. A diferença é que vários containers podem ser executados ao mesmo tempo com base em uma única imagem. Isso permite que seja criado um cluster de vários containers Wordpress, por exemplo, permitindo o balanceamento de carga e distribuição através de vários servidores. São várias instâncias de um mesmo software, podendo inclusive ter dados diferentes. Significa que você pode ter vários sites Wordpress rodando numa única Raspberry Pi, respeitando os limites da performance da placa.

Interessante, mas qual a vantagem pro mundo do IoT?

Resumidamente, podemos executar um Wordpress com banco de dados MySQL com poucas linhas de comandos no terminal. E o melhor de tudo, de maneira isolada do sistema principal. Caso o servidor seja para testes, o Docker permite a exclusão dos containers e imagens sem que isso afete qualquer outro componente do Raspbian. Outra grande vantagem é a utilização de imagens customizadas, ao invés de instalar do zero cada software necessário. Um exemplo prático disso, seria a possibilidade de nós, da MakerHero, criarmos imagens e disponibilizarmos para que vocês executem em seus sistemas sem que precisem fazer todo o passo a passo de instalação de determinado software.

Vamos à instalação do Docker com Raspberry Pi!

Como pré requisito, é necessário ter o Raspbian Stretch instalado no cartão da placa Raspberry Pi 3 (é possível rodar em outras versões, como a Zero, mas o tutorial vai focar apenas na versão 3), rodando já conectado à internet. A instalação do Docker com Raspberry Pi é bem simples, e se dá através do comando abaixo:

curl -sSL https://get.docker.com | sh

Depois da instalação, é necessário que adicionemos o usuário pi ao grupo docker, para que consigamos executar imagens sem sudo.

sudo usermod -aG docker pi

E agora habilitamos o Docker para executar sempre que o sistema for iniciado

sudo systemctl enable docker

Reinicie o sistema para que as alterações tenham efeito

sudo reboot -h now

E verifique se tudo deu certo com o comando abaixo (que serve para listar todos os containers que estão executando no momento), exibindo a tela a seguir em caso de sucesso

docker ps

Utilizando o Docker

Primeiro, devemos baixar as imagens que serão utilizadas. Isso será feito do DockerHub, através do comando docker pull. Abaixo, serão baixadas as imagens do MySQL e do Wordpress

docker pull wordpress
docker pull hypriot/rpi-mysql

Vale notar que a imagem do Wordpress é oficial, e tem suporte à arquitetura ARM. Já o MySQL não possui esse suporte oficial. Dessa maneira, buscamos a imagem criada pelo usuário hypriot. Podemos depois listar as imagens baixadas através do comando docker image ls

Feito isso, vamos à execução dos containers

Executando o MySQL

Primeiro vamos subir o banco de dados para que o Wordpress o enxergue. O Wordpress necessita de um servidor de banco de dados para executar, que geralmente é o MySQL, embora existam algumas alternativas. Através do comando docker run, é possível subir um container a partir de uma imagem:

docker run --name mysql-wordpress -e MYSQL_ROOT_PASSWORD=Aa.12345678 -d hypriot/rpi-mysql

Podemos ver alguns parâmetros no comando, como por exemplo, –name, que dá o nome mysql-wordpress ao container. O Parâmetro -e por sua vez define algumas variáveis de ambiente, separadas por chave=valor. Nesse caso, definimos que MYSQL_ROOT_PASSWORD é igual a Aa.12345678. Já o parâmetro -d indica que o container vai executar em background, sem travar a tela do terminal. Depois disso tudo, temos o nome da imagem a ser utilizada, hypriot/rpi-mysql.

Executando o Wordpress

docker run --name wordpress --link mysql-wordpress:mysql -p 8080:80 -d wordpress

Dessa vez, temos o parâmetro –link, que faz a ligação entre o container Wordpress e o banco MySQL. Além disso, o parâmetro -p, que indica que a porta 80 do container será exposta para o host, como porta 8080.

Hora de testar

Para configurar o Wordpress, basta acessar o endereço IP da sua placa juntamente da porta, em um navegador qualquer dentro da mesma rede. No meu caso, utilizei o endereço http://192.168.1.21:8080. Após selecionar o idioma Português, temos a seguinte página:

Basta configurar os campos corretamente, clicando em Install Wordpress, e assim teremos um site funcional, rodando com poucos comandos, dentro da Raspberry Pi.

Considerações Finais

Algumas ressalvas devem ser feitas àcerca do Wordpress rodando no Docker com Raspberry Pi. Do jeito que está, ele fica disponível apenas na rede local. Para acesso além da rede, é preciso configurar um servidor de DNS com IP fixo, dentre outros fatores.

A segurança também não está das melhores, visto que é apenas um tutorial para demonstrar as capacidades do Docker.

Para mais detalhes sobre o Docker, e quais comandos podem ser utilizados, recomendo sua documentação. Ele é muito mais poderoso do que aparenta ser, chegando à ser a base de diversos sistemas de porte gigantesco, e recomendado por grandes empresas de software e nuvem, como Microsoft, Google e Amazon.

Gostou do post Docker com Raspberry Pi? Deixe seu comentário logo abaixo.

Faça seu comentário

Acesse sua conta e participe

7 Comentários

  1. Achei a materia muito legal.

    Afim de facilitar a vida do pessoal e melhorar ainda mais o conteúdo continuei meus testes instalando o docker-compose conforme tutorial que segue:
    https://dev.to/rohansawant/installing-docker-and-docker-compose-on-the-raspberry-pi-in-5-simple-steps-3mgl

    Criei o arquivo o arquivo docker-compose.yml, pois assim posso orquestar a tudo via docker-compose, acho que fica mais simples.


    version: “3”

    services:
    db:
    image: hypriot/rpi-mysql
    container_name: mysql
    # ports:
    # – “3306:3306”
    environment:
    – MYSQL_ROOT_PASSWORD=mysql
    – MYSQL_DATABASE=wordpress
    volumes:
    – db_data:/var/lib/mysql
    networks:
    – net

    wp:
    image: wordpress
    container_name: wordpress
    ports:
    – “8080:80”
    depends_on:
    – db
    networks:
    – net

    volumes:
    db_data:

    networks:
    net:

  2. q massa Alliston, tava pesquisando por simular ambiente docker no rasp e achei seu artigo.

    TOP

  3. Docker/containers não são máquinas virtuais, como indica o início do texto.

  4. Gostaria de saber se tem como usar um Raspberry PI com LibreElece um Servidor Emby via Docker.
    Tentei seguir esse tutorial mas não deu certo. https://www.youtube.com/watch?v=ZvIo5wm5Tvs&t=398s
    Me parece que o uso do Docker para Raspberry pi é diferente.
    Tem como ter um tutorial sobre isso?

    1. Olá Ricardo.

      As imagens que executam no Raspberry precisam estar na arquitetura ARM. Geralmente, as imagens que utilizamos nos computadores e servidores utilizam a arquitetura x86 ou x64, pois os sistemas operacionais instalados são construídos nessas arquiteturas.
      Nesse caso, depende da existência de uma imagem na arquitetura ARM, senão realmente não tem como executar uma imagem de outra arquitetura no Raspberry.

      E sobre o tutorial, podemos ver sim de criar algo! Fique ligado nos próximos posts 😉

      Grande abraço!

  5. Uma dica legal é ao invés de utilizar o raspian com o docker é utilizar o HyrpiotOS https://blog.hypriot.com, uma versão do linux para o pi especifica para rodar containers e otimizada para isso 😀

    1. Oi Matias, muito boa essa dica! É um repositório impressionante, inclusive com muitas imagens prontas para ARM.

      Grande abraço!