docker で php+nginx+swoole+mysql+redis 環境を構築する方法

docker で php+nginx+swoole+mysql+redis 環境を構築する方法

オペレーティングシステム: Alibaba Cloud ESC インスタンス centos7.4

ソフトウェア: docker-ce バージョン 18.09.3、docker-compose バージョン 1.23.2

1. swoole-redis-pdo_mysql-gd拡張機能付きのDockerイメージを作成する

1. Dockerfileを作成する

vim ドッカーファイル

2. dockerfileファイルに書き込む

php:7.1-fpm より
apt-get update && apt-get install -y \ を実行します。
  libfreetype6-dev \
  libjpeg62-turbo-dev \
  libpng-dev \
&& docker-php-ext-install -j$(nproc) iconv \
&& docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
&& docker-php-ext-install -j$(nproc) gd \
&& docker-php-ext-configure pdo_mysql \
&& docker-php-ext-install pdo_mysql \
&& pecl インストール redis-4.3.0 \
&& pecl インストール swoole \
&& docker-php-ext-enable redis swoole

3. カスタム PHP イメージを作成します。イメージを構築する現在のディレクトリを指定する最後の「.」を忘れないでください。

次のコマンドを実行して docker build を実行します。

コマンドを実行します。ネットワークの問題により、実行に時間がかかります。成功すると、次のようなコードが表示されます。

...
ビルドプロセスが正常に完了しました
'/usr/local/include/php/ext/swoole/config.h' をインストールしています
'/usr/local/lib/php/extensions/no-debug-non-zts-20160303/swoole.so' をインストールしています
インストールOK: channel://pecl.php.net/swoole-4.3.1
設定オプション「php_ini」がphp.iniの場所に設定されていません
php.iniに「extension=swoole.so」を追加する必要があります
中間コンテナの削除 ad1420f7554f
---> 2f2f332d73ce
2f2f332d73ce の構築に成功しました
myphp4:latest のタグ付けに成功しました

この時点で、docker のカスタム myphp4 イメージが正常に作成されました。

2. docker-compose.ymlファイルを作成する

mkdir pnsmr
cd pnsmr
vim docker-compose.yml

次のコードを書いてください

バージョン: '3.0'
サービス:
nginx:
  画像: "nginx:latest"
  ポート:
   - 「10000:80」
  ボリューム:
   - /var/www/html:/usr/share/nginx/html
php-fpm:
  画像: "myphp4"
  ボリューム:
  - /var/www/html:/usr/share/nginx/html
マイスク:
  画像: "mysql:最新"
レディス:
  イメージ: "redis:4.0"

実行手順

docker-compose を起動 -d

成功は目に見えてわかる

警告: 使用している Docker エンジンは swarm モードで実行されています。

Compose は、スウォーム内の複数のノードにサービスをデプロイするためにスウォーム モードを使用しません。すべてのコンテナーは現在のノードでスケジュールされます。

アプリケーションを Swarm 全体にデプロイするには、`docker stack deploy` を使用します。

デフォルト ドライバーを使用してネットワーク「pnsmr_default」を作成しています
pnsmr_php-fpm_1 を作成しています...完了
pnsmr_redis_1 を作成しています...完了
pnsmr_mysql_1 を作成しています...完了
pnsmr_nginx_1 を作成しています...完了

これまでのところ、nginx mysql redis phpサービスが開始されました

3. 各サービスの設定ファイルを変更する

1. ブラウザに127.0.0.1:9998と入力します。#ここにサーバーのIPアドレスを入力すると、次の画像が表示されます。


2. 次に、コンテナ内のnginx設定ファイルを変更します。まず、コマンドを使用して各コンテナのdocker IPアドレスを表示します。

docker 検査 -f '{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)

このコマンドは、docker-compose で開かれたすべてのコンテナの IP アドレスを表示できます。結果は下の図のようになります。対応する IP アドレスは内部通信に使用できます。

3. nginxコンテナの設定ファイルをコピーし、nginxがPHPを解析できるように修正します。

docker cp pnsmr_nginx_1:/etc/nginx/conf.d/default.conf nginx.conf
vim nginx.conf

次のコードに変更します

サーバー{
  聞く 80;
  server_name ローカルホスト;

  #文字セット koi8-r;
  #access_log /var/log/nginx/host.access.log メイン;

  位置 / {
    ルート /usr/share/nginx/html;
    インデックス index.html index.htm;
  }

  #エラーページ 404 /404.html;

  # サーバーのエラーページを静的ページ /50x.html にリダイレクトします
  #
  エラーページ 500 502 503 504 /50x.html;
  場所 = /50x.html {
    ルート /usr/share/nginx/html;
  }

  # PHP スクリプトを 127.0.0.1:80 で listen している Apache にプロキシします
  #
  #場所 ~ \.php$ {
  # プロキシパス http://127.0.0.1;
  #}

  # PHP スクリプトを 127.0.0.1:9000 で待機している FastCGI サーバーに渡します
  #
  場所 ~ \.php$ {
    ルートhtml;
    fastcgi_pass 172.24.0.3:9000;#ここにPHPコンテナのDocker内部通信IPを入力する必要があります
    fastcgi_index インデックス.php;
    fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html/$fastcgi_script_name;
    fastcgi_params を含めます。
  }

  # Apacheのドキュメントルートが.htaccessファイルへのアクセスを拒否する
  # nginxのものと一致します
  #
  #場所 ~ /\.ht {
  # すべて拒否;
  #}
}
docker cp nginx.conf pnsmr_nginx_1:/etc/nginx/conf.d/default.conf # 変更した設定ファイルをコンテナにコピーします docker container stop pnsmr_nginx_1 
docker container start pnsmr_nginx_1 # 設定ファイルを有効にするために nginx コンテナを再起動します vim /var/www/html/index.php # サーバーのローカル ディレクトリに新しい index.php ファイルを作成し、<?php phpinfo(); と入力して保存します vim /var/www/html/index.html # サーバーのローカル ディレクトリに新しい index.html ファイルを作成し、helloworld を出力します

