What are PHP Command Line applications?
As the name suggests, its an application that is being run in terminal or command prompt. Usually to perform some CPU intensive background task that executes way too long to run directly via browser.
These kind of real-world applications requires more than the php executable itself, but comes with requirements such as:
- curl, json, mbstring, mcrypt, mysql and other php extensions
- Composer to fetch the dependencies of the application
- Git so that Composer can function properly
- Basic editing tool such as vim
- Basic mysql client
Sometimes, due to high amount of data that needs to be processed, you might need to scale out the processing into multiple machines. Most of the time, those machines has "something else" also installed. Like a RoR application, a Memcached daemon or at worst cases, a legacy application that has very old PHP version installed, which makes installation of Composer for example, not possible.
Wouldnt it be great if there is a way to deploy your application into multiple environments and ensure all those tools and dependencies you need can be automatically installed in the target machines, while at the same time ensuring it wont conflict with the existing stuffs there?
In simple terms, you can think of Docker as an extremely lightweight virtual machine. Though its not exactly like that in lower level, but that is the idea - be able to run isolated processes in the same server w/o conflicting to each other.
You can get Docker in here and make sure you have docker and docker-compose commmands installed.
Once installed, you should create a docker-compose.yml file at the root of your project
and then, create another file called
You are now good to go! just hit up the following command to start fetching all the dependencies
This will start fetching the base image php-production-cli which is basically a pre-built Docker Container that is specialized for running PHP command line applications.
This might take a while for the first time, but should be extremely fast the next time you do need to have another project which uses the same dependency.
Once everything is finish downloading. You can now execute your PHP command line application by
This will open a new terminal inside the container. The container has now everything you need to execute your php app! that is, ranging from Composer, Git, PHP extensions, vim, mysql clients etc.
That means, regardless of you are in a server, local PC, Mac or Windows. You'll only need two commands and voila, you have an instant environment for PHP application.