不安装源代码的用于symfony和nginx的Docker

问题描述

我们有一个开发和生产系统,该系统使用在docker环境中运行的symfony 5 + Nginx + MysqL服务。 由于此问题,目前Nginx Web服务器在与symfony服务相同的容器中运行:

  • 在我们的开发环境中,我们能够将symfony源代码挂载到docker容器中(通过docker-compose文件)。
  • 在生产环境中,我们需要交付包含所有内部源代码的容器,因为我们不能将源代码放置在服务器上。因此,服务器上没有文件夹可用来挂载源代码。 不幸的是,Nginx也需要源节点来做出路由决策,因此我们决定将symfony和Nginx服务放到一个容器中。

现在,我们希望通过在其自己的容器中运行每个服务来对其进行清理,以获得更好的解决方案:

version: '3.5'
services:
    PHP:
        image: docker_sandBox
        build: ../.
        ...
        volumes:
            - docker_sandBox_src:/var/www/docker_sandBox // <== VOLUME
        networks:
            - docker_sandBox_net
        ...
    Nginx:
        image: Nginx:1.19.0-alpine
        ...
        volumes:
            - ./Nginx/server.conf:/etc/Nginx/conf.d/default.conf:ro
            - docker_sandBox_src:/var/www/docker_sandBox  <== VOLUME
        ...
        networks:
            - docker_sandBox_net
        depends_on:
            - PHP
    MysqL:
        ...
volumes:
    docker_sandBox_src:
networks:
    docker_sandBox_net:
        driver: bridge

一种可能的解决方案是使用将Nginx服务与symfony服务连接的命名卷。这样做的问题是,在更新我们的symfony图像时,音量会保留旧的更改。因此,只有在我们手动删除该卷之后,才能进行更新。

是否有更好的方法解决此问题?可能是一个在部署新映像时能够覆盖其内容的卷。或不需要在其自己的容器中使用symfony源代码Nginx配置。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)