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は写真の自動再生効果を実現します

推薦する

js の hasOwnProperty のプロパティとインスタンスの使用法の詳細な説明

1. js は hasOwnProperty が不正に占有されることから保護しません。オブジェクトに...

MySQLデータベースの一般的な最適化操作のまとめ(経験共有)

序文データ中心のアプリケーションの場合、データベースの品質はプログラムのパフォーマンスに直接影響する...

MySQL に接続する際に Navicat for MySQL が 2005 エラーを報告する問題を解決する

前回の記事では、Navicat for Mysql 接続エラー 1251 (接続失敗) の問題を解決...

CSS3 のメディアクエリと rem レイアウトを組み合わせてモバイル画面に適応

CSS3 構文: (750 ピクセルのデザインの場合、1rem = 100 ピクセル) @media...

IDEA が Docker を統合してリモート展開を実現するための詳細な手順

1. Dockerサーバーへのリモートアクセスを有効にするdocker が配置されているリモート サ...

MySQL での Truncate の使用法の詳細な説明

序文:テーブルをクリアしたいときは、truncate ステートメントをよく使用します。ほとんどの場合...

Innodb システムテーブルスペースのメンテナンス方法

環境説明:実行中の MySQL 環境があります。以前の構成ファイルの設定が単純すぎたため (inno...

HTMLで細い線のテーブルを作成する簡単な例

この細線の表を作成する方法については、Baidu で検索すると、表に対して border="...

Vue でのキープアライブコンポーネントの使用例

問題の説明(キープアライブとは何か)キープアライブ 名前の通り、アクティブな状態を維持します。誰が活...

フィルターと固定間の競合の原因と解決策の詳細な説明

問題の説明body内でfilter属性を使用すると、 fixed要素の位置が不正確になります。つまり...

フラッシュコンテンツの表示に使用される OBJECT タグと EMBED タグの違いの紹介

1. はじめに:ウェブページにフラッシュ コンテンツを正常に表示したい場合は、ページ上のフラッシュ ...

Docker データ ストレージ ボリュームの詳細な説明

デフォルトでは、コンテナ データの読み取りと書き込みはコンテナのストレージ レイヤーで行われます。コ...

MySQLカスタム変数の概念と特徴

MySQL カスタム値は、値を保存するための一時的なコンテナです。サーバーへの接続がアクティブである...

JSメモリ空間の詳細な説明

目次概要1. スタックとヒープ2. 変数オブジェクトと基本データ型3. 参照データ型とヒープメモリメ...

JQueryはアニメーション効果の非表示と表示を実装します

この記事では、アニメーション効果の非表示と表示を実現するためのJQueryの具体的なコードを参考まで...