>백엔드 개발 >PHP 튜토리얼 >구덩이를 피하세요! Docker를 사용하여 PHP 개발 환경 구축

구덩이를 피하세요! Docker를 사용하여 PHP 개발 환경 구축

藏色散人
藏色散人앞으로
2019-07-30 14:11:1013001검색

함정을 피하세요! Docker를 사용하여 PHP 개발 환경 구축(Mac, Docker, Nginx, PHP-FPM, XDebug, PHPStorm, VSCode)

최근 컴퓨터를 변경했기 때문에 로컬 개발 환경을 재배포해야 합니다. 이전에 사용했던 가상머신 솔루션이 디스크 공간을 너무 많이 차지하고, SSD 공간이 부족한 점이 아쉽기 때문에 이번에는 Docker 솔루션을 도입하여 배포하게 되었습니다.

이번 배포의 원칙은 공식 이미지를 최대한 활용하고, 이미지를 최대한 바꾸거나 바꾸지 않는 것이 제 생각입니다. 로컬 개발 환경이기 때문에 새로운 것을 시도해보고 싶고, 더 높은 버전의 소프트웨어를 사용해 구현해 보려고 합니다.

결과적으로 환경을 구축하고 함정을 피해야 하는 학생들에게 도움이 되기를 바랍니다. 이 글의 단계를 따라 한 번에 완료하면 가장 좋을 것입니다. .

먼저 환경에 대해 이야기해 보겠습니다.

Docker 18.09.2
Nginx 1.17.1
PHP 7.3.7
XDebug 2.7.2
PhpStorm 2019.1.3
VSCode 1.36.1

1. Docker 설치

여기에서 직접 이동할 수 있습니다. Docker 공식 웹사이트 Mac용 Docker를 다운로드하고 지침을 따르기만 하면 됩니다. 여기서는 자세한 내용을 다루지 않겠습니다.

2. Nginx 설치

주소: https://hub.docker.com/_/nginx

#🎜🎜 #docker pull nginx를 직접 실행하여 최신 이미지를 가져옵니다.

위 주소에 따르면 제공된 일부 공식 문서를 볼 수 있으며, 제가 개인적으로 채택한 솔루션은 먼저 nginx를 설치하는 것입니다. 전체 구성 디렉터리를 로컬 복사본에 복사한 다음 런타임 중에 해당 디렉터리를 nginx 컨테이너의 구성 디렉터리에 바인딩하면 구성 수정이 더 편리해집니다.

nginx 구성 디렉터리를 로컬에 복사하세요:

$ docker run --name tmp-nginx -d nginx
$ docker cp tmp-nginx:/etc/nginx /Users/yourname/Workspace/etc/nginx
$ docker rm -f tmp-nginx

Instructions: /Users/yourname/Workspace/etc, 이것은 내 개인 작업 디렉터리이므로 변경하겠습니다. 상황에 따라 명령의 목적은 백그라운드에서 실행되는 nginx 컨테이너를 시작하고 구성 디렉터리를 복사한 다음 작업을 종료하고 컨테이너를 삭제하는 것입니다.

먼저 실행하여 효과를 확인할 수 있습니다.

$ docker run --name run-nginx -d -p 80:80 -v /Users/yourname/Workspace/www:/usr/share/nginx/html:ro nginx

설명: -v 매개변수는 로컬 디렉터리를 nginx 컨테이너의 웹 디렉터리에 바인딩합니다. 디렉토리를 구성하려면 웹 디렉토리에 hello.html을 생성하고 브라우저를 통해 http://localhost/hello.html에 액세스하여 효과를 확인한 후 컨테이너를 먼저 삭제한 후 시작할 수 있습니다. 구성을 변경합니다.

삭제방법:

$ docker rm -f run-nginx

3. php-fpm

주소: https://hub. docker.com/_/php

여기에서는 개발에 사용되는 일부 PHP 확장을 설치해야 하므로 가장 좋은 방법은 Dockerfile을 기반으로 자체 이미지를 생성하는 것입니다. 참고로 상황에 따라 불필요한 확장자를 삭제할 수 있습니다. 그렇지 않으면 생성되는 이미지가 커집니다.

Dockerfile 내용은 다음과 같습니다.

