gitlab.com CI docker-compose

时间:2017-07-22 11:06:46

标签: docker docker-compose gitlab gitlab-ci

我已将我的应用程序停靠并使用docker-compose在本地运行它。我想使用我在本地使用的相同docker-compose命令在CI运行器上构建和测试我的应用程序,但我似乎无法找到有关如何的任何文档?

我正在使用gitlab.com,而documentation表示您应该使用docker图片。只有docker-compose似乎不再带有标准图像...

docker-compose与GitLab CI一起使用的最佳方法是什么?

编辑:用例

.gitlab-ci.yml

image: docker:latest

variables:
  DOCKER_DRIVER: overlay
  WORKER_TEST_IMAGE: registry.gitlab.com/org/project/worker:$CI_COMMIT_REF_NAME
  WORKER_RELEASE_IMAGE: registry.gitlab.com/org/project/worker:latest

services:
  - postgres:9.6.3
  - docker:dind

stages:
- build
- test
- release
- deploy

before_script:
  - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY

build_worker:
  stage: build
  script:
    - docker build --pull -t $WORKER_TEST_IMAGE .
    - docker push $WORKER_TEST_IMAGE

test_worker:
  stage: test
  script:
    - docker pull $WORKER_TEST_IMAGE
    # I need a way to connect the postgres service to the image I'm 
    # trying to run. Which doesn't seem possible?
    # - docker-compose run worker dockerize -wait tcp://postgres:5432 nosetests
    - docker run $WORKER_TEST_IMAGE dockerize -wait tcp://postgres:5432 nosetests
...

我觉得Gitlab CI让我重新实现了docker-compose,因为他们不支持它?

1 个答案:

答案 0 :(得分:2)

Gitlab CI有自己的docker语法,不支持docker-compose。所以docker-compose只有在你使用一个名为dind的机制(docker中的docker)时才能工作,你必须将主机系统的docker socket挂载到CI运行器中。迟早你会发现这种方法有严重的局限性,可能会引入更多的跑步者配置而缺乏文档。

虽然可能,但你真的应该坚持正式的gitlab方式。仔细阅读https://docs.gitlab.com/ce/ci/docker/using_docker_images.html,您将能够以与docker-compose类似的方式轻松使用多个docker容器。