Tempo de inicialização do Docker

Tempo de inicialização do Docker

Como posso acelerar: docker rune docker execcomandos?

A execução do comando leva 0,02s de tempo do usuário, 0,02s de tempo do sistema (isso seria bom no meu caso), mas cerca de 0,5s em tempo real cada (não aceitável).

Por exemplo:

$ time sudo docker run --cap-add SYS_ADMIN -i -t --memory=100000k --memory-swap=100000k -d -w /tmp -v /home/asd:/tmp my_image
187d****5037
sudo docker run --cap-add SYS_ADMIN -i -t --memory=100000k  -d -w /tmp -v    0,02s user 0,02s system 6% cpu 0,496 total

Posso de alguma forma acelerar o processo de execução do contêiner ou pelo menos entender por que esse tempo é desperdiçado?

my_imageé criado ubuntue a imagem construída ocupa cerca de 800 MB. Mas pelo que verifiquei não importa muito - reduzir o tamanho da imagem para 200 MB não altera o tempo de execução do comando acima.

Responder1

O tempo de sobrecarga provavelmente está sendo gasto na criação e remoção de namespaces. Para descobrir onde o tempo é gasto, você pode executar seu contêiner de diferentes maneiras.

Primeiro, elimine o comando sudo. Faça login como root sudo -se execute comandos a partir daí.

Em seguida, tente dividir a execução em etapas separadas de criação e início. Isso permitirá que você saiba se o tempo é gasto na criação ou execução do contêiner:

$ time docker create --cap-add SYS_ADMIN -itd \
  --memory=100000k --memory-swap=100000k \
  -w /tmp -v /home/asd:/tmp my_image

$ time docker start -ai $(docker ps -ql)

Como você executa seu contêiner desanexado, considere se você pode remover a alocação tty e se precisa configurar o stdin, removendo -it:

$ time sudo docker run --cap-add SYS_ADMIN -d \
  --memory=100000k --memory-swap=100000k \
  -w /tmp -v /home/asd:/tmp my_image

Depois disso, você pode começar a ver quanto tempo é adicionado para criar cada um dos namespaces para coisas como rede e pid, desativando-os e configurando-os para o namespace de host existente:

$ time sudo docker run --cap-add SYS_ADMIN -itd \
  --net=host --pid=host --uts=host \
  --memory=100000k --memory-swap=100000k \
  -w /tmp -v /home/asd:/tmp my_image

Na janela de encaixe, você pode visualizar as ações que estão sendo executadas docker eventse verificar o carimbo de data / hora de cada uma das ações.

Por último, tenha em mente que o docker é um aplicativo cliente/servidor e, parte do tempo real, pode ser uma comunicação de soquete/rede entre o cliente e o servidor.

informação relacionada