As imagens do Docker são em sua maioria ENORMES, e estou sonhando com uma imagem minúscula de nginx .
A ideia é compilá-lo e criar uma imagem do Docker apenas com o nginx
binário, arquivos de configuração, as bibliotecas compartilhadas necessárias, etc.
Portanto, a questão é: como descobrir quais bibliotecas compartilhadas um aplicativo compilado precisará?
Conhecendo a lista, tentaria criar uma pasta com todas as dependências agrupadas e enviá-la como o menor contêiner do Docker.
Não é apenas sobre nginx, mas sim uma receita genérica sobre como lidar com esses casos. Talvez algumas técnicas de compilação cruzada possam ajudar aqui?
ldd
é a ferramenta que você está procurando. Por exemplo, aqui estão os links das bibliotecas nginx-1.1.19 no Ubuntu 12.04 LTS para:No que diz respeito a se este é ou não um meio sustentável para fazer um contêiner estivado despojado, ainda está no ar. Eu suspeito que há muito mais bits que você precisa considerar antes de fazer isso funcionar.
Um contêiner nginx é pesado porque deriva de uma instalação de sistema operacional base e, sobre ele, instalou o nginx e todas as dependências e módulos necessários. Mas esse sistema operacional básico pode ser compartilhado com outros contêineres, tornando o "desperdício" menos evidente a cada vez que você aumenta o uso de contêineres.
Além disso, manter a receita de compilação (ou seja, quando você precisa de mais módulos ou atualizações de segurança que podem alterar as dependências) pode ser mais fácil com um Dockerfile simples que usa uma imagem base do sistema operacional e instala o pacote nginx dos repositórios do que escolher pouco a pouco o que você precisa .
De qualquer forma, se você quiser criar sua própria (minúscula) imagem base do sistema operacional, há instruções em https://docs.docker.com/articles/baseimages/ junto com sugestões para imagens mínimas existentes.