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 および文字セットを変更して再起動した後の無効な回復

推薦する

JSはキャンバス技術を使用してeChartsの棒グラフを模倣します

Canvas は HTML5 の新しいタグです。js を使用して Canvas 描画 API を操作...

Vue命令の実装原理の分析

目次1. 基本的な使い方2. 指示の動作原理2.1. 初期化2.2 テンプレートのコンパイル2.3....

Vue双方向バインディングの詳細な説明

目次1. 双方向バインディング2. 他のタグを選択した場合にも同じ結果になりますか? 答えはもちろん...

Nginx proxy_redirect の使用方法の詳細な説明

今日、Apache の nginx リバース プロキシを実行していたときに、ちょっとした問題に遭遇し...

ウェブデザイナーは適した人材

<br />この世に道はない。より多くの人が歩くようになると、それは道になります。最初は...

CSS3 で Taobao に空白スペースを実装する方法

Taobao用の空白スペースを作成します。 ブラウザページを縮小すると、コンテンツ領域は縮小されませ...

Vue3 カプセル化された虫眼鏡コンポーネントのサンプルコード

目次コンポーネントインフラストラクチャ目的: 画像拡大鏡機能を実現するvueuseをインストールする...

win10 mysql 5.6.35 winx64 無料インストールバージョン設定チュートリアル

mysql 5.6.35 winx64無料インストールバージョン構成チュートリアルwin10、具体的...

ページ内の検索エンジンの呼び出しはBaiduを例に挙げています

今日、突然、自分のウェブページで Google や Baidu のような強力な検索エンジンを呼び出す...

CSSをiPhoneのフルスクリーンに適応させる方法

1. メディアクエリ方式 /*iPhone X への適応*/ @media 画面のみ、(デバイス幅:...

CSSを使用してHTMLテキストボックス内のテキストの垂直方向の中央を制御する

Text の height 属性が定義されている場合、Text に入力されたテキストは垂直方向に中央...

Docker が MySQL イメージをプルするのが遅すぎる問題を解決する

Docker を使用して MySQL イメージをプルしようとして 30 分経っても失敗したため、代わ...

Docker を使用した Redis マスタースレーブレプリケーションの実践の詳細説明

目次1. 背景2. 操作手順3. Dockerをインストールする4. 主なサービス構成5. サービス...

MySQL 5.7.18 バージョンの無料インストール構成チュートリアル

MySQLはインストール版と無料インストール版に分かれていますインストール版の拡張子はmsi、無料イ...

Web フォントの読み込みを最適化する方法をご存知ですか?

タイトル通りです!一般的に使用される font-family はブラウザの組み込みフォントを読み込み...