The default version of PHP for your project is defined by the Magento version according to Magento System Requirements for Magento 2.4 and Magento 2.3.
PHP to Magento version mapping will look like this:
To change the PHP version, select the PHP version from the PHP Images section and then the PHP version with Magento extensions.
For example, you have Magento 2.4.8 project and you want to use PHP 8.4. The configuration file cma.js will look accordingly:
After changing the configuration, restart the app to install the new PHP version:
And validate the new PHP installation through the CLI:
Also, the PHP version will be printed during start command execution:
Installing PHP extensions
Some extensions have a separate package that can be integrated into cma.js like ionCube extension!
By default, only the extensions that are required by Magento are installed. If you need to install any additional extensions, cma.js will have to be changed accordingly.
This will install a PHP calendar extension. Restart the app for changes to take effect:
And validate newly installed extensions through the CLI:
Complex extension installation
If extension is not available in the Supported Extension list, then you can define your custom command to install the extension from pecl.
All of this might look complicated, but this object describes the following information for magento-scripts:
PHP Extension name. Defined in configuration.php.extensions as a key for configuration object.
Command to install the extension inside the project image. Defined in configuration.php.extensions[name].command as a string or as a synchronous function that returns a string or asynchronous function that returns a string. Optional.
Dependencies required by the extension. Defined in configuration.php.extensions[name].dependencies as an array of strings. Optional.
The current example defines that memcached extension requires 2 dependencies to be installed from apk repository: libmemcached-dev and zlib-dev and a command to install the extension itself.
The command consists of 4 steps:
Removing build dependencies to save space inside the project image.
The command is written in one line because it will use one RUN instruction inside Dockerfile.
Dependencies for extensions are recommended to move to the separate dependencies property because they will be installed together with other dependencies from other extensions in one RUN instruction inside Dockerfile.
After you made your changes restart the app for changes to take effect:
And validate newly installed extensions through the CLI: