GitLab Runner: Crear una imagen Docker con Docker-in-Docker
Esta documentación forma parte de la guía Crear imágenes Docker. Consulte la guía completa aquí: Compila y publica imágenes Docker de forma eficiente desde tus pipelines de GitLab CI/CD utilizando los runners de Stackhero y Docker-in-Docker.
👋 ¡Bienvenido a la documentación de Stackhero!
Stackhero ofrece una solución sencilla de GitLab Runner en la nube que facilita la ejecución de sus trabajos de GitLab CI/CD de manera eficiente y sin complicaciones. Esto es lo que puede esperar:
- Minutos ilimitados de CI/CD: ejecute sus pipelines tantas veces como necesite, sin facturación por minuto ni cargos inesperados.
- Varios trabajos concurrentes: acelere su desarrollo ejecutando varios trabajos en paralelo.
- El ejecutor Docker con soporte para Docker-in-Docker: construya y publique fácilmente imágenes de contenedores como parte de su proceso CI/CD.
- Funciona perfectamente tanto con GitLab.com como con instancias de GitLab autogestionadas.
- Una infraestructura privada y dedicada con almacenamiento NVMe/SSD rápido garantiza un rendimiento de compilación estable y predecible.
- Disponible en las regiones de 🇪🇺 Europa y 🇺🇸 USA para adaptarse a las necesidades de su equipo.
Ahorre tiempo: puede conectar su primer GitLab Runner y empezar a ejecutar pipelines en solo unos minutos.
Puedes añadir el siguiente ejemplo de .gitlab-ci.yml a tu repositorio. Esta configuración compila el Dockerfile que se encuentra en la raíz de tu proyecto:
build-image:
stage: build
image: docker:29
services:
- name: docker:29-dind
alias: docker
variables:
DOCKER_HOST: "tcp://docker:2375"
DOCKER_TLS_CERTDIR: ""
before_script:
- docker info
script:
# Sustituye "my-image" por el nombre que desees:
- docker build -t my-image .
# Opcionalmente, ejecuta una prueba rápida sobre la imagen construida:
# - docker run --rm my-image /path/to/tests
En este ejemplo estamos usando la versión 29 de la imagen Docker. Puedes utilizar una versión más reciente si está disponible. Puedes consultar las etiquetas más recientes en la página oficial de la imagen Docker.
En esta configuración, el servicio docker:29-dind inicia un daemon Docker junto a tu job, y DOCKER_HOST: "tcp://docker:2375" indica al CLI de docker que lo utilice. Debes establecer siempre DOCKER_HOST cuando declares un servicio docker:dind: si no lo haces, el CLI se conecta silenciosamente a otro daemon, por lo que tu compilación puede pasar incluso si el servicio está mal configurado, ocultando problemas reales (y rompiendo herramientas como Testcontainers que dependen del servicio). DOCKER_TLS_CERTDIR: "" conecta a través del puerto interno sin TLS 2375 en la red interna del job.
Como alternativa más sencilla, puedes omitir el bloque services y ambas variables: el runner de Stackhero también expone un daemon Docker listo para usar a través de un socket montado, por lo que un simple docker build funciona sin configuración adicional.