@ A resposta de Michael Hampton parece certa para mim.
O que eu sugiro é que você empacote os scripts systemd relevantes em seu ISO, e faça com que esses scripts lidem com o carregamento ou a construção de suas imagens.
Assim, para um contêiner nginx, o arquivo de sua unidade pode ser semelhante:
[Unit]
Description=nginx
After=docker.service
Requires=docker.service
[Service]
TimeoutStartSec=0
ExecStartPre=-/usr/bin/docker kill nginx
ExecStartPre=-/usr/bin/docker rm nginx
ExecStartPre=-/usr/bin/docker load /path/to/compressed/image
ExecStart=/usr/bin/docker run --rm [your config here]
Se você preferir criar em vez de carregar, também poderá fazer isso substituindo:
ExecStartPre=-/usr/bin/docker load /path/to/compressed/image
Com:
ExecStartPre=-/usr/bin/docker build --rm -t 'my-nginx:latest' /path/to/folder_with_Dockerfile
Você também pode usar dependências do systemd para garantir que as coisas sejam iniciadas na ordem correta e / ou vinculem os contêineres (veja, por exemplo, After
/ Before
, PartOf
, e assim por diante) do systemd.
Em geral, acho que não gastaria muito tempo me preocupando com apenas carregar / compilar uma vez - especialmente se você fosse criar imagens (em vez de carregá-las), isso permitiria que você atualizasse um contêiner atualizando seu Dockerfile local. O que pode ser um recurso útil se o seu registro não estiver disponível.