Estou trabalhando para colocar em execução um sistema de tarefas distribuídas baseado em docker, e o principal obstáculo que estou enfrentando é como obter credenciais em cada VM do docker.
Basicamente, cada instância precisa ter um nome exclusivo e uma senha/certificado SSL. Em seguida, ele se conecta de volta à inicialização e inicia o processamento de tarefas.
Criar a instância é bastante simples, mas qual é uma boa abordagem para injetar as credenciais em cada instância? O consenso geral parece ser "usar variáveis de ambiente", mas usar uma variável de ambiente com mais de 500 caracteres (por exemplo, todo o certificado SSL) parece grosseiro.
No momento, o aplicativo que estou tentando empacotar usa um arquivo JSON simples para configuração. Existe alguma maneira de adicionar arquivos a uma instância do docker em tempo de execução ou algo semelhante? Talvez uma última etapa de construção que utilize um arquivo definido parametricamente?
Responder1
Você pode adicionar um volume Docker e apontá-lo, por contêiner, para uma pasta no host que contém o certificado SSL desejado. Você pode até criar um volume de "arquivo único".
docker run -d \
--name=worker0 \
-v "/etc/ssl/worker0.crt":/etc/ssl/private/container.crt \
-v "/etc/ssl/worker0.key":/etc/ssl/private/container.key \
myworkerimage
docker run -d \
--name=worker1 \
-v "/etc/ssl/worker1.crt":/etc/ssl/private/container.crt \
-v "/etc/ssl/worker1.key":/etc/ssl/private/container.key \
myworkerimage
Então, o que quer que você esteja usando para iniciar os trabalhadores, um script bash, ansible, etc. pode selecionar o certificado correto no host, mas dentro de cada contêiner iniciado a situação é idêntica (o certificado está sempre no mesmo caminho).
Você pode querer tornar esses 'volumes de arquivo' volumes somente leitura para :ro
refletir que eles são uma configuração estática e não algo que o contêiner deve ou deveria ser capaz de alterar.