安装了PHP,Composer和Docker的Docker镜像

时间:2018-02-17 09:03:33

标签: docker gitlab-ci gitlab-ci-runner

我使用共享的docker runners将Gitlab.com用于我的CI。我有一个需要安装PHP和composer的项目,同时还需要docker来构建项目的docker镜像。

我已经尝试了几个小时来构建一个安装了PHP,编写器和docker的docker镜像,但我似乎无法弄明白。

作为参考,我的gitlab-ci.yml文件看起来像这样;

image: docker:latest

variables:
  DOCKER_DRIVER: overlay2

services:
  - docker:dind

composer:install:
  stage: build
  artifacts:
    paths:
    - /
    expire_in: 1 week
  script:
    - docker run --rm --interactive --tty --volume $PWD:/app composer install

build:image:
  stage: build
  dependencies:
    - composer:install
  script:
    - docker login registry.gitlab.com -u $REGISTRY_USERNAME -p $REGISTRY_PASSWORD
    - docker build -t registry.gitlab.com/accountname/projectname/develop .
    - docker push registry.gitlab.com/accountname/projectname/develop

使用下面Stefan提供的示例构建脚本,我将以下构建文件放在一起,看起来效果很好。它使用项目Dockerfile构建项目,并将生成的图像推送到我的Gitlab存储库。

image: docker:latest

variables:
  DOCKER_DRIVER: overlay2

services:
  - docker:dind

before_script:
  - docker run --rm --volume $PWD:/app composer install

build:image:
  stage: build
  script:
    - docker login registry.gitlab.com -u $REGISTRY_USERNAME -p $REGISTRY_PASSWORD
    - docker build -t registry.gitlab.com/accountname/projectname/develop .
    - docker push registry.gitlab.com/accountname/projectname/develop

1 个答案:

答案 0 :(得分:0)

您应该使用2个作业CI并使用Gi​​tlab提供的artifact功能在作业之间将composer install结果作为dependencies传递。

您的第一份工作(composer:install)可能会在您的脚本部分使用类似https://hub.docker.com/r/library/composer/的内容来安装所有编写器程序包,然后将其传递给构建Docker镜像的build:image作业。

这大致如下:

image: docker:latest

variables:
  DOCKER_DRIVER: overlay2

services:
- docker:dind

composer:install:
  stage: composer
  artifacts:
    paths:
    - /
    expire_in: 1 week
  script:
  - docker run --rm --interactive --tty --volume $PWD:/app composer install

build:image:
  stage: build
  dependencies:
  - composer:install
  script:
  - docker build -t myimage:latest .

Dockerfile可能是这样的(基于this):

FROM php:7.0-cli
COPY . /usr/src/myapp
WORKDIR /usr/src/myapp
CMD [ "php", "./your-script.php" ]