- PhpStorm & Docker Integration Configuration
- Working with Docker in PhpStorm
First of all, you'll need to install Docker and related tools so that you can take advantage of the Docker integration in PhpStorm. Please refer to the Docker documentation to get more information about the installation process:
- Installing Docker engine on Windows;
- Installing Docker engine on Mac OS X;
- Installing Docker engine on Linux (Ubuntu, other distributions-related instructions are available as well);
- You can also install Docker on various cloud platforms (e.g. read tutorials on installing Docker on Amazon EC2, Google Cloud Platform, and Microsoft Azure).
PhpStorm & Docker Integration Configuration
Docker plugin is bundled in PhpStorm since 2016.3.
Prerequisites for Mac for PhpStorm 2016.3 and below.
Use the standard MacOSX terminal to execute a socat TCP-LISTEN:2375,reuseaddr,fork,bind=localhost UNIX-CONNECT:/var/run/docker.sock command to allow older versions of PhpStorm to connect to Docker;
Note: Since PhpStorm 2017.1 you can connect via Unix socket directly.
Configuring PhpStorm to work with Docker
- Open Settings / Preferences | Build, Execution, Deployment | Docker and create Docker configuration with a + button.
- Apply the configuration and close the Settings / Preferences dialog.
- Create a new Docker Deployment Run/Debug Configuration invoking the dialog from the Run | Edit configurations... menu:
Then, create a Docker Deployment configuration with a + button:
Provide all the necessary parameters on the Deployment tab. In our case we've provided Run/Debug Configuration Name (Start Docker in our case), selected the server (Docker), selected the Deployment method to be Dockerfile, provided Image tag (mysite) and Container name (Docker_Xdebug):
Provide all the necessary parameters and configurations on the Container tab. At this point we are interested in exposing port 80 of the container to be available from our local machine, so we should configure a port binding for that (Container port: 80, Protocol: tcp, Host IP: empty, Host port: 8080):
In addition, we can configure links, volume bindings, environment variables, and much more.
- Apply the Run/Debug Configuration and close the dialog.
Working with Docker in PhpStorm
Running the Docker from PhpStorm
As all the tools are installed, and the integration is configured, the recently created Start Docker Run/Debug Configuration can be launched:
The Application Servers tool window will be opened updating you on the provisioning status and current state of all your Docker containers:
As soon as the process is completed, and our Docker_Xdebug container status turns green, we can check how it works in the browser. You should be able to open it by the URL http://localhost:8080/. If you can't see the index.php execution results in the browser (containing phpinfo(); in our case), please check that you have specified the correct port bindings on the previous steps.
In our example, everything is running fine on the port we've expected the web app to be:
Managing Docker containers and other Docker-related actions in PhpStorm
From the Application Servers tool window, it’s easy to inspect containers and view running processes. You can also search through logs, start and stop containers, and perform basic container management like creating and deleting containers. Each deployment in Docker is assigned a unique container ID - these are initially temporary containers, although they can be committed and saved for further distribution. On the Docker Hub registry, there are many such images available for you to try.
Images in Docker are read-only - once committed, any changes to a container’s state will become part of a new image. When you have a stable build on one instance of Docker (on your development machine, staging server, or a cloud), reproducing the exact same build is as simple as (1) committing the Docker container, (2) pushing it to a registry (public or private), then (3) pulling the same image to another instance of Docker, running - wherever.
Debugging the PHP web application running in the Docker container
Assuming that you already run the Docker container now (and everything worked well on the previous steps), you should now able to open your PHP web application in the browser by http://host:port URL (http://localhost:8080/ in our case). The major difficulty in getting Xdebug (or Zend Debugger) working with PhpStorm and Docker integration is the correct configuration of the Docker container.
In our case we're using a Dockerfile (we've already shown this config earlier and provided links to download it) to configure the container, including Xdebug-specific parameters, such as:
In the example above we're modifying /etc/php/7.0/apache2/php.ini providing a path to Xdebug extension, and some other Xdebug parameters (remote_enable and remote_host). Please note that xdebug.remote_host value should be replaced with your local machine IP address which is visible from the Docker container (where PhpStorm is running, 192.168.2.117 in our case).
Don't forget to re-run Start Docker Run/Debug Configuration so that all the changes are applied.
As soon as all the configs are in place, the debugging process can be triggered following this tutorial from step 2 (start Listening for PHP Debug Connections, set a breakpoint in the source code, start a debug session in the browser, reload the current page, debug) to get the debugger up and running in a few moments: