【问题标题】:Gitlab CI: mount Apache service Docker DocumentRoot directory into main DockerGitlab CI:将 Apache 服务 Docker DocumentRoot 目录挂载到主 Docker
【发布时间】:2016-11-19 10:07:48
【问题描述】:

每次推送时,gitlab-ci 都会启动我的主 docker my-deploy 并将代码克隆到 /builds 目录中。

现在我在上面添加了一个服务 docker my-apachemy-apache docker 设置为启动 apache 并使用 /shared/httpd/localhost 作为 apache 的 DocumentRoot。

基于项目的.gitlab-ci.yml 如下所示:

#
# This starts `my-deploy` docker and links an apache service docker...
#
testing:
    stage: deploy
    services:
        - my-apache:latest
    script:
        - curl $MY_APACHE_PORT_80_TCP_ADDR

现在我希望将我签出的代码(在目录/builds 中的my-deploy docker 内)挂载/链接到apache docker my-apache 到目录/shared/httpd/localhost 中。

挂载/链接应该是:

my-deploy:/builds -> my-apache:/shared/httpd/localhost

知道这是否可行以及如何配置?

我的 gitlab-runner 配置 (/etc/gitlab-runner/config.toml) 将 my-deploy 添加为跑步者,如下所示:

# Main Linter
[[runners]]
  url = "https://gitlab.mydomain.com/ci"
  token = "XXXXXXXXXXXXXXXXXXXXXXXX"
  name = "MY_DEPLOY"
  executor = "docker"
  limit = 0
  [runners.docker]
    image = "my-deploy:latest"
    privileged = false
    cache_dir = ""
    disable_cache = true
    wait_for_services_timeout = 90

更新:

gitlab如何做docker集成:

http://docs.gitlab.com/ce/ci/docker/using_docker_images.html#how-docker-integration-works

【问题讨论】:

    标签: docker mount gitlab-ci


    【解决方案1】:

    gitlab ci doc 包含在其[runners.docker] section

    volumes 
    

    指定应安装的其他卷(与docker run -v option 相同的语法:参见“Mount a shared-storage volume as a data volume¶”)

    确保定义一个公共卷,您将在my-deploys 中将其挂载为/build,在my-apache 中将/shared/httpd/localhost 挂载。

    这将使my-deploy:/build 中生成的数据在my-apache:/shared/httpd/localhost 中可见。

    这意味着:

    • 首先声明一个docker数据卷(在GitLab之外),用docker volume create
    • 其次,在 gitlab-ci.yml[runners.docker] 部分使用该音量

      volumes = ["my-named-volume:/build", "my-named-volume:/shared/httpd/localhost"]
      

    【讨论】:

    • 能否举个例子。
    • @lockdoc 我在答案中添加了文档、链接和语法示例。我担心(因为我还没有测试过),您在卷中声明了多个安装点,这意味着您的命名卷在每个服务中安装了两次。 (/build 中的一个,/shared/httpd/localhost 中的一个)。检查一下,看看您的两个容器是否在预期路径上共享相同的卷。
    • 所以我必须在Dockerfile 中定义VOLUME 才能创建一个公共目录吗?
    • @lockdoc 不,这是您手动执行一次的命令 (docker volume create)(您的 docker 守护程序所在的位置):它将保留一个您可以跨会话重用的卷。 (docker volume ls可以显示):docs.docker.com/engine/reference/commandline/volume_create
    • 在我的 /etc/gitlab-runner/config.toml 中,我在 docker 内的 [runners.docker] 部分下添加了 volumes = ["my-named-volume:/build", "my-named-volume:/shared/httpd/localhost"]。我的my-deploy/DockerfileVOLUME ["/builds"] 部分,我的my-apache/DockerfileVOLUME ["/shared/httpd/localhost"] 部分(每个都在最底部)。我唯一缺少的部分是如何生成卷文件并将其分配给机器人。
    猜你喜欢
    • 2019-02-08
    • 2022-08-10
    • 1970-01-01
    • 2016-06-10
    • 1970-01-01
    • 2018-04-27
    • 2016-11-10
    • 2021-07-04
    • 1970-01-01
    相关资源
    最近更新 更多