docker に php-fpm サービス/拡張機能/構成をインストールする詳細なチュートリアル

docker に php-fpm サービス/拡張機能/構成をインストールする詳細なチュートリアル

macbrewを使ってphp56をインストールしたところ、 opensslがバージョン1.1だったためgoogleでも原因が分からないさまざまなエラーが発生しました。面倒でした。現在はdockerを使ってphp56-fpmサービス コンテナを作成し、ホスト マシンに直接nginxをインストールしています。

PHP DockerHub ホームページ

コンテナを作成する

# コンテナを作成する docker run -d \
--name php56-fpm \
-p 9056:9000 \
-v /home/wwwroot:/var/www/html
--特権=true
php:5.6-fpm

知らせ:

/var/www/html php dockerイメージの作業ディレクトリです。

-v /home/wwwroot:/var/www/htmlホストのサイト ディレクトリをコンテナーにマウントするために使用されます。たとえば、 /home/wwwroot/siteAコンテナー内で/var/www/html/siteAとしてアクセスできます。

nignx phpリクエストを転送すると、実行されたスクリプト名SCRIPT_NAMEとスクリプト ファイル名SCRIPT_FILENAMEfpmに転送され、 fpmスクリプトを読み取って実行します。

fpmコンテナを使用する場合、 nginxによって転送されたSCRIPT_FILENAME fpmコンテナ内の有効なサイト パスであるかどうかに注意する必要があります。nginx のnginx root fpmコンテナのサイトrootに直接マップできない場合は、 php locationfpmコンテナのサイトrootとして再定義する必要があります。このようにして、 fpmスクリプトを正しく読み取ることができます。

つまり、ホスト マシン上の/home/wwwroot/siteA/public/index.php /var/www/html/siteA/public/index.phpに変換してfpmコンテナーに送信する必要があります。そうしないと、 File not foundというエラーが報告されます。

したがって、 nginx serverを構成するときは、次のボリューム パス変換に注意してください。

サーバー{
 聞く 8056;
 ....
 # ホストのサイトルートディレクトリ root /home/wwwroot/siteA/public;
 
 場所 ~* (^[/]*.php)[/|$] {
 # コンテナ内のサイトルートディレクトリ /var/www/html/siteA/public;
 プロキシサーバのパス: 127.0.0.1:9056;
 fastcgi.conf をインクルードします。
 }
}

ただし、一般的にはdocker nginx + docker php-fpmみんな使っており、どちらのコンテナもサイトディレクトリを均一にマッピングしているので、このような問題は発生しません。ここでのnginxはホスト マシンに直接インストールされるため、 nginx phpリクエストを転送するときにサイトのルート ディレクトリを再定義する必要があります。

ログインコンテナ

# コンテナが実行中かどうか確認する docker ps

# コンテナにログイン docker exec -it php56-fpm /bin/bash

php の docker イメージは ubuntu に基づいています。apt-get を使用して、vim/vi、lrzsz、net-tools などの必要なツールをインストールできます。

# apt-getを使用してツールをインストールする前に、ソースを更新する必要があります。# そうでない場合、apt-get E: パッケージが見つかりません
apt-getアップデート
apt-get で vim をインストール

php/pecl拡張機能をインストールする

PHP拡張機能をインストールする

つまり、shomp などの公式 PHP 拡張機能は付属していますが、デフォルトでは有効になっていません。

# 組み込み拡張機能を確認する cd /usr/local/php/ext && ls -l
# 拡張機能をインストールする dcoker-php-ext-install shmop

pecl拡張機能をインストールする

コンテナ内に Pecl がインストールされているので、pecl を使って直接インストールすることができます。PHP バージョンのサポート拡張に注意してください。

docker-php-ext-enable の主な目的は、拡張機能に対応する設定ファイルを /usr/local/etc/php/conf.d/docker-php-ext-{extName}.ini に生成し、PHP が拡張機能をロードできるようにすることです。

# igbinary php5.6 の最高バージョンは 2.0.8 です
pecl インストール igbinary-2.0.8
docker-php-ext-enable igbinary

# phpredis php5.6 の最高バージョンは 4.3.0 です
pecl で redis-4.3.0 をインストールします
docker-php-ext-redis を有効にする

# swoole php5.6 の最高バージョンは 2.0.11 です
pcel swoole-2.0.11 をインストール
docker-php-ext-enable swoole

php/php-fpm の設定

/usr/local/etc は PHP コンテナの設定ディレクトリで、PHP と PHP-FPM の設定ファイルが含まれています。設定ディレクトリの構造は次のとおりです。

root@aa739592b579:/usr/local# ツリーなど/ 
等/
|-- pear.conf
|-- php # PHP 設定ディレクトリ| |-- conf.d # PHP 拡張設定| | |-- docker-php-ext-shmop.ini
| |-- php.ini # php.ini-development/production のコピー
| |-- php.ini 開発
| |-- php.ini-production
|-- php-fpm.conf # php-fpm の設定は主に php-fpm.d を導入します
|-- php-fpm.conf.default # php-fpm の設定は php-fpm.d/www.conf と同じです |-- php-fpm.d # php-fpm の拡張設定 |-- docker.conf
 |-- www.conf # php-fpm 設定モードの max/min の子要素はすべてここにあります |-- zz-docker.conf

