gpt4 book ai didi

php - 生产环境中的 Docker 和包管理器

转载 作者:行者123 更新时间:2023-12-02 19:13:11 25 4
gpt4 key购买 nike

我正在开发一个我想使用 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 钩子(Hook),它将触发在 quay.io 上构建此 dockerfile 并将我的源代码添加到图像中。

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

我看到了两种我都觉得不理想的解决方案。
  • 将依赖项添加到版本控制。
  • 运行命令composer install拉入所有文件。如上所述不是优选的。

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

    最佳答案

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

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

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

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

    关于php - 生产环境中的 Docker 和包管理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30644087/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com