# 从官方基础版本构建
FROM php:7.3.7-fpm
# 官方版本默认安装扩展: 
# Core, ctype, curl
# date, dom
# fileinfo, filter, ftp
# hash
# iconv
# json
# libxml
# mbstring, mysqlnd
# openssl
# pcre, PDO, pdo_sqlite, Phar, posix
# readline, Reflection, session, SimpleXML, sodium, SPL, sqlite3, standard
# tokenizer
# xml, xmlreader, xmlwriter
# zlib
# 更新为国内镜像
RUN mv /etc/apt/sources.list /etc/apt/sources.list.bak \
    && echo 'deb http://mirrors.163.com/debian/ stretch main non-free contrib' > /etc/apt/sources.list \
    && echo 'deb http://mirrors.163.com/debian/ stretch-updates main non-free contrib' >> /etc/apt/sources.list \
    && echo 'deb http://mirrors.163.com/debian-security/ stretch/updates main non-free contrib' >> /etc/apt/sources.list \
    && apt-get update
# bcmath, calendar, exif, gettext, sockets, dba, 
# mysqli, pcntl, pdo_mysql, shmop, sysvmsg, sysvsem, sysvshm 扩展
RUN docker-php-ext-install -j$(nproc) bcmath calendar exif gettext sockets dba mysqli pcntl pdo_mysql shmop sysvmsg sysvsem sysvshm iconv
# GD 扩展
RUN apt-get install -y --no-install-recommends libfreetype6-dev libjpeg62-turbo-dev libpng-dev \
    && rm -r /var/lib/apt/lists/* \
    && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
    && docker-php-ext-install -j$(nproc) gd
# imagick 扩展
RUN export CFLAGS="$PHP_CFLAGS" CPPFLAGS="$PHP_CPPFLAGS" LDFLAGS="$PHP_LDFLAGS" \
    && apt-get install -y --no-install-recommends libmagickwand-dev \
    && rm -r /var/lib/apt/lists/* \
    && pecl install imagick-3.4.4 \
    && docker-php-ext-enable imagick
# mcrypt 扩展 
RUN apt-get install -y --no-install-recommends libmcrypt-dev \
    && rm -r /var/lib/apt/lists/* \
    && pecl install mcrypt-1.0.2 \
    && docker-php-ext-enable mcrypt
# Memcached 扩展 
RUN apt-get install -y --no-install-recommends libmemcached-dev zlib1g-dev \
    && rm -r /var/lib/apt/lists/* \
    && pecl install memcached-3.1.3 \
    && docker-php-ext-enable memcached
# redis 扩展
RUN pecl install redis-5.0.0 && docker-php-ext-enable redis
# opcache 扩展 
RUN docker-php-ext-configure opcache --enable-opcache && docker-php-ext-install opcache
# xdebug 扩展
RUN pecl install xdebug-2.7.2 && docker-php-ext-enable xdebug
# swoole 扩展
RUN pecl install swoole-4.4.0 && docker-php-ext-enable swoole
# 镜像信息
LABEL Author="Stone"
LABEL Version="2019.7"
LABEL Description="PHP 7.3.7 开发环境镜像.

참고: 이 Dockerfile의 작성자를 참조합니다 https://www.jianshu.com /p/20fcca06e27e 내용을 수정하고 각자의 상황에 따라 늘리거나 줄일 수 있습니다. xdebug를 유지하는 것이 가장 좋습니다.

#🎜🎜 #다음은 Dockerfile 시리즈로 RUN을 연결하는 것입니다. 이렇게 생성된 이미지는 더 작을 수 있지만 여전히 636M입니다. 공식 php:7.3.7-fpm 이미지는 371M입니다. 최적화하려면 다음에서 생성할 수도 있습니다. 여기서는 공식 알파인 이미지를 단순하고 조잡하게 유지하겠습니다.

FROM php:7.3.7-fpm
RUN mv /etc/apt/sources.list /etc/apt/sources.list.bak \
    && echo 'deb http://mirrors.163.com/debian/ stretch main non-free contrib' > /etc/apt/sources.list \
    && echo 'deb http://mirrors.163.com/debian/ stretch-updates main non-free contrib' >> /etc/apt/sources.list \
    && echo 'deb http://mirrors.163.com/debian-security/ stretch/updates main non-free contrib' >> /etc/apt/sources.list \
    && apt-get update \
    && export CFLAGS="$PHP_CFLAGS" CPPFLAGS="$PHP_CPPFLAGS" LDFLAGS="$PHP_LDFLAGS" \
    && apt-get install -y --no-install-recommends libfreetype6-dev libjpeg62-turbo-dev libpng-dev libmagickwand-dev libmcrypt-dev libmemcached-dev zlib1g-dev \
    && rm -rf /var/lib/apt/lists/* \
    && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
    && docker-php-ext-install -j$(nproc) bcmath calendar exif gettext sockets dba mysqli pcntl pdo_mysql shmop sysvmsg sysvsem sysvshm iconv gd \
    && pecl install imagick-3.4.4 mcrypt-1.0.2 memcached-3.1.3 redis-5.0.0 xdebug-2.7.2 swoole-4.4.0\
    && docker-php-ext-enable imagick mcrypt memcached redis xdebug swoole \
    && docker-php-ext-configure opcache --enable-opcache && docker-php-ext-install opcache
LABEL Author="Stone"
LABEL Version="2019.7"
LABEL Description="PHP 7.3.7 开发环境镜像. "

함정에 대해 이야기해 보겠습니다. apt-get의 소스를 국내 소스로 변경하는 것이 가장 좋습니다. 그렇지 않으면 기본적으로 공식 컨테이너가 기반이므로 이미지를 빌드할 때 중단될 수 있습니다. 예를 들어, 현재 데비안 코드명이 Stretch인데 jessie의 패키지를 사용하면 "E: 문제를 수정할 수 없습니다. 오류가 발생했습니다."라는 오류가 발생합니다. packages."; 지침을 직접 따를 수 있습니다. 위의 내 Dockerfile은 이미지를 생성하고 테스트를 통과할 수 있습니다.

Execute Dockerfile이 있는 디렉터리에서:

docker build -t my-php-fpm:2019.7 .

-t 매개변수는 이미지 이름과 라벨을 설정합니다. 이미지가 생성된 후 이름을 지정하세요. nginx 구성은 동일하며, 관련 PHP 구성도 로컬로 복사됩니다.

$ docker run --name tmp-my-php-fpm -d my-php-fpm:2019.7
$ docker cp tmp-my-php-fpm:/usr/local/etc /Users/yourname/Workspace/etc/php
$ docker rm -f tmp-my-php-fpm

4. nginx, php-fpm, xdebug 구성 파일을 수정합니다.

nginx 구성 파일을 수정하고 /Users/yourname/을 엽니다. Workspace /etc/nginx/default.conf에 다음 내용을 추가합니다:

location ~ \.php$ {
        fastcgi_pass   php-fpm-container:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /var/www/html$fastcgi_script_name;
        fastcgi_param  SCRIPT_NAME      $fastcgi_script_name;
        include        fastcgi_params;
    }

추가된 내용에 설명해야 할 한 가지 사항이 있습니다. "php-fpm-container" 이것은 php- 우리가 직접 만든 fpm 컨테이너 별칭은 런타임에 지정되며 이에 대해서는 나중에 언급하겠습니다.

php 관련 구성 파일을 수정하고 /Users/yourname/Workspace/etc/php로 이동한 후 php.ini-development를 복사하여 이름을 php.ini로 바꾸고 구성 내용을 원하는 대로 수정합니다. 자신의 상황.

xdebug 구성 파일 /Users/yourname/Workspace/etc/php/conf.d/docker-php-ext-xdebug.ini를 수정하고 다음 콘텐츠를 추가합니다

xdebug.remote_enable = On
xdebug.remote_handler = dbgp
xdebug.remote_host = host.docker.internal 
xdebug.remote_port = 9001
xdebug.remote_log = /var/log/php/xdebug.log
xdebug.idekey = PHPSTOR
# 🎜🎜 #위 설정은 주로 xdebug의 원격 디버깅 모드를 활성화하기 위한 것입니다. php-fpm은 포트 9000을 사용하므로 여기서는 xdebug의 포트를 9001로 변경합니다. "host.docker.internal"이 docker 18.03에 새로 추가되었습니다. 호스트의 IP 주소를 얻기 위해 구문 분석되므로 IP 주소를 하드 코딩할 필요가 없습니다.

5 php-fpm, nginx 컨테이너를 시작합니다.

$ docker run --name run-my-php-fpm \
-v /Users/yourname/Workspace/www:/var/www/html \
-v /Users/yourname/Workspace/etc/php:/usr/local/etc \
-v /Users/yourname/Workspace/log/php:/var/log/php \
-d my-php-fpm:2019.7
$ docker run --name run-nginx \
-p 80:80 \
--link run-my-php-fpm:php-fpm-container \
-v /Users/yourname/Workspace/www:/usr/share/nginx/html \
-v /Users/yourname/Workspace/etc/nginx:/etc/nginx \
-v /Users/yourname/Workspace/log/nginx:/var/log/nginx \
-d nginx

说明:我将配置目录、日志目录和 web 目录都分别进行了绑定,方便在本地环境中修改。还记得上面提到的 nginx 中有个配置填写的 “php-fpm-container” 吗?实际上就是在这里指定的,连接两个容器,并给 php-fpm 容器起了个别名,配置中通过别名访问。

在 / Users/yourname/Workspace/www 中创建一个 phpinfo.php 文件,输出 php 信息,通过 http://localhost/phpinfo.php 访问来查看。

구덩이를 피하세요! Docker를 사용하여 PHP 개발 환경 구축

6、安装 Chrome 浏览器插件 xdebug helper

可能会被墙,请自行解决。

7、PhpStorm 调试环境配置

建立 / Users/yourname/Workspace/www/xdebug/demo.php,php 文件里面随便写点 php 代码,也可以通过 PhpStorm 新建立一个空项目,但是位置要在我们和 php-fpm 容器绑定的目录。

菜单:PhpStorm->Preferences… 进入偏好设置,按照下图进行设置。

구덩이를 피하세요! Docker를 사용하여 PHP 개발 환경 구축

根据上图提示进入 CLI Interpreter 设置窗口,点 “+” 添加配置。

구덩이를 피하세요! Docker를 사용하여 PHP 개발 환경 구축

구덩이를 피하세요! Docker를 사용하여 PHP 개발 환경 구축

继续配置 Debug 相关设置,如下图:

구덩이를 피하세요! Docker를 사용하여 PHP 개발 환경 구축

进入主界面,选择右上的 “Add Configuration...”

구덩이를 피하세요! Docker를 사용하여 PHP 개발 환경 구축

进入 debug 配置窗口后选择 “+”,选择 “PHP Web Page“,设置名称后进入 Servers 设置,同时设置 Start URL:“/xdebug/demo.php”

구덩이를 피하세요! Docker를 사용하여 PHP 개발 환경 구축

구덩이를 피하세요! Docker를 사용하여 PHP 개발 환경 구축

进入主窗口,在程序中打几个断点,然后点击那个绿色的甲虫就可以了。

구덩이를 피하세요! Docker를 사용하여 PHP 개발 환경 구축

8、VSCode 调试环境配置

首先安装 PHP Debug 插件,然后打开上面创建的 xdebug 目录。如下图所示,进入调试面板,点齿轮选择 PHP,然后会创建一个 launch.json 文件,修改这个文件加入 pathMappings 配置,这个配置参数用于设置服务器路径与本地路径的对应关系,低版本使用的是 localSourceRoot 和 serverSourceRoot,目前已经被废除。另外记得将端口改为 9001。

구덩이를 피하세요! Docker를 사용하여 PHP 개발 환경 구축

구덩이를 피하세요! Docker를 사용하여 PHP 개발 환경 구축

进入 demo.php,随意设置两个断点,然后点左侧的运行按钮,进入调试模式,接下来刷新 http://localhost/xdebug/demo.php 会返回到 VSCode 的调试窗口,左侧已经列出调试信息,可选择单步执行跟踪程序的运行。

구덩이를 피하세요! Docker를 사용하여 PHP 개발 환경 구축

구덩이를 피하세요! Docker를 사용하여 PHP 개발 환경 구축

结尾:实际上这次部署环境踩了不少坑,主要原因是网上的资料都比较陈旧,很多文章也没有后续的更新,或者方向和我不太一致,例如 hub 中直接就有 xdebug 的镜像,但是我还是想尽量用官方提供的镜像自己创建,为了避免踩坑,大家最好还是多多参考官方文档,一般都写的比较清楚了。

위 내용은 구덩이를 피하세요! Docker를 사용하여 PHP 개발 환경 구축의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 learnku.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제