我还没有找到一种优雅而有效的方法来在基于Docker的本地开发环境中运行Laravel Artisan命令。
是否有人建议推荐或"正确"做迁移的方法吗?
或者,是否有人找到了这样做的简洁方法?理想情况下有示例或建议。
我考虑过的事情:
我仍然围绕着Docker和它的新容器换一切方法。
我想我想要平衡很酷的开发操作,以及为什么我需要另一个假的服务器 - 只是让它正在工作 -
我很乐意为我的开发工作流承诺,但在某些情况下使用它似乎很尴尬,比如这个......
欢迎任何建议和想法。谢谢大家。
答案 0 :(得分:10)
Docker 1.3带来了新命令 exec 所以现在你可以“输入”运行容器,如
docker exec -it my-container-name /bin/bash
之后,您可以运行任何您想要的命令
php artisan --version
答案 1 :(得分:9)
关于Docker的最佳实践是在其自己的容器中运行每个进程。因此,运行artisan
命令的理想方法是创建一个专门用于创建容器的映像。
我创建了一个可以从Docker Hub dylanlindgren/docker-laravel-artisan
中提取的图像,它运行得非常好。如果您想查看其背后的Dockerfile
,它也在GitHub上。
我还写了一篇blog post来描述所有这些单独容器的组合方式。
答案 2 :(得分:1)
有几种可能性......
在容器中挂载主机目录作为Laravel应用程序所在的文件夹。这样您就可以从主机运行php artisan migrate
或composer update
。但是,您可能会遇到部署问题,因为您必须在服务器上复制环境的这一部分。
在您的容器中添加SSH服务器(不推荐使用; here's a good discussion of that)。
构建并使用nsenter,一种用于“输入”正在运行的容器并获取shell访问权限的工具。请注意,我还没有使用它,我刚刚通过上面链接中的引用找到了它。
如果您主要对部署感兴趣并且通过dockerfile进行部署,那么答案就是将composer install
和php artisan migrate
添加到dockerfile中,以便它们在构建容器时运行
我有兴趣听到更多答案。这也是我刚刚进入的内容,并希望了解更多信息。
答案 3 :(得分:1)
我使用SSH并从容器内的终端运行迁移。
我个人喜欢Phusion's使用Docker作为'lightweight virtual machine'的方法。因此,我使用了我已扩展的baseimage-docker来创建自己的Docker image for Laravel applications。
我知道Phusion的图像可能在Docker社区中引起争议,而SSH is frowned upon则是一些主张Docker容器作为微服务的人。但是,在为多容器方法提供更多既定工具和实践之前,我对Phusion的方法感到满意。
答案 4 :(得分:0)
我正在设法为Laravel项目创建Docker映像,这是我到目前为止的工作。
FROM base_image_with_LAMP_stack_and_dependencies
WORKDIR /var/www/html/app
COPY composer.json composer.json
RUN composer install --no-scripts --no-dev --no-autoloader
COPY . .
RUN echo 'chown -R www-data:www-data /var/www/ \
&& composer dump-autoload \
&& cp .env.example .env \
&& php artisan key:generate \
&& php artisan migrate \
&& apachectl -D FOREGROUND' >> /root/container_init.sh && \
chmod 755 /root/container_init.sh
EXPOSE 80
CMD /root/container_init.sh
这样,在构建期间就不会依赖数据库,并且每次启动新容器时都可以运行迁移过程。