Docker を使って LEMP 環境を素早く構築する方法の例

Docker を使って LEMP 環境を素早く構築する方法の例

LEMP(Linux + Nginx + MySQL + PHP)は、基本的に今日のWeb開発者にとって必須の環境です。通常、aptやyumなどのシステムパッケージ管理ツールを通じて直接インストールして使用できます。ただし、互換性を考慮して、システムに付属するソフトウェアソースは更新が遅く、半年ほどで以前のバージョンで停滞することが多く、開発者の新機能のフォローアップテストに影響を与えます。

最新バージョンを追求するために、多くの開発者がソースコード パッケージをダウンロードして自分でコンパイルするようになりましたが、そのプロセスは面倒すぎるため、後に Oneinstack や lamp.sh などのワンクリック インストール パッケージが作成されました。

Docker の起動により、上記のプロセスが大幅に簡素化されます。 Docker Hub には、PHP や nginx などのさまざまなコンポーネントをイメージにパッケージ化するメンテナーが多数います。ユーザーは、関連するイメージをプルするだけで LEMP スタックを構築できます。 Docker ベースの機能には、少なくとも次のような利点があります。

  • すぐに更新し、いつでも指定したバージョンにロールバックできます
  • コンテナの分離、高いセキュリティ
  • システムの残余物や依存関係の競合がない

2 か月前、私は LEMP フレームワーク全体の構築を開始し、必要に応じていくつかのイメージを自分でメンテナンスしました。関連するオーケストレーション テンプレートは、https://github.com/metowolf/docker-lemp でオープン ソースになっています。現在、ブログ全体とAPIサイトはdocker上で稼働しており、動作はかなり安定しています。

容器

コンテナ名バージョン
メトウルフ/php 7.3.1、7.3、7、現在
メトウルフ/nginx 1.15.8、1.15、1、現在
mysql/mysql-サーバー8.0.15
phpmyadmin/phpmyadmin 4.8.5
アビオソフト/キャディ0.11.2
レディス5.0.3-アルパイン

デモ

簡単な例でこれを説明しましょう。

まず、docker および docker-compose 環境をインストールする必要があります。デモンストレーションの便宜上、PWD トライアル ホストを直接使用して実行します。

$ curl -fsSL https://get.docker.com -o get-docker.sh
$ sh get-docker.sh
$ curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose を実行します。

サーバーにログインし、オーケストレーションテンプレートを取得します。

$ git clone https://github.com/metowolf/docker-lemp.git
$ cd docker-lemp

設定ファイルを作成する

$ cp .env.example .env
$ cp docker-compose.example.yml docker-compose.yml

nginx設定を作成する

$ cat > etc/nginx/config/example.conf <<EOF
サーバー{
 聞く 80;
 サーバー名 example.com *.direct.labs.play-with-docker.com;

 ルート /var/www/example.com;
 インデックスindex.php;

 位置 / {
 try_files \$uri \$uri/ /index.php?\$query_string;
 }

 場所 ~ \.php\$ {
 fastcgi_split_path_info ^(.+\.php)(/.+)\$;
 fastcgi_pass php-fpm:9000;
 fastcgi_index インデックス.php;
 fastcgi_params を含めます。
 fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;
 fastcgi_param PATH_INFO \$fastcgi_path_info;
 }
}
終了

phpinfoファイルを作成する

$ mkdir wwwroot/example.com/
$ cat > wwwroot/example.com/index.php <<EOF
<?php
phpinfo();
終了

コンテナを起動する

$ docker-compose up -d php-fpm nginx mysql

起動が成功すると、何も問題がなければポート 80 でおなじみのページが表示されます。

高度なゲームプレイ

クイック

オーケストレーションの例では、quic 機能を取得するために、リバース nginx に caddy を追加しました。 docker の機能を利用すると、caddy がポート 443 udp のみを listen し、nginx が引き続きポート 443 tcp を listen するようにして、TLSv1.3 と quic を同時に考慮できるようになります。

ブラウザにquicへの接続を試みるよう通知するために、nginx設定にリターンヘッダーを追加する必要がある。

add_header alt-svc 'quic=":443"; ma=2592000; v="44,43,39"';

ブロトリ

nginx コンテナでは、必要に応じて有効にできる動的モジュールに brotli をコンパイルしました。

新しいetc/nginx/nginx.conf設定ファイルを作成する

ユーザー nginx;
ワーカープロセスは自動です。

error_log /var/log/nginx/error.log 警告;
pid /var/run/nginx.pid;

# brotli モジュールをマウントします。load_module modules/ngx_http_brotli_filter_module.so;
モジュールモジュール/ngx_http_brotli_static_module.so をロードします。

イベント {
 ワーカー接続 1024;
}

