8 práticas recomendadas do Docker que você deve conhecer
Principais conclusões
A utilização de imagens do Docker oficialmente sancionadas pode fornecer segurança e desempenho aprimorados, enquanto a construção de imagens personalizadas pode levar a configurações abaixo do ideal e tempos de compilação estendidos.
Para mitigar possíveis problemas relacionados a comportamentos imprevistos e dependências conflitantes, é aconselhável empregar instâncias específicas de imagens do Docker, extraindo-as e construindo-as com base em uma versão especificada.
Utilize o comando “docker scan” para efetuar uma análise abrangente das imagens Docker, de modo a verificar o seu nível de segurança e garantir que cumprem os requisitos da sua aplicação.
O Docker tornou-se uma ferramenta amplamente adoptada para aplicações de contentorização; no entanto, a sua eficácia pode ser comprometida se as pessoas não aderirem às melhores práticas estabelecidas. Negligenciar essas directrizes pode expor os sistemas a potenciais riscos de segurança e impedir o desempenho geral.
Para utilizar eficazmente as capacidades do Docker, garantindo a segurança ideal e criando ficheiros de configuração de contentores bem organizados, considere a implementação destas estratégias recomendadas. Ao aderir a estas práticas recomendadas, irá melhorar a sua experiência geral com o Docker e minimizar potenciais vulnerabilidades nas suas aplicações.
Usar imagens oficiais do Docker
Ao implantar seu aplicativo em um ambiente de contêiner, é imperativo utilizar uma imagem do Docker. Existem duas opções principais disponíveis para criar essa imagem - seja criando uma configuração personalizada ou aproveitando imagens pré-existentes fornecidas pelo próprio Docker.
A construção de visuais personalizados envolve assumir total responsabilidade pelo manuseio de todas as configurações relevantes. A título de ilustração, ao criar uma imagem destinada a ser implementada com uma aplicação Node.js, torna-se necessário obter e instalar o Node.js e quaisquer componentes de pré-requisitos associados. Embora esta tarefa possa ser trabalhosa e possa levar a definições incompletas ou erradas, oferece, no entanto, um elevado grau de flexibilidade e controlo sobre o produto final.
O Docker recomenda que você use uma imagem oficial do node.js que vem com todas as dependências corretas. As imagens do Docker têm melhores medidas de segurança, são leves e são testadas para vários ambientes. Você pode encontrar as imagens oficiais na página Imagens oficiais do Docker .
Usar versões específicas da imagem do Docker
Em geral, extrair uma imagem autorizada implica obter a tag mais recente, que significa a iteração atual da referida imagem.Consequentemente, cada instância em que um contentor é construído utilizando esta imagem resultará numa variação única do contentor anterior.
A utilização de uma variedade de iterações de imagens Docker distintas no processo de desenvolvimento de uma aplicação pode resultar em funcionalidades imprevistas, uma vez que estas versões variáveis podem entrar em conflito com requisitos complementares e, em última análise, levar ao mau funcionamento do programa.
O Docker sugere a utilização de imagens de uma versão específica para puxar e construir, uma vez que as imagens oficiais incluem documentação abrangente e atendem a cenários de aplicações predominantes.
Em vez de executar um comando genérico como “docker pull alpine”, que pode resultar no uso de uma versão indefinida ou não suportada, deve-se especificar uma versão específica, como “docker pull alpine:3.18”. Isso garante a consistência e reduz possíveis problemas durante os processos de compilação subsequentes, utilizando uma versão conhecida e suportada da imagem. Para obter informações sobre as imagens disponíveis e seus links de Dockerfile correspondentes, consulte o repositório oficial de imagens do Docker para obter mais detalhes.
Verificar imagens quanto a vulnerabilidades de segurança
Uma forma de garantir que uma imagem digital, como um contentor Docker, está livre de vulnerabilidades de segurança é através da realização de uma verificação completa do seu conteúdo. Este processo pode ser realizado através da utilização do comando “docker scan”, que utiliza uma sintaxe específica para uma execução correcta.
docker scan [IMAGE]
Para efetuar uma avaliação de vulnerabilidades de segurança numa imagem de contentor Docker, é necessário autenticar e ligar-se à plataforma Docker.
docker login
Em seguida, seleccione a imagem específica que pretende analisar, digitalizando-a com um código QR ou introduzindo o seu URL no campo apropriado na interface da aplicação.
docker scan ubuntu:latest
Uma ferramenta chamada Synk analisa a imagem, listando quaisquer vulnerabilidades de acordo com a sua gravidade. Pode ver o tipo de vulnerabilidade e ligações para informações sobre a mesma, incluindo a forma de a corrigir. A partir da análise, pode saber se a imagem é suficientemente segura para a sua aplicação.
Use imagens do Docker de tamanho pequeno
Ao adquirir uma imagem do Docker, ela é acompanhada por uma série de utilitários de sistema pré-instalados que contribuem para o aumento do tamanho geral, abrangendo ferramentas desnecessárias.
A utilização de snapshots substanciais do Docker consome uma capacidade de armazenamento notável e pode impedir a eficiência operacional de aplicativos em contêineres, devido ao seu tamanho maior.Além disso, estas imagens maiores apresentam uma maior probabilidade de potenciais violações de segurança.
Otimizar as dimensões dos contentores Docker através da utilização de imagens baseadas em Alpine é uma estratégia viável para melhorar a eficiência operacional. Ao empregar estas imagens minimalistas, que incluem apenas os componentes indispensáveis, minimiza eficazmente os requisitos de armazenamento, ao mesmo tempo que promove um desempenho rápido e cheio de recursos para as suas aplicações.
Uma série de representações oficialmente sancionadas do Alpine pode ser encontrada no Docker, com exemplos incluindo aqueles relativos ao PostgreSQL prontamente disponíveis. Uma representação de amostra das iterações do Alpine em relação ao PostgreSQL é fornecida abaixo:
Otimizar camadas de imagem de cache
Cada diretiva dentro de um Dockerfile constitui um estrato na representação gráfica da imagem. Essas estratificações abrangem diversas aplicações práticas e executam uma série de tarefas. Ao examinar os repositórios oficialmente sancionados hospedados pelo Docker Hub, é possível discernir as directivas utilizadas durante a sua criação.
Os Dockerfiles contêm todos os componentes necessários para gerar uma imagem, o que é uma razão significativa para a sua popularidade entre os programadores em relação às máquinas virtuais tradicionais.
Uma ilustração de uma imagem Alpine típica é apresentada abaixo, incluindo os seguintes componentes:
Ao utilizar imagens como base para a construção do seu aplicativo, camadas adicionais são introduzidas sobre elas. O processo de execução de comandos num Dockerfile prossegue de cima para baixo, em que qualquer alteração requer a reconstrução das camadas seguintes pelo Docker.
Para otimizar a eficiência e a consistência dos processos de conteinerização, é aconselhável estruturar um Dockerfile de forma que os componentes menos mutáveis sejam listados primeiro, seguidos por aqueles com níveis mais altos de variabilidade. Consequentemente, as configurações estáticas, como as instalações, devem ser posicionadas perto do início do ficheiro para facilitar a manutenção e a reprodutibilidade.
O Docker aproveita o conceito de camadas para otimizar o desempenho da compilação, construindo imagens somente a partir de arquivos modificados. À medida que cada camada é criada em cima de sua predecessora, todos os arquivos que permanecem inalterados são armazenados em cache sobre a imagem, acelerando assim as operações subsequentes que dependem desses elementos não modificados. Esta abordagem não só reduz a redundância como também aumenta a eficiência global do processo de construção.
Observe a ilustração apresentada na imagem acima.Neste cenário, se forem feitas alterações nos ficheiros da aplicação, o Docker iniciará o seu processo de construção com base nessas alterações, eliminando a necessidade de uma instalação adicional de pacotes npm.
A incorporação de uma imagem existente como base para a construção pode acelerar o procedimento geral em comparação com o início de uma nova reconstrução de todas as camadas subsequentes. Além disso, o armazenamento em cache melhora a taxa na qual as operações de pull e push no Docker Hub são executadas ao lidar com imagens de contêineres.
Usar um arquivo .dockerignore
Ao construir uma imagem com um Dockerfile, é possível que alguém deseje manter a confidencialidade em relação a dados específicos pertencentes ao projeto. Certos documentos e directórios podem figurar de forma proeminente no esforço, mas não necessariamente justificar a incorporação durante a fase de construção.
A utilização de um ficheiro .dockerignore pode minimizar significativamente o tamanho de uma imagem, uma vez que inclui apenas os componentes necessários durante a fase de construção. Além disso, esta abordagem facilita a proteção de informações sensíveis, tais como chaves e palavras-passe confidenciais, impedindo a sua divulgação não intencional.
O arquivo .dockerignore
é um arquivo de configuração baseado em texto que reside no mesmo diretório que o Dockerfile
. Semelhante ao ficheiro .gitignore
, inclui uma lista de nomes de ficheiros ou padrões que especificam os ficheiros que não devem ser incluídos durante o processo de contentorização ao construir uma imagem Docker.
Aqui está um exemplo:
Use o princípio do usuário menos privilegiado
O Docker emprega o usuário root por padrão para executar permissões administrativas para suas operações de contêiner; no entanto, aderir a essa abordagem representa um risco de segurança. Em caso de vulnerabilidades nos contentores, intrusos não autorizados podem obter acesso ao anfitrião do Docker.
Para evitar potenciais violações de segurança, é aconselhável estabelecer uma conta separada com privilégios específicos adaptados para aceder a dados restritos. Ao fazê-lo, podemos restringir o acesso não autorizado a material confidencial, mantendo a integridade do nosso projeto. Além disso, se as credenciais de um indivíduo forem postas em causa, temos a flexibilidade de revogar o seu acesso sem afetar outros utilizadores ou projectos.
Aqui está uma ilustração que demonstra o processo de criação de uma conta de utilizador e a especificação dos seus privilégios de acesso:
Algumas imagens fundamentais possuem utilizadores fac-similares incorporados nas mesmas, permitindo a utilização de credenciais de utilizador pré-instaladas em vez de necessitar de acesso através da conta de raiz com os seus privilégios associados.
Por que você deve adotar as práticas recomendadas do Docker
A implementação de práticas recomendadas é um meio eficaz de minimizar os pontos fracos de segurança e produzir um código mais simplificado e bem estruturado no Docker. Uma infinidade de práticas recomendadas pode ser aplicada a todos os aspectos da funcionalidade do Docker utilizada em seu aplicativo.
Um projeto estruturado facilita a integração perfeita com outras plataformas de orquestração, como o Kubernetes. O esboço do plano de projeto fornecido neste artigo serve como ponto de partida para sua jornada rumo à proficiência no Docker, permitindo maior expansão e personalização conforme necessário.