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

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

Jul 30, 2019 pm 02:11 PM
docker

함정을 피하세요! 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 채팅 명령 및 사용 방법
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

중국의 도커 이미지 소스를 변경하는 방법 중국의 도커 이미지 소스를 변경하는 방법 Apr 15, 2025 am 11:30 AM

국내 거울 소스로 전환 할 수 있습니다. 단계는 다음과 같습니다. 1. 구성 파일 /etc/docker/daemon.json 편집 및 미러 소스 주소를 추가하십시오. 2. 저장 및 종료 후 Docker Service Sudo SystemCTL Docker를 다시 시작하여 이미지 다운로드 속도 및 안정성을 향상시킵니다.

Docker에서 거울을 만드는 방법 Docker에서 거울을 만드는 방법 Apr 15, 2025 am 11:27 AM

Docker 이미지 생성 단계 : 빌드 지침이 포함 된 Dockerfile을 작성하십시오. Docker 빌드 명령을 사용하여 터미널에 이미지를 빌드하십시오. Docker 태그 명령을 사용하여 이미지를 태그하고 이름과 태그를 지정하십시오.

Docker Desktop을 사용하는 방법 Docker Desktop을 사용하는 방법 Apr 15, 2025 am 11:45 AM

Docker Desktop을 사용하는 방법? Docker Desktop은 로컬 머신에서 Docker 컨테이너를 실행하는 도구입니다. 사용 단계는 다음과 같습니다. 1. Docker Desktop 설치; 2. Docker Desktop을 시작하십시오. 3. Docker 이미지를 만듭니다 (Dockerfile 사용); 4. Docker Image 빌드 (Docker 빌드 사용); 5. 도커 컨테이너를 실행하십시오 (Docker Run 사용).

Docker 버전을 읽는 방법 Docker 버전을 읽는 방법 Apr 15, 2025 am 11:51 AM

Docker 버전을 얻으려면 다음 단계를 수행 할 수 있습니다. Docker 명령 "Docker -version"을 실행하여 클라이언트 및 서버 버전을 볼 수 있습니다. Mac 또는 Windows의 경우 Docker Desktop GUI의 버전 탭 또는 Aff Docker Desktop 메뉴를 통해 버전 정보를 볼 수도 있습니다.

Docker의 이미지를 업데이트하는 방법 Docker의 이미지를 업데이트하는 방법 Apr 15, 2025 pm 12:03 PM

Docker 이미지를 업데이트하는 단계는 다음과 같습니다. 최신 이미지 태그 가져 오기 새 이미지 특정 태그의 이전 이미지 삭제 (선택 사항) 컨테이너를 다시 시작하십시오 (필요한 경우)

Docker에서 로그를 보는 방법 Docker에서 로그를 보는 방법 Apr 15, 2025 pm 12:24 PM

Docker Logs를 보는 방법에는 다음이 포함됩니다. Docker Logs 명령 사용 : Docker Logs Container_name Docker Exec 명령을 사용하여 RUN /BIN /SH를 사용하여 로그 파일을 봅니다. cat /var/log/container_name.log docker-compose logs docker compose의 명령 : docker-compose -f docker-com 사용

Docker 이미지를 저장하는 방법 Docker 이미지를 저장하는 방법 Apr 15, 2025 am 11:54 AM

Docker에 이미지를 저장하려면 Docker Commit 명령을 사용하여 지정된 컨테이너의 현재 상태가 포함 된 새 이미지를 만들 수 있습니다. 구문 : Docker Commit [옵션] 컨테이너 ID 이미지 이름. 이미지를 저장소에 저장하려면 Docker Push 명령 인 Syntax : Docker 푸시 이미지 이름 [: tag]을 사용할 수 있습니다. 저장된 이미지를 가져 오려면 Docker Pull 명령 인 Syntax : Docker Pull Image Name [: Tag]을 사용할 수 있습니다.

Docker 명령을 실행하는 방법 Docker 명령을 실행하는 방법 Apr 15, 2025 am 11:24 AM

Docker 명령을 실행하는 방법? Docker를 설치하고 데몬을 시작하십시오. 공통 docker 명령 : 디스플레이 이미지 Docker PS : 디스플레이 컨테이너 Docker Run : 컨테이너 컨테이너 Docker 정지 : 컨테이너 중지 Docker RM : Docker exec : Docker Exec : Docker Exec : 실행 명령 Docker Logs 첨부 : Display Log Docker Commit : DICKER STOP DOCKER DACON : Sudo SystemCTL Docker 로그 : Sudo SystemCTL STOP DOCKER COMMIN

See all articles