目前我正致力于以下解决方案:
开发环境:
将整个src添加为volume:
volumes:
- .:/app
initial composer install command
docker-compose exec app composer install
install new composer package:
docker-compose exec app composer require some/package
该软件包将通过您的composer软件包目录中的容器安装(当然默认为/ vendor),可以在您的ide中检查源代码等 .
生产环境 环境:
仅将app状态定义为volume,例如:
volumes:
- public/uploads:/app/public/uploads
添加/供应商到.dockerignore
并在构建期间运行composer install
RUN cd /app && composer install --no-dev --no-interaction --optimize-autoloader
因此,您将部署预先构建的映像,但仍能够以更灵活的方式进行开发 .
这个解决方案还有两个缺点,也许有人为我输入:
1)构建变得有点慢 - 似乎作曲家缓存无法正常工作
解决方案(我不知道在编写器中是否可行)可以是作曲家缓存目录的卷 .
2)docker创建的所有包都归root所有,因此您只能使用sudo / root会话处理这些文件/文件夹 .
我不知道如何妥善解决这个问题 . 也许我可以为开发容器创建一个具有开发用户名称的用户,并让这个用户运行命令和php-fpm等...对于 生产环境 root,我猜是好的 .
我仍然是码头 Worker 的新手,并且开放以获得更好的解决方案,所以我不接受这个答案 .
UPDATED
在 Dockerfile 中在docker用户中添加新用户 . 如下
RUN useradd -ms /bin/bash newuser
USER newuser
如果你想创建家庭用户
WORKDIR /home/newuser
要么
mkdir /home/newuser
如果你想回到root用户,你可以这样做
USER root