Índice:

Construir imagem Docker para Raspberry Pi: 7 etapas
Construir imagem Docker para Raspberry Pi: 7 etapas

Vídeo: Construir imagem Docker para Raspberry Pi: 7 etapas

Vídeo: Construir imagem Docker para Raspberry Pi: 7 etapas
Vídeo: Dockerfile >Docker Image > Docker Container | Beginners Hands-On | Step by Step 2024, Novembro
Anonim
Construir imagem Docker para Raspberry Pi
Construir imagem Docker para Raspberry Pi

Estas instruções mostram como construir uma imagem do Docker para Raspberry Pi.

Etapa 1: Por que Docker?

Você pode usar o Raspberry Pi (RPi) para fazer muitas coisas, pequeno servidor da web, assistente de IA, robótica … etc.

Muitos projetos que você deseja experimentar, mas os pontos fracos são:

Hora de construir

RPi não gosta muito de poder de processamento e a unidade SD / USB limitou a velocidade de E / S. Usar apt install all dependency package requer uma hora e compilar o código-fonte requer mais horas. Especialmente para projetos relacionados à IA, é hora de esperar mais do que tentar.

Conflito de versão

Todos tentam muitos projetos em um RPi. Quando você tentou um projeto e gostaria de mudar para outro, pode encontrar alguma falha de compilação causada por conflito de versão das bibliotecas de dependência com o projeto anterior. Algumas bibliotecas pararam de se desenvolver há alguns anos e dependem de algumas bibliotecas muito antigas. Em contraste, o projeto ativo dependia das bibliotecas mais recentes. Ambos os projetos não podem coexistir na mesma unidade SD / USB ?.

Backup de imagem

Uma vez que alguns projetos não podem coexistir, basta comprar mais drives SD / USB para manter a dependência de cada imagem do projeto. Se o dinheiro não é limitado? Mas aumenta as dificuldades de gerenciamento de arquivo / imagem, às vezes você precisa trocar SD / USB e inicializar várias vezes para descobrir o que deseja.

Difícil de compartilhar

Quando você construiu seu projeto e gostaria de compartilhar a fonte com amigos, seus amigos podem receber o feed de falha de construção. Versão de distribuição / bibliotecas muito antiga ou muito nova, parâmetros de construção e alguns truques. Você precisa gastar tempo para resolver problemas de construção de outras pessoas, mas não para apoiar o projeto em si.

Os pontos de dor acima são minha experiência nestes poucos anos. O Docker pode ajudar em grande parte.

O Docker inicia a compilação selecionando uma imagem pai pré-construída. Por exemplo. debian: jessie-slim começou a partir de uma antiga distribuição leve e estável do Debian; node: 10-buster-slim start da distribuição leve do Debian com Node.js 10 instalado. A imagem pré-construída pode economizar muito tempo para fazer flash da imagem, obter atualização e instalar bibliotecas dependentes. Cada projeto pode começar com uma versão diferente do sistema operacional, versão do tempo de execução e versão das bibliotecas. Quando terminar de desenvolver seu próprio projeto, você pode enviar a imagem do Docker para o hub do docker e compartilhar com todos. Você pode manter todos os dados do projeto no mesmo SD / USB (os dados devem fazer backup de rotina em outra mídia). Para economizar armazenamento local, você pode até mesmo limpar a imagem do Docker quando não estiver em uso, a qualquer momento, você pode puxar do hub do Docker novamente.

Etapa 2: Docker Overhead

Docker adicionou uma camada de virtualização, a sobrecarga é uma preocupação. Não testei muito sobre a sobrecarga do Docker. A maioria dos resultados pesquisados no Google afirmam uma sobrecarga muito baixa e eu encontrei este documento sobre algumas pesquisas relacionadas:

domino.research.ibm.com/library/cyberdig.n…

Etapa 3: instale o Docker

Basta executar:

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

Ref.:

www.raspberrypi.org/blog/docker-comes-to-…

docs.docker.com/get-started/

Etapa 4: Criação da imagem do Docker

Encontre o guia oficial sobre a construção de imagens docker:

docs.docker.com/get-started/part2/

Tenho 2 projetos usando Docker, você pode encontrar o Dockerfile como referência:

BanateCAD requer tempo de execução Lua e algumas bibliotecas Lua adicionais. Apenas Lua 5.1 pode ser compatível com todas as bibliotecas Lua necessárias, mas é o produto de 2006. A distribuição Debian mais recente que pode construir Lua 5.1 com sucesso é Jessie (a versão anterior ao antigo estável do Debian atual). Portanto, construí um Docker Image para o ambiente Lua 5.1 para executá-lo

github.com/moononournation/BanateCAD/tree/…

OpenCV é um projeto em desenvolvimento ativo, o código-fonte depende das bibliotecas e compiladores mais recentes. Portanto, é uma chance muito alta de falha de construção, assinatura de método de bibliotecas, versão do compilador, conflito de dependências … Eu gostaria de usar opencv4nodejs para fazer um aplicativo simples e não requerer os recursos mais recentes. Então, quando descobri uma maneira de construir o sucesso do opencv4nodejs, gostaria de congelá-lo em uma imagem do Docker e fazer a codificação do meu aplicativo real

github.com/moononournation/face-aware-phot…

Etapa 5: Velocidade de construção do desenvolvimento vs. tamanho da imagem

Velocidade de construção de desenvolvimento vs. tamanho da imagem
Velocidade de construção de desenvolvimento vs. tamanho da imagem
Velocidade de construção de desenvolvimento vs. tamanho da imagem
Velocidade de construção de desenvolvimento vs. tamanho da imagem

Você pode descobrir que meu projeto face-aware-photo-osd tem 2 versões do Dockfile:

github.com/moononournation/face-aware-phot…

Durante o desenvolvimento, gosto de dividir o comando RUN o menor possível e organizar o mais provável para alterar o comando RUN para a última etapa. Portanto, para cada mudança de build para desenvolvimento, posso utilizar a camada anterior construída tanto quanto possível e economizar muito na velocidade de build.

Em contraste, combinarei todos os comandos RUN em um antes do lançamento. camada inferior pode reduzir muito o tamanho da imagem do Docker. Meu projeto de foto-osd com reconhecimento de rosto, por exemplo, pode reduzir o tamanho de mais de 100 MB.

Etapa 6: Imagens Multi Arch

Imagens Multi Arch
Imagens Multi Arch

Como mencionado antes, RPi não gosta muito de poder de processamento. Usar imagem Docker de compilação RPi pode não ser uma boa escolha, especialmente quando seu único RPi está executando outros projetos.

Usar um computador x86 também pode ajudá-lo a construir a imagem do Docker. Encontre mais detalhes aqui:

www.docker.com/blog/multi-arch-images/

2 comandos simples podem construir x86 e ARM Docker Image em paralelo:

docker buildx create --use

docker buildx build --plataforma linux / amd64, linux / arm -t moononournation / debian-imagemagick-lua-meshlab: 1.0.1 --push.

O Multi Arch pode construir uma imagem multiplataforma com a mesma tag de imagem do Docker, para que seu projeto possa ser executado em máquinas diferentes perfeitamente. por exemplo.

docker run -it moononournation / debian-imagemagick-lua-meshlab: 1.0.1

Não importa se você execute o comando acima no RPi ou em seu computador x86, você pode obter um ambiente de tempo de execução Lua.

Etapa 7: Feliz RPi

Agora você pode desenvolver e compartilhar seu projeto RPi com mais facilidade!

Recomendado: