xdebug 디버깅 Docker로 구축된 PHP 환경(vscode)

7331 단어 PHPDockerVSCodexdebug

입문


docker가 구축한 PHP 환경에서 단계를 수행할 때의 단계입니다.
편집기는 vscode의 단계입니다.
사용한 docker는 docker for mac의 버전 18.06입니다.

이번에 설명 안 하는 거.

  • Docker 기본 사용법
  • vscode의 기본 사용 방법
  • 디렉토리 구조


    이것은 이번에 설정한 디렉터리 구조입니다.
    ├── docker
    │   ├── Dockerfile
    │   └── php.ini
    ├── docker-compose.yml
    └── src
        └── index.php
    

    문서 파일 구성


    Dockerfile을 쓰겠습니다.
    FROM php:7.2-apache
    
    RUN pecl install xdebug \
      && docker-php-ext-enable xdebug
    
    WORKDIR /var/www
    
    Dockerhub에서 보내온 PHP 공식에서 발표된 with apache를 사용합니다.
    거기에 xdebug를 설치합니다.
    또한 docker-php-ext-enable 에서pecl 확장 docker-php-ext-enable xdebug 을 사용할 수 있습니다.
    위의 작업을 수행함으로써/usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
    zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20170718/xdebug.so
    
    문서 레지스트리에 항목을 추가합니다.(컨텐츠는 개인에 따라 다를 수 있음)

    docker-compose.yml 설정


    compose 파일의version은 3.7이기 때문에 이에 상응하여 기술하였다.
    version: "3.7"
    services:
      php:
        build:
          context: ./docker
        ports:
          - "8081:80"
        tty: true
        stdin_open: true
        volumes:
          - ./src:/var/www/html
          - ./docker/php.ini:/usr/local/etc/php/php.ini
    
    volumes에 추가된 php.ini, 그러나 기본적으로docker는 php를 가지고 있습니다.ini가 없기 때문에 로컬 php입니다.ini를 만들어서 Docker에 추가합니다.
    이번 상황은 현지에서 쓴 php입니다.ini는 Dockerfile과 같은 위치에 있지만 변경하려면 경로를 변경합니다.
    php.ini의 내용은 다음과 같다.
    [xdebug]
    xdebug.remote_enable=1
    xdebug.remote_autostart=1
    ; ホスト側のIP
    ; host.docker.internalはdockerのhostマシンのIPを解決してくれます。
    ; hostマシン以外のIPの場合は適宜IPを調べて設定してください。
    xdebug.remote_host=host.docker.internal
    ; 空いているport番号(xdebugのデフォルトは9000)。私の場合は他と競合していたので9001に設定。
    xdebug.remote_port=9001
    ; xdebugの出力するログの場所。今回は適当に/tmp配下に。
    xdebug.remote_log=/tmp/xdebug.log
    

    vscode 설정


    docker 측의 설정이 기본적으로 끝났기 때문에 vscode 측의 설정을 진행합니다.
    우선 PHPDebug의 확장 기능을 설치하세요.
    설치가 완료되면 launch.json을 설정합니다.
    vscode 화면 왼쪽에 있는 벌레와 유사한 표시를 누르십시오.
    이렇게 하면 아래 그림처럼 보일 것 같아서요.

    기어의 태그를 누르면 환경을 묻는 메시지가 나타나므로 PHP를 선택합니다.
    선택하면 launch입니다.json은 자동으로 생성되어 편집 화면이 됩니다.
    표시되면 launch.json의 configrations에 아래의 내용을 추가하십시오.
        "configurations": [
            {
                "name": "XDebug on docker",
                "type": "php",
                "request": "launch",
                "port": 9001,//php.iniで設定したxdebug用のport番号
                "pathMappings": {
                    // {docker上のdocument root}:{ローカルのdocument root}
                    "/var/www/html":"/Path/to/your/local/root"
                }
            }
        ]
    
    이렇게 되면 vscode 설정이 끝납니다.

    디버깅 시작


    그럼 마지막으로 실제 절차를 밟겠습니다.
    먼저 docker-compose up -d 용기를 시작하십시오.
    가능하다면 vscode로 원본 코드에 단점을 추가해 보세요.

    위의 그림과 같이 원본 줄 번호의 왼쪽을 누르면 인터럽트를 설정할 수 있습니다.
    또 화면 왼쪽에 있는 녹색 화살표를 눌러야 한다.
    php가 중단점까지 실행될 때 멈추려면 누르십시오.
    중지할 때 화면 중앙에 있는 도구 모음의 중지 버튼을 누릅니다.
    이 상태에서localhost:8081에 접근하면 인터럽트에서 실행을 중지하고 절차를 수행할 수 있습니다.
    또 왼쪽에도 현재 변수의 값 등이 보이니 각자 활용하세요.
    다음은 xdebug로 Docker가 구축한 PHP 환경을 디버깅하는 방법입니다.

    참고 자료

  • https://docs.docker.com/docker-for-mac/networking/
  • https://hub.docker.com/_/php
  • 기록 편집

  • 2019/05/10 논평에 따르면 추가docker-php-ext-enable xdebug와 추가docker.host.internal의 기술
  • 추가 기록 (2021/1/31)


    xdebug3 시스템이 발표되고 실행pecl install xdebug 후 3 시스템이 설치됩니다.
    이 글에 기재된 xdebug의 설정은 2계이기 때문에 직접 복사해도 단점 등 문제가 발생할 수 있습니다.
    이 때 xdebug3 계열의 설정으로 바꾸십시오.
    자세한 상황은 islandryu 씨가 아래 보도에서 설명합니다.정말 감사합니다.
    https://qiita.com/islandryu/items/b5fbebb41f6d60fcf0c2

    좋은 웹페이지 즐겨찾기