¿Cómo puedo acelerar: docker run
y docker exec
comandos?
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_image
se crea 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.
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 -s
y 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 events
y 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.