検索
ホームページバックエンド開発PHPチュートリアル穴を避けてください! Dockerを利用してPHP開発環境を構築する

穴を避けてください! Docker を使用して PHP 開発環境を構築する (Mac、Docker、Nginx、PHP-FPM、XDebug、PHPStorm、VSCode)

最近コンピューターを変更したため、ローカル開発環境を再デプロイする必要があります。使用した仮想マシンbefore このソリューションではディスク容量が多すぎて、SSD の容量が少ないのが残念なので、今回は Docker ソリューションを採用してデプロイしました。

今回の展開の原則ですが、画像はできるだけ公式のものを使用し、画像の変更や改変は極力しない、というのが私の考えです。ローカル開発環境なので新しいことを試して上位バージョンのソフトを使って実装してみたいと思います。

結果としては、同じく環境構築や落とし穴回避が必要な学生さんの参考になれば幸いです。 1回。

まず環境について話しましょう:

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 公式 Web サイトから Docker for Mac を直接ダウンロードできます。プロンプトに従ってください。ここでは詳細には触れません。

2. Nginx のインストール

アドレス: https://hub.docker.com/_/nginx

docker pull nginx pull を直接実行します。最新の画像;

上記のアドレスによると、いくつかの公式ドキュメントが提供されていることがわかります。操作に従うだけです。私が個人的に採用している解決策は、まず 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

手順: /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 コンテナ内の Web ディレクトリにバインドします。バインディング構成ディレクトリはありません。 Web ディレクトリに hello.html を作成し、ブラウザから http://localhost/hello.html にアクセスして効果を確認した後、最初にコンテナを削除し、構成を変更してからコンテナを起動できます。

削除方法:

$ docker rm -f run-nginx

3. php-fpmのインストール

アドレス: https://hub.docker.com/_/php

開発で使用する PHP 拡張機能をインストールする必要があるため、Dockerfile に基づいて独自のイメージを生成するのが最善の方法です。以下は私の 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 开发环境镜像.

注: https://www.jianshu.com/p/20fcca06e27e の作者の内容を参照しました。この Dockerfile を作成して作成しました 状況に応じて調整を増減できます 開発環境なので、xdebug を保持しておくことをお勧めします (これも後で使用します);

次は Dockerfile ですRUN を直列に接続することで、生成されたイメージは小さくなりますが、それでも 636M です。公式の php:7.3.7-fpm イメージは 371M です。最適化したい場合は、公式の Alpine イメージから生成することもできます。ここでは単純かつ大雑把に言っておきましょう。

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 のソースを国内のソースに変更するのが最善です、そうしないとイメージのビルド時にスタックする可能性があります; デフォルトでは公式コンテナは Debian に基づいているため、たとえば、現在の Debian コードネームはストレッチですが、jessie のパッケージを使用すると、必ず「E: 問題を修正できません。壊れたパッケージが保持されています。」というエラーが発生します。 Dockerfile を使用してイメージを生成するだけで、テストに合格します。

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;
    }

追加された内容には、説明が必要な点が 1 つあります。「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に変更します; docker 18.03で新たに追加された「host.docker.internal」が解析可能になりますホストの 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 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事はlearnkuで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
docker中rm和rmi有什么区别docker中rm和rmi有什么区别Jul 14, 2022 am 11:02 AM

docker中rm和rmi的区别:rm命令用于删除一个或者多个容器,而rmi命令用于删除一个或者多个镜像;rm命令的语法为“docker rm [OPTIONS] CONTAINER [CONTAINER...]”,rmi命令的语法为“docker rmi [OPTIONS] IMAGE [IMAGE...]”。

docker官方镜像有哪些docker官方镜像有哪些May 12, 2022 pm 02:23 PM

docker官方镜像有:1、nginx,一个高性能的HTTP和反向代理服务;2、alpine,一个面向安全应用的轻量级Linux发行版;3、busybox,一个集成了三百多个常用Linux命令和工具的软件;4、ubuntu;5、PHP等等。

docker是免费的吗docker是免费的吗Jul 08, 2022 am 11:21 AM

docker对于小型企业、个人、教育和非商业开源项目来说是免费的;2021年8月31日,docker宣布“Docker Desktop”将转变“Docker Personal”,将只免费提供给小型企业、个人、教育和非商业开源项目使用,对于其他用例则需要付费订阅。

docker容器重启后数据会丢吗docker容器重启后数据会丢吗Jun 17, 2022 am 10:41 AM

docker容器重启后数据会丢失的;但是可以利用volume或者“data container”来实现数据持久化,在容器关闭之后可以利用“-v”或者“–volumes-from”重新使用以前的数据,docker也可挂载宿主机磁盘目录,用来永久存储数据。

docker能安装oracle吗docker能安装oracle吗Jul 08, 2022 pm 04:07 PM

docker能安装oracle。安装方法:1、拉取Oracle官方镜像,可以利用“docker images”查看镜像;2、启动容器后利用“docker exec -it oracle11g bash”进入容器,并且编辑环境变量;3、利用“sqlplus /nolog”进入oracle命令行即可。

docker存储空间不足怎么办docker存储空间不足怎么办Jul 22, 2022 pm 03:44 PM

解决方法:1、停止docker服务后,利用“rsync -avz /var/lib/docker 大磁盘目录/docker/lib/”将docker迁移到大容量磁盘中;2、编辑“/etc/docker/daemon.json”添加指定参数,将docker的目录迁移绑定;3、重载和重启docker服务即可。

什么是docker最早支持的存储引擎什么是docker最早支持的存储引擎May 12, 2022 pm 03:27 PM

AUFS是docker最早支持的存储引擎。AUFS是一种Union File System,是文件级的存储驱动,是Docker早期用的存储驱动,是Docker18.06版本之前,Ubuntu14.04版本前推荐的,支持xfs、ext4文件。

docker容器管理ui有哪些docker容器管理ui有哪些May 11, 2022 pm 03:39 PM

容器管理ui工具有:1、Portainer,是一个轻量级的基于Web的Docker管理GUI;2、Kitematic,是一个GUI工具,可以更快速、更简单的运行容器;3、LazyDocker,基于终端的一个可视化查询工具;4、DockStation,一款桌面应用程序;5、Docker Desktop,能为Docker设置资源限制,比如内存,CPU,磁盘镜像大小;6、Docui。

See all articles

ホット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ヘンタイを無料で生成します。

ホットツール

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール