要么我错过了什么,要么整个链条缺少什么。
这是我的假设:
开发中容器化的全部目的是降低环境设置的成本,并创建一个包含所有所需部件的准备好的映像。
所以,当我读到Laravel-Sail正在通过容器化安装Laravel时,我很兴奋。因此,我通过他们的说明安装它,一切都正常。
然后问题就开始了。因为:
- 成功安装后,我创建了一个
git
repo,使用GitHub的默认laravel.gitignore
- 然后我将新安装的laravel应用程序
push
放入我的git repo中 - 然后我请开发人员开始开发。请注意:
- 他没有安装PHP
- 他没有安装Composer
- 他克隆repo,并根据安装指南运行
./vendor/bin/sail up
- 但
./vender
文件夹已正确排除在.gitignore
中 - 因此,他的指挥结果是:
bash:/vendor/bin/sail:没有这样的文件或目录
- 他当然在谷歌上搜索了一下,发现人们建议运行
composer update
- 他去安装composer,然后在那个PHP之前,然后是PHP的所有扩展程序,然后
我错过了什么吗?容器化的全部意义在于不在本地安装所需的环境。
运行laravel应用程序的正确方式是什么,而不是从https://laravel.build,但是是从git repo中克隆的,WITH是否本地安装了PHP或Composer?
更新
我找到了Bitnami laravel码头工人,这正是集装箱应该是什么。
您是对的,其他开发人员不需要安装php或composer。他/她所需要的只是在本地机器上安装Docker。
如果你用Laravel官方文档中"入门"部分提到的内容构建了项目,那么你的项目根目录中就会有一个docker-compose.yml文件。
对于Windows
对于Linux
对于Mac OS
git克隆存储库后,开发人员所要做的就是运行
docker-compose up --build -d
就是这样。
对于那些正在努力解决这个问题的人。。。我找到了一个非常好用的命令。
首先,您不需要在本地安装任何PHP或Composer,也许对此有误解,您只需要Docker。
Docker会为每个项目安装你需要的一切,我知道这就像一个沙盒,而不是本地的。
对于那些下载的项目,例如从GIT,它没有vendor
文件夹,显然不能执行sail up
,你可以简单地执行:
docker run --rm --interactive --tty -v $(pwd):/app composer install
该命令将为docker下载一个composer镜像,如果您还没有的话。然后,将运行composer install
,如果您没有配置别名,则可以自由执行./vendor/bin/sail up
;如果您已经配置了别名,则仅执行sail up
。
仅此而已。
官方文档列出了以下命令。
docker run --rm
-u "$(id -u):$(id -g)"
-v $(pwd):/var/www/html
-w /var/www/html
laravelsail/php81-composer:latest
composer install --ignore-platform-reqs
如果您要克隆一个Laravel项目并在项目根目录中运行此命令,它将创建一个安装了php和composer的非常小的容器,并在项目根部运行composer以安装所有php依赖项。实际上,这将Laravel核心代码安装到克隆的项目中。一旦项目以这种方式设置,用户就应该创建一个本地.env
文件来匹配他们的开发环境。
cp .env.example .env # creates a .env file to be populated for the local environment
设置好环境后,他们现在可以在docker中创建应用程序容器并运行应用程序。拉拉威尔为此提供了水手助手。
./vendor/bin/sail up -d # runs the docker containers in detached mode
现在的问题是设置laravel应用程序并运行laravel应用。(我假设该应用程序使用了一个依赖Node.js的Laravel启动套件。如果你使用的是仅限刀片的应用程序,你可以跳过"npm"命令。)
sail artisan key:generate # (Best Practice) Generate a new application key on each machine
sail artisan migrate # Scaffold the database structure
sail artisan db:seed # (Optional) Seed the database with data
sail npm install # (Optional) Install front-end dependencies (Inertia, Vue, React, others...)
sail npm run dev # (Optional) Run the front-end framework in development mode
这样,新的开发人员应该像原来的开发人员一样运行项目和开发环境的精确副本。
您的项目README可能包括设置其他依赖项的额外步骤,但这是为Laravel项目做出贡献的基本工作流程。
此工作流的唯一先决条件是安装带有Internet连接的Docker。这在Windows、Mac和Linux上最容易通过安装Docker Desktop来实现。
替代旧项目
如果您正在处理一个不使用Laravel-Sail的旧项目,但有的docker-compose.yml
文件,那么您应该能够使用以下命令构建和运行必要的容器。
docker-compose up --build -d
一旦运行了容器,就需要将项目依赖项直接安装到容器中。
docker ps # find the container ID of your project's container
docker exec -it CONTAINER_ID php artisan key:generate
docker exec -it CONTAINER_ID php artisan migrate
docker exec -it CONTAINER_ID php artisan db:seed
docker exec -it CONTAINER_ID npm install
docker exec -it CONTAINER_ID npm run dev
当然,Docker Desktop简化了这个过程。只需单击一个按钮,就可以在容器中直接打开终端外壳,从而无需使用docker exec
命令。