Recentemente, comecei a ler artigos sobre o Docker.
Para mim, na ciência de dados, o Docker é útil porque:
1) Você possui um ambiente totalmente diferente, que o protege contra problemas de bibliotecas e dependências.
2) Se seu aplicativo modificar, por exemplo, o banco de dados da sua empresa, primeiro você deve garantir que o código funcione bem e que não tenha consequências ruins no banco de dados. Portanto, você usa o Docker para testar seu código primeiro.
minhas perguntas:
Estou certo se disser que apenas o segundo motivo é sobre boxe na areia? A primeira razão não tem nada a ver com o boxe na areia, certo?
Existem outras razões pelas quais o Docker é útil na ciência de dados?
Não encontro muitos trabalhos de pesquisa interessantes sobre o Docker para ciência de dados. Você conhece alguns famosos?
Respostas:
Em vez de focar no termo de tecnologia, fornecerá uma resposta generalizada e usará o termo “contêineres”.
Os contêineres executam apenas o que deveria ser executado, assumindo que algo desconhecido não é confiável; portanto, o que só reside no contêiner apenas durante a vida útil do contêiner; portanto, a modificação de um código no banco de dados para testar será a mesma abordagem em VMs (sandboxing) ou contêineres (janela de encaixe) e a maior diferença é o consumo de recursos e o tempo necessário para provisionar VMs versus girar contêineres / pods em alguns segundos para o aplicativo.
Os contêineres são muito importantes quando se trata do mundo da ciência de dados a partir dos seguintes pontos:
Prototipagem Rápida com Nó de Borda Sob Demanda.
Evitando a necessidade de reinstalar tudo no novo hardware após uma atualização ou falha.
Aí entra Cloudera com o Cloudera Data Science Workbench e o Anaconda com o Anaconda Enterprise, ambos usam contêineres, portanto, podem trazer resultados rápidos para os negócios e implantar facilmente os modelos, do dev ao controle de qualidade e, finalmente, à produção.
Por que a última declaração é importante? é ter portabilidade de dev para prod sem alterações nos ambientes e sem custos para a parte operacional do DevOps.
Uma vantagem de segurança notória é que a segurança do sistema operacional host é separada do contêiner, o que significa que o sistema operacional com patches separado não afetaria seu aplicativo em contêiner (quantas vezes temos o problema ao corrigir o sistema operacional e afetar o aplicativo e serviço nesse SO (caminhos, portas, serviços etc.)?
library
código malicioso em seu aplicativo / código, esse malware residirá apenas nesse contêiner enquanto o contêiner estiver ativo, os contêineres serão executados como ponto de extremidade o tempo todo e não viram um caso que espalhe o malware na rede.Comparando VMs x contêineres: com contêineres é uma história diferente, você cuida do SO separado dos contêineres (contêineres é uma tarefa separada quando a segurança está em vigor).
A segurança do Docker fornece informações detalhadas dos principais pontos de segurança.
Os padrões e conformidade do Docker fornecem uma lista completa de padrões e conformidade de segurança disponíveis para contêineres.
"O contêiner do Docker com um perfil seccomp bem criado (que bloqueia chamadas inesperadas do sistema) fornece segurança aproximadamente equivalente a um hipervisor".
Compartilhamento de pasta . Com os contêineres, você pode compartilhar uma pasta configurando uma montagem compartilhada e, como o Docker / kernel impõe permissões de arquivo usadas pelos contêineres, o sistema convidado não pode ignorar essas restrições. Isso é muito importante para aplicativos e usuários de ciência de dados, porque na empresa são usados na maioria das vezes dados confidenciais / restritos e várias camadas de segurança ou restrições, uma abordagem para resolver esse problema de segurança é usar VDI ou VMs que com o grupo AD para restringir / compartilhar o acesso a dados e se torna problemático e dispendioso para manter e alocar recursos.
Quando se trata de depurar aplicativos ou SO com todos os serviços e logs gerados, acho que os contêineres estão ganhando e evoluindo agora para a abordagem da PNL: Um utilitário experimental de processamento de linguagem natural (PNL) também está incluído, para revisar narrativas de segurança.
Acima de tudo, o cluster kubernetes possui os seguintes recursos de segurança adicionais:
A primeira etapa para tornar os contêineres mais seguros é preparar a máquina host planejada para a execução de cargas de trabalho com contenção. Ao proteger o host de contêineres e seguir as práticas recomendadas de segurança da infraestrutura, criaria uma base sólida e segura para a execução de cargas de trabalho em contêiner.
Mantenha-se atualizado sobre as atualizações do Docker, vulnerabilidades no software.
Tenha um diretório dedicado específico para arquivos relacionados ao Docker e aloque espaço suficiente para ver os contêineres serem executados (o caminho padrão é
/var/lib/docker
apenas mudar para outro ponto de montagem e monitorar no nível do sistema operacional usandoauditd
ouaide services
para alterações ou tamanho / carga de trabalho indesejada, mantenha os logs e configure de acordo com as necessidades.Nota: A melhor parte
step 2
é que, com VMs, você precisa monitorar muito mais locais para seu projeto de ciência de dados (bibliotecas em locais diferentes, várias versões de pacotes, locais / caminho até para python, executecron jobs or systemd
para garantir que algum processo seja executado, faça logon de todos os logs etc, mas com contêineres é um ponto único para que todos esses trabalhos sejam executados e monitorem apenas um caminho em vez de vários).Verifique o tempo todo os usuários no
docker
grupo para impedirunauthorized elevated access
o acesso ao sistema (o Docker permite o compartilhamento de diretório entre o host do Docker e um contêiner de convidado sem limitar os direitos de acesso do contêiner). Portanto, remova todos os usuários não confiáveis dodocker
grupo e não crie um mapeamento de diretórios confidenciais limita o host a volumes de contêiner. Aqui eu diria para usar um usuário separado para a instalação e tarefas específicas de contêiner "NUNCA usarroot
para contêineres executados dediquePID
apenas uma tarefa (terá acesso elevado, mas será baseado em tarefas, uso gravitacional para o cluster e ao instalar NUNCA use root).Audite todas as atividades do daemon do Docker (lembre-se de ocupar espaço nos logs em "mundo" em contêiner; portanto, prepare uma partição separada com espaço decente para armazenar os logs e a configuração necessária (rotação e período para armazenar os logs).
Audite todos os arquivos do Docker e docker.service, etc, var e o que mais é aplicável.
Restrinja toda a comunicação entre contêineres, vincule contêineres específicos que exijam comunicação (o melhor será criar uma rede personalizada e unir os contêineres que precisam se comunicar com essa rede personalizada). Essa abordagem de proteção impedirá a divulgação não intencional e indesejada de informações para outros contêineres.
Todos os aplicativos na infraestrutura em contêiner devem ser configurados ou pelo menos ter essa opção
Encryp All Sensitive Information
(isso é muito importante para o Data Scientist, porque na maioria das vezes fazemos login nas plataformas para obter dados, inclusivesensitive data
para a empresa.Tem a opção de ter todas as informações confidenciais criptografadas em trânsito.
Utiliza apenas aprovações específicas específicas
Ports, Protocols and Services
, as VMs têm uma superfície mais aberta quando um aplicativo / projeto é executado, com contêineres que você especifica apenas o que será usado e não se pergunta se todas as outras portas estão ouvindo, protocolos e serviços que são executados no nível do SO para proteger ou monitor, isso minimiza o"attack surface"
.As informações confidenciais armazenadas nos sistemas são criptografadas em repouso e requerem um mecanismo secundário de autenticação, não integrado ao sistema operacional, para acessar as informações.
Permite ser ativado
Operating System Anti-Exploitation Features/Deploy Anti-Exploit Technologies
: comoData Execution Prevention(DEP)
ouAddress Space Layout Randomization (ASLR)
.A melhor diferença de segurança simples entre VMs e Containers é: ao atualizar ou executar um projeto, você não precisa de acesso elevado para fazê-lo em toda a VM ou rede, basta executar como um usuário definido e, se houver acesso elevado, existe apenas para o horário do contêiner e não é compartilhado entre o host (aqui vêm as bibliotecas da Data Science instalam, atualizam, executam o código do projeto etc.).
fonte
Com o Docker Swarm Mode, você pode configurar seu próprio cluster seguro de máquinas de baixo custo.
Portanto, se você estiver no processo distribuído de grandes conjuntos de dados, o Docker Swarm (e, em alternativa, talvez a ferramenta de gerenciamento de contêineres Kubernetes) pode ser a base para a implantação do Apache Spark (ou software semelhante) em muitos contêineres (e / ou hosts), para processamento paralelo.
Se você estiver analisando em tempo real os fluxos de dados, poderá expandir o cluster com relativa facilidade, de acordo com a demanda atual, sem comprar muitos equipamentos de rede caros ou software de gerenciamento dispendioso de fornecedores de tecnologias de virtualização.
(Eu não fiz isso pessoalmente, exceto por exemplos de brinquedos no contexto dos MOOCs. No entanto, aqui está uma postagem de blog de abril de 2019 sobre o Spark on Docker Swarm, por outra pessoa. - lembre-se de que o Swarm Mode já estava disponível apenas para o Docker Enterprise Edition , não a Community Edition gratuita. Agora, a documentação não diz mais isso, mas não tenho certeza)
fonte
Ambas as razões são sobre ambientes virtuais e a cultura devops que integra atividades de desenvolvimento e operacionais. Prefiro usar a terminologia "ambiente de teste" do que o sandboxing para descrever essa função.
O Docker é útil para ferramenta de ciência de dados. Outras razões podem incluir isso facilita a colaboração entre diferentes partes, porque todo mundo está usando a mesma imagem (seu ponto de vista sobre dependências e problemas de bibliotecas) e facilita o compartilhamento e o gerenciamento de seu aplicativo / código / fluxo de trabalho com qualquer pessoa independente do sistema operacional que eles usam. Basicamente, é útil compartilhar código, seu gerenciamento com terceiros e solicitações de usuários em relação às dependências da biblioteca etc.
Não conheço trabalhos de pesquisa interessantes, mas acho que a pergunta é um pouco semelhante a perguntar, existem trabalhos de pesquisa interessantes sobre Python ou R.
fonte