http {
 /etc/nginx/mime.types を含めます。
 デフォルトタイプ アプリケーション/オクテットストリーム;

 log_format main '$remote_addr - $remote_user [$time_local] "$request" '
      '$status $body_bytes_sent "$http_referer" '
      '"$http_user_agent" "$http_x_forwarded_for"';

 access_log /var/log/nginx/access.log メイン;

 ファイル送信オン;
 #tcp_nopush オン;

 キープアライブタイムアウト65;

 #gzip オン;

 /etc/nginx/conf.d/*.conf を含めます。
}

新しいetc/nginx/config/brotli.conf設定ファイルを作成する

ブロトリオン;
brotli_comp_レベル 6;
brotli_types application/x-httpd-php application/javascript application/x-javascript application/xml application/json text/plain text/javascript text/css text/xml image/jpeg image/gif image/png image/svg+xml;

docker-compose.yml を変更して nginx.conf 設定ファイルをマウントします。

---docker-compose.yml
+++ docker-compose.yml
@@ -11,6 +11,7 @@
  -php-fpm
  ボリューム:
  ログファイル
+ - ./etc/nginx/nginx.conf:/etc/nginx/nginx.conf:rw
  - ./etc/nginx/config:/etc/nginx/conf.d:rw
  - ./etc/ssl:/etc/nginx/ssl:rw
  - ./wwwroot:/var/www:rw
@@ -65,6 +66,8 @@

最後に、コンテナオーケストレーションを更新します

$ docker-compose up -d --no-deps --build

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

以下もご興味があるかもしれません:
  • Dockerプライベート倉庫の構築と利用の詳細説明
  • ウェブ クラスターの Docker Stack 展開方法の手順
  • Dockerコンテナのログ処理の詳細な説明
  • 知らないかもしれない奇妙で興味深いDockerコマンド
  • Docker が MySQL を作成する説明
  • CentOSバージョンにDockerをインストールする際のエラーの解決方法
  • Docker を使用して静的 Web サイト アプリケーションを作成する (複数の方法)
  • Spring Boot と Docker を使用してマイクロサービスをデプロイする方法
  • Raspberry PiにDockerをインストールする方法
  • Dockerコンテナはルーティングを介して直接通信し、ネットワーク通信を実現します。

<<:  react setStateの詳細な説明

>>:  MySQL バッチ SQL 挿入パフォーマンス最適化の詳細な説明

推薦する

Nginx ロケーション ディレクティブ URI マッチング ルールの詳細な概要

1. はじめにロケーション命令は、http モジュールのコア構成です。事前に定義された URL マッ...

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

Win10 システムでの MySQL 8.0.20 のインストールと設定の超詳細なチュートリアルMy...

バッチモードでtopコマンドを実行する方法

top コマンドは、Linux システムのパフォーマンスを監視するために誰もが使用している最適なコマ...

MySQL COUNT関数の使用と最適化

目次COUNT 関数は何をするのですか? MyISAMの「魔法」シンプルなCOUNT最適化近似値を使...

CSS3 シンプルカットカルーセル画像実装コード

実装のアイデアまず、親コンテナーを作成し、2 つの順序なしリストを使用して、柔軟なレイアウトで親コン...

Navicat の MySQL へのリモート接続が遅い理由の詳細な説明

最終的な解決策は最後の写真にありますリモート データベース ( Linux システム) に接続したと...

開発をスピードアップできる VueUse ライブラリ 5 つ (まとめ)

目次VueUse にはどのようなユーティリティがありますか? VueUseをVueプロジェクトにイン...

XHTML ドキュメントで JavaScript と CSS を正しく使用する方法

ますます多くのウェブサイトで、XHTML が HTML4 に取って代わって急速に普及しています。しか...

jQuery+swiper コンポーネントはタイムラインのスライド年タブ切り替え効果を実現します

結果: 実装コード: スワイパーコンポーネントと一緒に使用する必要がありますSwiper 基本デモア...

JavaScript の遅延読み込み属性パターンを理解する

従来、開発者はインスタンスで必要になる可能性のあるデータに対して JavaScript クラス内にプ...

Baota Linux パネル コマンド リスト

目次Pagodaをインストールする管理塔Nginx サービス管理Apache サービス管理MySQL...

Windows10にmysql5.7.18をインストールするチュートリアル

このチュートリアルでは、MySQL 5.7.18のインストールと設定方法を参考までに紹介します。具体...

JavaScriptはすべての選択と選択解除の操作を実装します

この記事では、JavaScriptで全選択と全選択解除の操作を実装するための具体的なコードを参考まで...

IIS7 IIS8 http は自動的に HTTPS にジャンプします (ポート 80 はポート 443 にジャンプします)

IIS7 では、「URL REWRITE2」疑似静的モジュールがインストールされているかどうかを確...

Vueのフロントエンドとバックエンドのデータのやり取りと表示を理解する方法

目次1. 技術概要2. 技術的な詳細1. インターフェースからバックエンドデータを取得する2. フロ...