Tempo de inicialização do Docker

Como posso acelerar: docker run e docker exec comandos?

O comando em execução leva 0,02 s de tempo do Usuário ,0,02 s de tempo do sistema (isso seria OK no meu caso), mas cerca de 0,5 S 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_image187d****5037sudo 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 a partir de ubuntu e a imagem construída leva cerca de 800 MB. Mas pelo que verifiquei, não importa muito - reduzir a imagem de tamanho para 200 MB não altera o tempo de execução do comando acima.

O tempo de sobrecarga provavelmente está sendo gasto criando e removendo namespaces. Para descobrir onde o tempo é gasto, você pode executar seu contêiner de maneiras diferentes.

Primeiro, elimine o comando sudo. Login como root, sudo -s, e executar comandos a partir daí.

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

$ 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)

Desde que você executa seu recipiente destacado, considere se você pode remover a alocação do tty, e se você precisa o stdin configurado, removendo o -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 a rede e o pid, desativando-os configurando-os para o namespace do 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

Do docker, você pode ver as ações que estão sendo executadas com docker events e verificar o carimbo de data / hora em cada uma das ações.

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

Seguindo a resposta de @ BMitch, eu diria que ’ Docker exec` não é lento. É principalmente configuração e limpeza de um contêiner.