Estuvimos indagando en distintos sitios para tenerte la solución para tu problema, en caso de alguna inquietud puedes dejarnos la duda y te contestamos con gusto.
Solución:
Siguiendo la documentación oficial:
# .gitlab-ci.yml
image: docker
services:
- docker:dind
build:
script:
- apk add --no-cache docker-compose
- docker-compose up -d
Ejemplo de docker-compose.yml:
version: "3.7"
services:
foo:
image: alpine
command: sleep 3
bar:
image: alpine
command: sleep 3
Personalmente, ya no seguimos este flujo, porque pierde el control sobre los contenedores en ejecución y podrían terminar funcionando sin fin. Esto se debe al ejecutor docker-in-docker. Desarrollamos un script de python como solución alternativa para eliminar todos los contenedores antiguos en nuestro CI, que se puede encontrar aquí. Pero ya no sugiero iniciar contenedores como este.
Docker también proporciona una oficial imagen: docker/compose
Esta es la solución ideal si no desea instalarlo en cada tubería.
Tenga en cuenta que en la última versión de GitLab CI/Docker probablemente necesitará otorgar acceso privilegiado a su GitLab CI Runner y configurar/deshabilitar TLS. Ver Usar el flujo de trabajo docker-in-docker con el ejecutor de Docker
variables:
DOCKER_HOST: tcp://docker:2375/
DOCKER_DRIVER: overlay2
# Official docker compose image.
image:
name: docker/compose:latest
services:
- docker:dind
before_script:
- docker version
- docker-compose version
build:
stage: build
script:
- docker-compose down
- docker-compose build
- docker-compose up tester-image
Tenga en cuenta que en las versiones de docker-compose
antes de 1.25:
Dado que la imagen utiliza
docker-compose-entrypoint.sh
como punto de entrada necesitarás anular de vuelta a/bin/sh -c
en tus.gitlab-ci.yml
. De lo contrario, su tubería fallará conNo such command: sh
image:
name: docker/compose:latest
entrypoint: ["/bin/sh", "-c"]
Creé un contenedor docker simple que tiene docker-compose
instalado encima de docker:latest
. Consulte https://hub.docker.com/r/tmaier/docker-compose/
Su .gitlab-ci.yml
archivo se vería así:
image: tmaier/docker-compose:latest
services:
- docker:dind
before_script:
- docker info
- docker-compose --version
buildJob:
stage: build
tags:
- docker
script:
- docker-compose build
Si para ti ha sido de utilidad este post, sería de mucha ayuda si lo compartes con más desarrolladores y nos ayudes a difundir este contenido.