【问题标题】:How to "dynamize" Dockerfile / Docker Compose?如何“动态化” Dockerfile / Docker Compose?
【发布时间】:2018-09-22 07:31:14
【问题描述】:

我正在对遗留的 PHP 项目进行 Dockerizing。我想在开发环境中启用 Xdebug,并且我的 Dockerfile 将预先构建的 php.ini 复制到容器中。

由于一些网络问题,我们必须在 Mac OS X 上使用 xdebug.remote_connect_back = 0(以及在 Linux 上对应的 xdebug.remote_host = docker.for.mac.localhost)和 xdebug.remote_connect_back = 1

是否可以在 Dockerfile/Docker Compose 中获取当前操作系统类型以复制与主机操作系统对应的 php.ini?

【问题讨论】:

    标签: php docker docker-compose xdebug


    【解决方案1】:

    docker-compose.yml 中使用volumes described here。在 config 文件夹(或任何位置)中创建 php.linux.iniphp.mac.ini 并将其中一个映射到容器:

    services:
      php:
        image: php
        volumes:
          - ./config/php.linux.ini:/etc/php.ini #or wherever the config is
    

    当然,您的用户必须手动将php.linux.ini 更改为php.mac.ini,但这是一次性手动更改。

    【讨论】:

      【解决方案2】:

      该信息在映像构建时不(也不应该)可用。相同的基于 Linux 的映像可以在本机 Linux、Mac 上的 Linux VM(然后是 Docker Machine VM 或 Docker for Mac 提供的隐藏 VM)、Windows 上的 Linux VM 甚至 Linux 上的 Linux VM 上运行,不管它最初是在哪里建造的。

      应在容器运行时提供主机名等配置。环境变量是执行此操作的典型方式,也可以使用 Docker 卷机制从主机推送配置文件。

      如果您的问题纯粹是围绕调试您的应用程序,您还可以在主机上设置完整的开发环境,并且只在您的映像中构建运行它所需的内容。生产环境。

      【讨论】:

        【解决方案3】:

        我决定使用 Docker Compose 读取.env 文件的能力。整个工作流程如下:

        • 创建.env.sample 文件,所有行都已注释(抱歉,无法正确显示注释行) OS=windows OS=linux OS=mac
        • 通过将/.env 行添加到.gitignore 文件来忽略.env 文件

        • 使用$ cp .env.sample .env 复制示例文件,并保留与您的操作系统相对应的一行不注释

        • 将 php.ini 的特定于操作系统的 Xdebug 相关部分移动到单独的文件中,名称为 xdebug-mac.inixdebug-windows.inixdebug-linux.ini 等。

        • 添加到docker-compose.yml args 部分以选择具有- OS=${OS} 等值的服务

        • 在对应的Dockerfile添加行: ARG OS=${OS} COPY ./xdebug-${OS}.ini /usr/local/etc/php/conf.g/

        .env 中提到的操作系统值将在构建映像时扩展

        • 执行$ docker-compose up -d --build构建镜像并启动容器

        • 成功提交所有更改,让您的同事在任何平台上正确设置 Xdebug;不要忘记告诉他们从模板中创建自己的.env 文件实例

        【讨论】:

          猜你喜欢
          • 2021-08-21
          • 1970-01-01
          • 2019-11-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-09-23
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多