【问题标题】:Docker and package managers in production生产环境中的 Docker 和包管理器
【发布时间】:2015-08-19 01:54:12
【问题描述】:

我正在开发一个我希望使用 docker 容器运行的 PHP 应用程序。我正在使用composer 包管理器,它引入了所有依赖项。除依赖项外,所有代码都保存在 git 存储库中。

为了让所有东西都在我的本地机器上运行,我使用了 docker-compose(图)。我将我的应用程序代码(包括供应商文件夹)安装到容器上的卷中。这是我的 docker-compose.yml 文件。

nginx:
    image: nginx:1.9
    links:
        - php
    volumes:
        - conf/nginx/default.conf:/etc/nginx/conf.d/default.conf
        - src:/var/www/html
    ports:
        - "80:80"
php:
    image: php:5.6.9-fpm
    links:
        - memcached
    volumes:
        - conf/php/php.ini /usr/local/etc/php/php.ini
        - src:/var/www/html
    volumes_from:
        - nginx

我不太明白如何将其推入生产或暂存环境。据我了解,最好将所有东西都放在一个容器中,而不必运行包管理器,因为这可能会失败,或者这些包可能与我本地机器上的包不同。所以我想出了以下 docker-compose.yml 文件:

webapp:
    image : quay.io/myusername/myrepo
php:
    image: php:5.6.9-fpm
    volumes:
        - config/php/php.ini /usr/local/etc/php/php.ini
    volumes_from:
        - webapp
nginx:
    image: nginx:1.9
    links:
        - php
    volumes:
        - config/nginx/default.conf:/etc/nginx/conf.d/default.conf
    volumes_from:
        - webapp
    ports:
        - "80:80"

webapp 容器是从以下 dockerfile 构建的,并托管在某个存储库中。

FROM busybox

VOLUME /var/www/html
ADD src /var/www/html

我有一个 git 钩子,它将触发在 quay.io 上构建此 dockerfile 并将我的源代码添加到图像中。

问题是:供应商文件/依赖项不在版本控制中,因此不会被添加。

我看到了两个我都觉得不理想的解决方案。

  1. 将依赖项添加到版本控制。
  2. 运行命令composer install 拉入所有文件。如上所述不是优选的。

我对 docker 还是很陌生,所以可能是我搞错了。很想得到一个答案如何正确地做到这一点。

【问题讨论】:

    标签: php docker composer-php docker-compose


    【解决方案1】:

    您的Dockerfile 应该构建容器映像,就好像没有安装卷一样。克隆或复制容器中的代码,运行 composer 安装依赖项。运行没有任何卷的容器应该可以工作。

    生产环境中的卷主要用于持久化数据和日志。您的代码不应位于已安装的卷中。

    出于开发目的,您可以将卷挂载到代码位置,您的容器仍然可以工作。

    要加快构建过程,请先复制 composer.json 和 composer.lock 文件,然后将依赖项安装到源代码树之外的位置。它将确保依赖项仅在您的 json 文件更改时更新,而不是在每次代码更改时更新,从而极大地加快进程。

    【讨论】:

    • 作为一个小提示,在生产中composer.lock 文件应该始终与命令composer install 一起使用,因为这将确保安装与您上次提交锁定文件时相同的依赖项:)
    猜你喜欢
    • 1970-01-01
    • 2019-10-14
    • 1970-01-01
    • 2020-09-26
    • 2013-06-23
    • 2013-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多