O Docker é uma plataforma popular para empacotar aplicativos como artefatos distribuíveis independentes. Ele cria imagens que incluem tudo o que você precisa para executar um determinado software, como seu código-fonte, dependências de pacotes de terceiros e recursos de ambiente necessários.
Como as imagens do Docker podem ser executadas em qualquer lugar que o Docker esteja instalado, elas são um formato viável para distribuir seus aplicativos CLI. O ecossistema Docker inclui o Docker Hub como um registro público disponível por padrão, oferecendo uma cadeia de ferramentas completa para publicar, atualizar e documentar suas ferramentas.
É assim que você pode usar o Docker para empacotar aplicativos CLI em vez de gerenciadores de pacotes de SO tradicionais e downloads binários autônomos.
índice
- Por que usar o Docker para aplicativos CLI?
- Criando uma imagem do Docker para um aplicativo CLI
- Juntando tudo
- gerenciamento de dados persistente
- Outros desafios possíveis
- Resumo
Por que usar o Docker para aplicativos CLI?
O Docker pode tornar mais rápido e fácil para os usuários instalarem seu novo utilitário. eles podem fazer o docker run your-app
em vez de procurar instruções de instalação específicas da plataforma. Não há extração manual de arquivos tar
, cópia para pastas do sistema ou edição PATH
envolvida.
O software dockerizado também facilita para os usuários selecionar versões diferentes, realizar atualizações e iniciar reversões. Cada versão distinta que você cria deve ter sua própria tag imutável que identifica exclusivamente sua imagem do Docker. Ao contrário dos gerenciadores de pacotes normais, os usuários podem facilmente executar duas versões de seu software lado a lado iniciando contêineres com base em diferentes tags de imagem.
Outro benefício é a facilidade com que os usuários podem testar seu aplicativo com segurança sem se comprometer a longo prazo com ele. As pessoas podem hesitar em adicionar novos pacotes às suas máquinas por medo de que o software não seja totalmente limpo quando for removido. Os contêineres do Docker têm seu próprio sistema de arquivos privado; remover um contêiner não deixa vestígios de sua existência no host. Isso pode incentivar mais usuários a experimentar seu aplicativo.
Uma consequência natural da distribuição dockerizada é o requisito de que os usuários já tenham o Docker rodando em sua máquina. Atualmente, muitos desenvolvedores o executam rotineiramente, por isso é uma escolha bastante segura. Se você estiver preocupado em bloquear usuários que não desejam usar o Docker, ainda poderá fornecer opções alternativas por meio de seus canais de distribuição existentes.
Criando uma imagem do Docker para um aplicativo CLI
As imagens do Docker para aplicativos CLI são um pouco diferentes daquelas usadas para qualquer outro tipo de software. O objetivo é fornecer uma imagem o mais leve possível, ao mesmo tempo em que agrupa tudo o que seu aplicativo precisa para funcionar.
Geralmente, é melhor começar com uma imagem de base mínima executando um sistema operacional simplificado como o Alpine. Adicione apenas os pacotes que seu software requer, como sua linguagem de programação, estrutura e dependências.
Duas instruções vitais do Dockerfile para ferramentas CLI são ENTRYPOINT
e CMD
. Juntos, eles definem o processo em primeiro plano a ser executado quando os contêineres são iniciados a partir de sua imagem. A maioria das imagens base, por padrão, iniciará um shell quando o contêiner for iniciado. Você deve alterar isso para que seu aplicativo seja executado automaticamente, eliminando a necessidade de os usuários executá-lo manualmente dentro do contêiner.
A ENTRYPOINT
Dockerfile define o processo de primeiro plano do contêiner. Defina isso no executável do seu aplicativo:
ENTRYPOINT ["demo-app"]
A instrução CMD
funciona em conjunto com ENTRYPOINT
. Fornece argumentos padrão para o comando definido como ENTRYPOINT
. Os argumentos fornecidos pelo usuário ao iniciar o contêiner com o docker run
substituem o CMD
definido no Dockerfile.
Um bom uso para o CMD
é quando você deseja exibir informações básicas de ajuda ou versão quando os usuários ignoram um comando específico:
ENTRYPOINT ["demo-app"] CMD ["--version"]
Aqui estão alguns exemplos que mostram como essas duas instruções resultam em comandos diferentes sendo executados quando os contêineres são criados:
# Iniciando um novo contêiner a partir da imagem "demo-app-image:latest" # Executa o docker "demo-app --version" run demo-app-image:latest # Executa o docker run "demo-app demo --foo bar" demo-app-image:latest demo --foo bar
Nenhum dos exemplos exige que o usuário digite o nome executável demo-app
. Ele é usado automaticamente como o processo de primeiro plano porque é o ENTRYPOINT
configurado. O comando recebe os argumentos que o usuário deu ao docker run
após o nome da imagem. Quando nenhum argumento é fornecido, o valor padrão --version
é usado
Essas duas instruções são os blocos de construção fundamentais das imagens do Docker que hospedam as ferramentas da CLI. Você deseja que o executável principal do seu aplicativo seja o processo de primeiro plano padrão para que os usuários não precisem invocá-lo.
Juntando tudo
Aqui está uma imagem do Docker que executa um aplicativo Node.js simples:
# !/usr/local/bin/nodeconsole. log("Olá Mundo");
FROM node:16-alpine WORKDIR /hello-world COPY ./ . RUN npm install ENTRYPOINT ["hello-world.js"]
A variante baseada em Alpine da imagem base do Node é usada para reduzir o tamanho geral da sua imagem. O código-fonte do aplicativo é copiado para o sistema de arquivos da imagem por meio da instrução COPY
. As dependências npm do projeto são instaladas e o script hello-world.js
é definido como o ponto de entrada da imagem.
Compile a imagem usando o docker build
:
docker build -t demo-app-image:latest
Agora você pode executar a imagem para ver o Hello World
transmitido para o seu terminal:
docker run demo-app-image:latest
Neste ponto, você está pronto para enviar sua imagem para o Docker Hub ou outro registro onde os usuários possam baixá-la. Qualquer pessoa que tenha acesso à imagem poderá iniciar seu software usando apenas a CLI do Docker.
gerenciamento de dados persistente
Dockerizar um aplicativo CLI apresenta alguns desafios. O mais proeminente deles é como lidar com a persistência de dados. Os dados criados dentro de um contêiner são perdidos quando esse contêiner é interrompido, a menos que sejam salvos em um volume externo do Docker.
Você deve gravar dados em caminhos claramente definidos onde os usuários possam montar volumes. É uma boa prática agrupar todos os seus dados persistentes em um único diretório, como /data
. Evite usar muitos locais que exigem a montagem de vários volumes. Seu guia de introdução deve documentar os volumes de que seu aplicativo precisa para que os usuários possam configurar a persistência ao criar seu contêiner.
# Execute o demo-app com um volume de dados montado em /data docker run -v demo-app-data:/data demo-app-image:latest
Outros desafios possíveis
O problema de montagem reaparece quando seu comando precisa interagir com arquivos no sistema de arquivos do host. Aqui está um exemplo simples de uma ferramenta de upload de arquivos:
docker run file-uploader cp example.txt servidor de demonstração:/example.txt
Isso acaba procurando por example.txt
dentro do contêiner. Nessa situação, os usuários precisarão vincular a montagem de seu diretório de trabalho para disponibilizar seu conteúdo para o contêiner:
docker run -v $PWD:/file-uploader file-uploader cp example.txt demo-server:/example.txt
Também é importante pensar em como os usuários irão fornecer valores de configuração para sua aplicação. Se você normalmente lê um arquivo de configuração, lembre-se de que os usuários precisarão montar um em cada contêiner que criarem. Oferecer opções alternativas, como sinalizadores de linha de comando e variáveis de ambiente, pode otimizar a experiência para casos de uso simples:
# Definindo a variável de ambiente LOGGING_DRIVER na janela de encaixe do contêiner run -e LOGGING_DRIVER=json demo-app-image:latest
Outro desafio diz respeito a aplicativos interativos que exigem entrada do usuário. Os usuários devem passar o sinalizador -it
para o docker run
para habilitar o modo interativo e atribuir um pseudo-TTY:
docker run -it demo-app-image:latest
Os usuários devem se lembrar de definir esses sinalizadores quando necessário ou seu programa não poderá coletar nenhuma entrada. Você deve documentar os comandos que exigem um TTY para que os usuários não sejam pegos de surpresa por erros inesperados.
Esses pontos problemáticos significam que os aplicativos dockerizados podem se tornar difíceis de manejar se não forem projetados especificamente com a conteinerização em mente. Os usuários obtêm a melhor experiência quando seus comandos são puros, sem a necessidade de interações do sistema de arquivos e com configuração mínima. Quando isso é possível, um simples docker run image-name
o objetivo de instalação e uso sem atrito. Ele ainda pode conter software mais complexo, mas depende cada vez mais de usuários que tenham um bom conhecimento prático da CLI do Docker e seus conceitos.
Resumo
O Docker não é apenas para implantações em nuvem e serviços em segundo plano. Também está se tornando cada vez mais popular como um mecanismo de distribuição para aplicativos de console regulares. Você pode publicar, consumir, executar e manter software com facilidade usando a CLI exclusiva do docker
que muitos profissionais de software já usam todos os dias.
Oferecer uma imagem do Docker pronta para uso para seu aplicativo oferece aos usuários mais opções. Os recém-chegados podem começar com um único comando que configura um ambiente pré-configurado com todas as dependências cuidadas. Não há risco de contaminar o sistema de arquivos ou o ambiente do host do Docker, o que evita conflitos com outros pacotes e garante a capacidade de voltar para uma lousa limpa, se desejar.
A criação de uma imagem do Docker geralmente não envolve mais do que as rotinas que você já está usando para enviar compilações para diferentes gerenciadores de pacotes do SO. As considerações mais importantes são manter sua imagem tão pequena quanto possível e certificar-se de que o ponto de entrada e o comando sejam apropriados para seu aplicativo. Isso dará aos usuários a melhor experiência possível ao usar seu software dockerizado.
- Como configurar alarmes de faturamento e orçamento da AWS – CloudSavvy UK
- Fraudes falsas do Valorant no YouTube infectam você com o ladrão RedLine
descubra mais conteúdo
O que é um amplificador integrado?
Google Pixel Watch também tem detecção de queda, mas não até o próximo ano
As melhores xícaras de café aquecidas de 2022
Como automatizar seu iPhone com base na hora, atividade ou localização
"Isso deve ter sido antes do meu tempo"
Por que a NASA enviou Snoopy para a Lua? – Revisão geek
O que o comando da CLI do Docker faz?
Permite que o processo termine naturalmente, respeitando seu ciclo de vida. Se o processo não for concluído em 10 segundos, o Docker enviará um sinal sigkill para finalizá-lo imediatamente.
O que é o DockerDesktop?
O Docker Desktop é um aplicativo nativo projetado para Windows e MAC OS para executar, criar e enviar aplicativos ou serviços encaixados/contêinerizados.