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

ブログ    

推薦する

CSS スタイルをプログラムで処理するためのサンプル コード

プログラム的アプローチの利点1. スタイルの分散を避けるためのグローバルコントロール2. シンプルな...

Mysqlはブール型の演算を設定します

Mysqlはブール型を設定します1. Tinyintタイプテストテーブルを作成し、blフィールドをブ...

SMS送信のカウントダウンを実装するJavaScript

この記事では、SMS送信のカウントダウンを実装するためのJavaScriptの具体的なコードを参考ま...

React の調整アルゴリズム Diffing アルゴリズム戦略の詳細な説明

目次アルゴリズム戦略単一ノードの差分配列ノードの差分キー値の使用要件アルゴリズム戦略React の調...

MySQL の効率的なクエリの左結合とグループ化 (プラス インデックス)

mysql 効率的なクエリMySQL は、左結合の速度を上げるために group by を犠牲にし...

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

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

Vue px to rem 構成の詳細な説明

目次方法1 1. 構成とインストールの手順:方法2方法3要約する方法1 1. 構成とインストールの手...

Linux チェックアップ、Linux の状態 (ネットワーク IO、ディスク、CPU、メモリ) を把握

目次1. コアコマンド2. 共通コマンド3. コアコマンドの詳細な説明3.1、ps補助3.2 トップ...

Vue シンプル登録ページ + 確認コード送信機能の実装例

目次1. エフェクト表示2. 検証コードとメールプッシュ管理の強化(後述のブログを参照) 3. 一般...

jsを使用して写真をアップロードする機能を実現する

フロントエンドで画像をアップロードする原理は、入力 type="file" タグ...

Docker 大規模プロジェクトのコンテナ化変革

仮想化とコンテナ化は、クラウドベースのプロジェクトでは避けられない 2 つの問題です。仮想化は純粋な...

JavaScript は 3 つの一般的な Web 効果 (オフセット、クライアント、スクロール シリーズ) を実装します。

目次1. 要素オフセットシリーズ2. 要素表示領域クライアントシリーズ3. 要素スクロールシリーズ1...

JavaScript を使用してソートアルゴリズムを実装する方法

目次バブルソート選択ソート挿入ソート要約するバブルソートバブルソートは、シーケンスの右側から始めて、...

Win10 での MySQL 8.0.15 のインストールと設定のチュートリアル

最近私が学んでいるのは MySQL の知識なので、MySQL をインストールすることが非常に重要です...

Nginx tp3.2.3 404 問題の解決

最近、Apache を nginx に変更しました。TP プロジェクトを実行に移すと、404 エラー...