gitlab.com CI docker compose

gitlab.com CI docker compose,docker,docker-compose,gitlab,gitlab-ci,Docker,Docker Compose,Gitlab,Gitlab Ci,我已将我的应用程序停靠,并使用docker compose在本地运行它。我想使用本地使用的docker compose命令在CI runner上构建和测试我的应用程序,但我似乎找不到任何关于如何构建和测试应用程序的文档 我正在使用gitlab.com,那里说你应该只使用docker图像。只有docker compose似乎不再提供标准图像 在GitLab CI中使用docker compose的最佳方法是什么 编辑:用例 .gitlab-ci.yml image: docker:latest

我已将我的应用程序停靠,并使用
docker compose
在本地运行它。我想使用本地使用的
docker compose
命令在CI runner上构建和测试我的应用程序,但我似乎找不到任何关于如何构建和测试应用程序的文档

我正在使用gitlab.com,那里说你应该只使用
docker
图像。只有docker compose似乎不再提供标准图像

在GitLab CI中使用
docker compose
的最佳方法是什么

编辑:用例

.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,因为他们不支持它?

Gitlab CI有自己的docker语法,不支持docker compose。因此,docker compose只有在使用名为dind(docker in docker)的机制时才起作用,在该机制中,您必须将主机系统的docker套接字装入CI运行程序。迟早您会发现这种方法有严重的局限性,可能会引入更多的运行程序配置,并且缺少文档


尽管有可能,但您确实应该坚持官方的gitlab方式。仔细阅读,您将能够以与docker compose类似的方式轻松使用多个docker容器

谢谢你的回答。他们的方式似乎假设您直接部署到VM,而
docker
只是用于运行支持服务。我正在部署容器,我想构建容器并在刚刚构建的容器中运行我的单元测试,确保环境奇偶性,这是容器的一个主要优点。我让docker通过
docker:bind
运行,当时我正在使用
docker compose
打开我的环境并执行我的测试。但是看起来我得先算出原始的
docker
命令,然后把它们放到
make
或者别的什么东西里。令人沮丧。没错,你需要执行“原始”docker命令,比如docker build和docker push。我认为docker compose的主要用途是开发环境,易于安装,易于编写,一个文件。但是,在CI服务器上,您希望构建、推送、测试和发布容器,这是一个不同的场景,因此使用不同的工具。对于生产,现在大多数人使用Kubernetes,重点是扩展、管理、监控。。。这就是为什么docker compose不支持CI或生产/云使用的原因。顺便说一下,我也有同样的想法,为什么不在我想要的任何地方使用docker compose。我花了很长时间才发现为什么这不是一个听起来那么好的主意,主要是因为不同的需求。谢谢你,但是我对必须弄清楚
docker compose
如何处理
docker
感到非常沮丧。尤其是网络的东西,似乎是一个不断变化的状态,我已经完全失去了正在发生的事情的轨道。。。