Tiempo de inicio de Docker

Cómo puedo acelerar: docker run y docker exec los comandos?

Ejecutar el comando toma 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 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_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

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

my_image se crea a partir de ubuntu y 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.

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

Primero, elimine el comando sudo. Iniciar sesión como root, sudo -s, y ejecute comandos desde allí.

A continuación, intente dividir la ejecución en pasos separados de creación e inicio. Esto le permitirá saber si el tiempo se dedica a crear el contenedor o a 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 el contenedor de forma independiente, considere si puede eliminar la asignación de tty y, si necesita configurar la entrada estándar, elimine la -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 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

Desde Docker, puede ver las acciones que se realizan con docker events y comprobando la marca de tiempo en 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 la comunicación de socket/red entre el cliente y el servidor.

Siguiendo la respuesta de @BMitch, diría que ‘docker exec’ no es lento en absoluto. Se trata principalmente de la configuración y limpieza de un contenedor.