ホストの設定ディレクトリをコンテナの /usr/local/etc にマップできますが、ホスト上の設定ディレクトリをコンテナ内の既存のディレクトリと一致させるように注意するか、コンテナ内で直接設定ファイルを編集してください。 Docker のコンセプトによれば、Docker コンテナの再利用性を最大限に高めるためには、ホスト マシン上に構成ファイルを保持し、それをコンテナの構成ディレクトリにマップする必要があります。

ホストのPHP設定ファイルをコンテナにマッピングする

php.ini は、/usr/local/etc/php のディレクトリにあります。
-v /opt/docker/conf/php/php-fpm.ini:/usr/local/etc/php-fpm.d/www/conf

よくある質問

1. ファイルが見つかりません
nginx によって指定されたサイト ルート ディレクトリは、fpm コンテナに直接マップできません。location で fpm コンテナのサイト ルート ディレクトリを再指定してください。
2. apt-get E: パッケージが見つかりません
ソースを更新するには、apt-get update を実行します。
3. コンテナ関連の規則 作業ディレクトリ: /var/www/html ホストのサイトディレクトリをこのディレクトリにマッピングすることをお勧めします 構成ディレクトリ: /usr/local/etc 構成ディレクトリ構造に注意してください
PHP拡張ディレクトリ: /usr/local/php/ext PHPの組み込み拡張パッケージを表示できます。docker-php-ext-installを使用してインストールすると便利です。

これで、docker で php-fpm サービス/拡張機能/構成をインストールする方法についての記事は終了です。docker で php-fpm をインストールする方法の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Mac で docker を使って PHP 開発環境を構成する方法
  • PHP の Docker インストールと Nginx を使用したデプロイメントの例
  • DockerにPHP拡張機能をインストールする手順の説明
  • Docker を使用して OpenLDAP+phpLDAPadmin 統合ユーザー認証を構築する方法
  • Docker ビルド PHP 環境チュートリアル詳細説明
  • PHP環境構築におけるDockerの柔軟な実装
  • LNMP と phpMyAdmin を Docker にデプロイする方法
  • PHP は docker を使用してワーカーマンを実行するケースの説明

<<:  JSはフロントエンドのページング効果を実現します

>>:  JSは写真の自動再生効果を実現します

推薦する

Nginx の純粋な構成でリアルタイム ログ レポートを実現するためのアイデアと方法

目次序文実装のアイデア実装手順1. Nginxをコンパイルする2. 設定ファイルは以下のとおりです要...

KTLツールはMySQLからMySQLへのデータの同期方法を実現します

ktl ツールを使用して、mysql から mysql にデータを同期します。 1. 新しいジョブス...

Centos7 での python3 のインストールとアンインストールに関するチュートリアル

1. Python 3をインストールする1. 依存パッケージをインストールしますyum instal...

MySQL における distinct と group by の違い

簡単に言うと、distinct は重複を削除するために使用され、group by は統計を集計するよ...

JS の効率的なマジック演算子の概要

JavaScript は現在、毎年新しいバージョンがリリースされており、より便利で効率的な新しい演算...

Kubernetes ポッドオーケストレーションとライフサイクルの詳細な説明

目次K8Sマスター基本アーキテクチャポッドオーケストレーションコンセプトPod オブジェクトのプロパ...

Windows Server2014 にセキュリティを適用して MySQL をインストールする際のエラーに対する完璧な解決策

理由はインストール後にきちんとアンインストールされなかったためです。この問題を解決するには、次の点に...

IEウェブページのポップアップウィンドウの共通パラメータは自分で設定できます

ポップアップは、現在のウィンドウにメニューツールバーがあるかどうかとは関係ありません。ページにスクリ...

MySql 認証に基づく vsftpd 仮想ユーザー

目次1. MySQLのインストール1.2 テーブル、データベース、ユーザーを作成する1.3 リモート...

mysql のファイル mysql-bin.000001 とは何ですか? 削除できますか?

ポートを使用して MySQL をインストールした後、しばらくすると /var の容量が不足しているこ...

React で複数の setStates が何回呼び出されるのでしょうか?

目次1. 2 つの setState を何回呼び出すのですか? 2. 2 つの setState の...

Vue の自動書式設定の改行保存の詳細な説明

ネットで変更方法をいろいろ調べたのですが、うまくいきませんでした。後で大物から見て削除しました。フォ...

VMware14 に CentOS 7 をインストールするグラフィック チュートリアル

CentOS の紹介CentOS は、Red Hat Linux が提供する無料で利用できるソースコ...

Mysql 8.0.17 winx64バージョンのインストール中に発生した問題を解決する

1. my.iniファイルを手動で作成して追加する # クライアントセクション # --------...

制限およびオフセット ページング シナリオを使用すると速度が遅くなるのはなぜですか?

質問から始めましょう5 年前、私が Tencent にいたとき、ページング シナリオでは MySQL...