La última vez usé Docker en Docker para corredores, perorequiere modo privilegiado
componer archivo:
version: '3.7'
services:
runner:
image: gitlab/gitlab-runner:latest
volumes:
- ./config:/etc/gitlab-runner
- ./run:/var/run/
# - /var/run/docker.sock:/var/run/docker.sock
docker:
image: docker:dind
restart: always
privileged: true # <-- security problems
volumes:
- ./run:/var/run/
Tengo una computadora personal. Tengo un equipo de Gitlab que necesita ejecutar docker build
scripts docker-compose up
con Gitlab CI. Realmente quiero acelerar la CI. Por eso comparto mianfitriónventana acoplable concorredores, ahora tienen caché de Docker (imágenes, etc.) y cuando una etapa crea una imagen y otra lo requiere, es realmente rápido.
Tengo el mismo problema con Jenkins. Necesito compartir la ventana acoplable del host con los nodos trabajadores.
La última vez quise probar el nuevo enfoque y ejecutar corredores con su propia ventana acoplable. Casi no tengo 2 cosas importantes: - límite de recursos (quiero compartir 7 de 8 núcleos de CPU, 10 de 16 GB de memoria, algunos límites de HDD) - seguridad
Es importante agregar: no tengo scripts de CI que requieran GPU, capacidades de red, montaje de algunos dispositivos, etc. Por lo general, lo hacen de manera simple docker build
y docker push
, a veces, necesito agarrar artefactos docker cp
, eso es todo. Pregunta principal: ¿cómoejecute Docker en Docker sin privilegios de root para la máquina host?
Ambos: el uso compartido de sockets o el modo privilegiado dan vulnerabilidades a las máquinas host, y tener una máquina virtual (como VirtualBox o algo así) es lento y difícil de hacer, también quiero compartir recursos y quiero esa ventana acoplable.poderuse 10 de 16 GB, pero 10 GB deberían quedar libres cuando no los use.
Tengo algunos errores no informativos de dind contatiner (antes de fallar) cuando lo ejecuto con los privilegios habituales:
gitlab-runner-docker | mount: permission denied (are you root?)
gitlab-runner-docker | mount: permission denied (are you root?)
gitlab-runner-docker | Could not mount /sys/kernel/security.
gitlab-runner-docker | AppArmor detection and --privileged mode might break.
¿Qué problemas tendré si intento ejecutar Docker en Docker sin modo privilegiado? ¿Cómo hacerlo?
Respuesta1
bueno, con respecto al equilibrio de carga de la memoria ram, no puedo evitarlo, pero puedes ejecutar una ventana acoplable en la ventana acoplable (dind) sin permisos sudo agregando tu usuario actual al grupo de la ventana acoplable,
No veo la seguridad de los sockets compartidos porque pierde su integridad pero recomendaría instanciar el dind con el parámetro el compositor con el parámetro privilegiado: true