アクセス 127.0.0.1:9998、HTML ファイルの解析は正常です


127.0.0.1:9998/index.php にアクセスします。php ファイルの解析は正常です。


4. mysqlとredisが有効かどうかをテストする

vim /var/www/html/redis.php #redis が正しく設定されているかどうかをテストするために使用します<?php
$redis = 新しい Redis();
$redis->connect("172.24.0.4",6379);
$redis->set('test','これはredisのテストです');
$redis->get('test') をエコーし​​ます。

127.0.0.1:9998/redis.phpにアクセスすると、redisが有効になります

mysqlコンテナに入る

docker exec -it pnsmr_mysql_1 bash

mysqlに入り、ルートユーザーのパスワードを変更する

テストファイルを作成する

vim /var/www/html/mysql.php
<?php
$pdo = 新しい PDO ('mysql:host=172.24.0.2;dbname=mysql;port=3306','root','root123');
var_dump($pdo);

127.0.0.1:9998/mysql.php にアクセス、mysql は有効です

IV. 結論

環境は正常に構成されており、docker-compose up コマンドを使用してワンクリックで生成できますが、各コンテナの構成ファイルを変更する必要があり、まだ十分に便利ではなく、最適化する必要があります。また、docker のクラスターとスタック機能は使用されていません。これについては後で説明します。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • docker で nginx+php+mysql を設定する方法
  • Docker で php-nginx-alpine イメージをゼロから構築する方法
  • docker を使用して php7 と nginx の動作環境を構築するプロセス全体 (公式イメージ)
  • PHP の Docker インストールと Nginx を使用したデプロイメントの例

<<:  MySQL 最適化の概要 - クエリエントリの合計数

>>:  MySQL 起動エラー 1067 および文字セットを変更して再起動した後の無効な回復

推薦する

WIN10 に複数のデータベースがインストールされている場合にコンピュータの速度低下を防ぐ方法

必要なときにサービスを有効にし、必要がないときは無効にします。データベース サービスを管理する方法:...

Vue3 の emitting と attr の違いの分析

目次結論は実践分析拡張機能要約する結論は親コンポーネントでカスタム イベントが定義されている場合、子...

Windows Server 2016 で Flash を有効にする方法

最近、VMware Horizo​​n を導入してテストしましたが、そのコンソールにはデフォルトで ...

MySQL でよく使用されるステートメントの包括的な概要 (必読)

以下にまとめたナレッジポイントはどれもよく使われる貴重な情報ばかりですので、ぜひ上手に集めてください...

MySQL 学習ノート: 完全な SELECT ステートメントの使用例と詳細な説明

この記事では、MySQL 学習ノートの select ステートメントの完全な使用方法を例を使用して説...

MySQL でテーブル データを削除した後もディスク領域がまだ占有されているのはなぜですか?

目次1.MySQLデータ構造2. テーブルファイルのサイズは変更されておらず、MySQLの設計に関連...

Dockerのローカルイメージ作成方法の分析

コンテナと呼ばれるものは、実際には親イメージに基づいて読み取りおよび書き込み可能なファイル階層を作成...

MySQLビューの原理と使用法の詳細な説明

この記事では、例を使用して MySQL ビューの原理と使用方法を説明します。ご参考までに、詳細は以下...

JQueryセレクターの詳細な説明

目次基本的なセレクター:レベルセレクター:属性セレクター:フィルターセレクター:フォーム属性セレクタ...

HTML テーブル マークアップ チュートリアル (6): 暗い境界線の色属性 BORDERCOLORDARK

表では、右下の境界線の色を個別に定義したり、セルの左上の境界線の色を定義したりできます。これら 2 ...

MySQLの自動増分主キーIDはこのように処理されません

MySQLの自動増分主キーIDは段階的に増加しません1. はじめにMySQL データベースにデータを...

CSS で高さが不明な垂直中央揃えを実装する

この記事では主に、高さが不明な垂直方向の中央揃えを CSS で実装する方法を紹介し、皆さんと共有しま...

MySQL パーティション関数の詳細な説明と例の分析

まず、データベース パーティショニングとは何でしょうか?以前、MySQL のテーブル パーティショニ...

jQueryはシンプルなボタンの色の変更を実装します

HTML と CSS で、ボタンの色を設定したいとします。 目的の効果は得られますが、プロセスはかな...

Linux インストール MySQL チュートリアル (バイナリ配布)

このチュートリアルでは、LinuxにMySQLをインストールする詳細な手順を参考までに紹介します。具...