Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: socat changes

Redirect
locationhttps://www.jetbrains.com/help/phpstorm/docker.html
delay2

Include Page
Social Buttons PhpStorm
Social Buttons PhpStorm

 

Info

Image AddedDocker is an open platform for building, shipping and running distributed applications. It gives programmers, development teams and operations engineers the common toolbox they need to take advantage of the distributed and networked nature of modern applications.

This tutorial describes Docker support in PhpStorm, which includes debugging PHP web applications (running in the Docker container), inspecting, managing containers and viewing running processes.You can also search through logs, start and stop containers, and perform basic container management.

Table of Contents

Prerequisites

...

Docker integration plugin installation

You will also need to install the plugin in PhpStorm. Open Settings (Preferences) | Plugins, and click the Install JetBrains plugin... button:

Image Removed

Search for Docker and install the Docker Integration plugin by using the context menu.

Image Removed

Restart the IDE to complete the installation of the plugin.

PhpStorm & Docker Integration Configuration

At this point you have Docker and Docker plugin for PhpStorm installed, so we can start with integration configuration.

Launching default docker machine and getting necessary parameters

  1. Open the "Docker Quickstart Terminal"
  2. Docker will launch a default VM providing output in the console:
    Image Removed 
  3. Run docker-machine env default to get necessary parameters, as we'll need them later for configuration of the PhpStorm (such as DOCKER_HOST and DOCKER_CERT_PATH):
    Image Removed

 

PhpStorm & Docker Integration Configuration

Docker plugin is bundled in PhpStorm since 2016.3.

Prerequisites for Mac for PhpStorm 2016.3 and below.

  1. 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;

    Info
    iconfalse
    1. install socat as described at http://macappstore.org/socat/
    2. run  socat TCP-LISTEN:2375,reuseaddr,fork,bind=localhost UNIX-CONNECT:/var/run/docker.sock
    3. enter  tcp://localhost:2375  as an API URL in IDE
    4. (note: you may use any other port instead of 2375)


    Note: Since PhpStorm 2017.1 you can connect via Unix socket directly.

Configuring PhpStorm to work with Docker

  1. Open Settings / Preferences | Build, Execution, Deployment | CloudsDocker and create Docker configuration with a + button:.
    Image Removed

  2. Please note that you might need to provide a socket path in the API URL field on Linux machines instead of the URL (usually it's

    You need to should provide the configuration name (Docker in our case), API URL (httpstcp://192.168.99.100:2376 in our case, taken from the previous step console output, please note the protocol change), Certificates folder (/Users/mikhailvink/.docker/machine/machines/default in our case):
    Image Removed 

    Info

    localhost:2375 for Windows and for Mac OS X if using PhpStorm older than 2017.1, unix:///var/run/docker.sock

    ):

    Image Removed

     for Mac OS X and Linux). 

    Image Added

     

  3. Apply the configuration and close the Settings / Preferences dialog.
  4. Create a new Docker Deployment  Run/Debug Configuration invoking the dialog from the Run | Edit configurations... menu:

    Image Added

    Then, create a Docker Deployment configuration with a + button:

  5. Provide all the necessary parameters on the Deployment tab, in . 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,  Image provided Image tag (mysite) , and Container name (Docker_Xdebug):

     

  6. Provide all the necessary parameters and configurations on the Container tab. At this point we are interested in exposing port 80 port 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.

  7. Apply the Run/Debug Configuration and close the dialog.

 

Info

At this step it's important to note that that there are many ways to create/configure Docker containers and VM images, and we'd recommend to always refer to the Docker documentation on the official web site.

For the purposes of this tutorial we're using Dockerfile and Apache configuration file, we. We've also created an index.php file with phpinfo(); to be deployed to the Docker container. We're making some significant configuration in those Dockerfile and Apache configuration file, so you're recommended to have a look at them. You can download entire project used in this demo or separate config files ( apache-config.conf , Dockerfile ) which then need to be placed in the project root folder.

Image RemovedImage Added

Working with Docker in PhpStorm

Running the Docker from PhpStorm

As all the tools are installed, and the integration is configured, the recently created Docker start 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: (view gif showing a full process)Image Removed 

Image Added

As soon as the process is completed, and our Docker_Xdebug container status turned turns green, we can check how it works in the browser. You should be able to open it by the URL similar to httphttp://192.168.99.100localhost:8080/ (192. 168.99.100 is an IP address of the default Docker machine, we've looked into where to get this parameter before). If you can't see the index.php php execution results in the browser (containing phpinfo(); in our case), please check that you have specified the right IP address and correct port bindings on the previous steps.

In our example, everything is running fine on the right portport we've expected the web app to be:

Image RemovedImage Added 

Operating

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), so you should now able to open your PHP web application in the browser by httpby http://host:port URL (http://192.168.99.100localhost:8080/ in our case). The major point in 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:

Code Block
#Set up debugger
RUN echo "zend_extension=/usr/lib/php5/20131226/xdebug.so" >> /etc/php5/apache2/php.ini
RUN echo "xdebug.remote_enable=1" >> /etc/php5php/7.0/apache2/php.ini
#Please provide your host (local machine IP) instead of 192.168.2.117
RUN echo "xdebug.remote_host=192.168.2.117" >> /etc/php5php/7.0/apache2/php.ini

In the example above we're modifying /etc/php5php/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 address which is visible from the Docker container (where PhpStorm is running, 192.168.2.117 in our case).

Configuration for Zend Debugger is similar, please see a full tutorial on installing Xdebug and installing Zend Debugger (there's much more information on required parameters and options).

Don't forget to re-run Docker Start 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 followed by 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:

Include Page
Social Buttons PhpStorm
Social Buttons PhpStorm