【问题标题】:Docker port binding using gitlab-ci with gitlab-runner使用 gitlab-ci 和 gitlab-runner 进行 Docker 端口绑定
【发布时间】:2016-12-15 12:10:02
【问题描述】:

我在配置 gitlab-ci 和 gitlab-runner 时发现了一个问题。

我希望在一台服务器上拥有几个独立的应用程序环境,在其他外部端口上运行,但使用相同的 docker 映像。

我想要达到的目标

  • deploy-dev 在容器中的端口 80 上运行 Apache,但在外部端口 81
  • deploy-rc在容器中的端口 80 上运行 Apache,但在外部端口 82

我看到docker run--publish 参数,它允许端口绑定,如80:81,但不幸的是我在gitlab-ci.yml 或gitlab-runner 的config.toml 中找不到任何选项来设置它论据。

gitlab-runner 运行的 Docker 中有没有办法实现端口绑定?

我的gitlab-ci.yml

before_script:
# Install dependencies
- bash ci/docker_install.sh > /dev/null

deploy:
  image: webdevops/php-apache:centos-7-php56
  stage: deploy
  only:
    - dockertest
  script:
    - composer self-update
    - export SYMFONY_ENV=dev
    - composer install
    - app/console doc:sch:up --force
    - app/console doc:fix:load -e=dev -n
    - app/console ass:install
    - app/console ass:dump -e=dev
  tags:
    - php

【问题讨论】:

  • 您能否准确说明您是如何使用 gitlab runner 进行部署的?你的 gitlab-ci.yml 目前有什么?
  • @Matthew 添加了我的gitlab-ci.yml的内容
  • 谢谢。实际的 docker 工作在做什么仍然不明显——是在 app/console doc:sch:up 步骤中吗?这是你的剧本吗?它有什么作用?
  • 其实是apache/php应用的部署脚本。它正在创建所有需要配置的东西,然后我只依赖 apache,它在集合中并在 docker 映像中运行
  • 啊哈 - 所以基本上该脚本的最后一部分会永远运行?或者至少在某些事情阻止它之前?

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


【解决方案1】:

您混淆了两个概念:持续集成任务和 docker 部署。

您配置的是一项持续集成任务。这个想法是这些执行构建步骤并完成。 Gitlab-ci 将记录每个构建步骤的结果并将其呈现给您。这些本身可以是 docker 作业,尽管它们不一定是。

您要做的是部署到 docker。也就是说你要启动一个包含你的程序的 docker 作业。经历这可能超出了堆栈溢出答案的范围,但我会尽力概述您需要做什么。

首先获取您已有的脚本,并将其转换为 dockerfile。您的 dockerfile 将需要在您的存储库中添加所有代码,然后执行您列出的作曲家/控制台脚本。使用docker build 将这个 dockerfile 变成一个 docker 镜像。

接下来(可选)您可以将 docker 映像上传到存储库。

最后一步是执行docker run 命令来加载您的图像并运行它。

这听起来很复杂,但事实并非如此。我有一个执行此操作的 ci 管道。一步运行:docker build ... 后跟 docker push ...,下一步运行 docker run ... 以生成新容器。

【讨论】:

    猜你喜欢
    • 2017-10-28
    • 2017-05-24
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-06
    • 1970-01-01
    相关资源
    最近更新 更多