Tiempo de inicio de Docker

Tiempo de inicio de Docker

¿Cómo puedo acelerar: docker runy docker execcomandos?

La ejecución del comando requiere 0,02 s de tiempo de usuario, 0,02 s de tiempo de sistema (eso estaría bien en mi caso), pero alrededor de 0,5 s de tiempo real cada uno (no es aceptable).

Por ejemplo:

$ 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

¿Puedo de alguna manera acelerar el proceso de ejecución del contenedor o al menos entender por qué se pierde este tiempo?

my_imagese crea ubuntuy la imagen construida ocupa alrededor de 800 MB. Pero por lo que verifiqué, no importa demasiado: reducir el tamaño de la imagen a 200 MB no cambia el tiempo de ejecución del comando anterior.

Respuesta1

Lo más probable es que el tiempo adicional se dedique a crear y eliminar espacios de nombres. Para determinar dónde se gasta el tiempo, puede ejecutar su contenedor de diferentes maneras.

Primero, elimine el comando sudo. Inicie sesión como root sudo -sy ejecute comandos desde allí.

A continuación, intente dividir la ejecución en pasos de creación e inicio separados. Esto le permitirá saber si se dedica tiempo a crear el contenedor o ejecutarlo:

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

Dado que ejecuta su contenedor de forma independiente, considere si puede eliminar la asignación de tty y si necesita configurar la entrada estándar, eliminando -it:

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

Después de eso, puede comenzar a ver cuánto tiempo se agrega para crear cada uno de los espacios de nombres para cosas como la red y el pid deshabilitándolos configurándolos en el espacio de nombres del 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

Desde la ventana acoplable, puede ver las acciones que se están realizando docker eventsy verificar la marca de tiempo de cada una de las acciones.

Por último, tenga en cuenta que Docker es una aplicación cliente/servidor, y parte del tiempo real puede ser comunicación de socket/red entre el cliente y el servidor.

información relacionada