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 挿入パフォーマンス最適化の詳細な説明

推薦する

CentOS での samba フォルダ共有サーバー構成の詳細な説明

1. はじめに最近、CentOS での開発には多くの不便があることがわかりました。Windows/M...

進捗バー効果を実現するJavaScript

この記事では、プログレスバー効果を実現するためのJavaScriptの具体的なコードを参考までに紹介...

Linuxコマンドのファイル上書きとファイル追加の詳細な説明

1. コマンド > と >> の違いコマンド>: ファイルが存在する場合は、...

Windows Server win2003、win2008R2、win2012、win2016、win2019 システム バージョン間の違い

最近、Microsoft は 2019 サーバー システムをリリースしました。一般的に、Micros...

Linux ログ表示方法 6 つのまとめ

バックエンド プログラマーは、さまざまな場所で Linux を扱います。Linux ログの読み方がわ...

Linux CentOS インストール JDK および Tomcat チュートリアル

まずJDKをダウンロードします。ここではjdk-8u181-linux-x64.tar.gzを使用し...

Docker パッケージング ノード プロジェクトのプロセスの説明

バックエンド プログラマーとして、フロントエンドのものをいじらなければならないこともあります。そこで...

Docker+Jenkinsによる自動デプロイの実現方法

Code Cloud を使用して Git コード ストレージ ウェアハウスを構築するhttps://...

MySQLがファントムリードを解決する方法の詳細な説明

1. ファントムリーディングとは何ですか?トランザクションにおいて、複数のクエリの後に結果セットの数...

IE10以下のimgタグ問題の解決方法

問題を見つける以前、簡単なデモを書いたのですが、IE10以下では動作しないことがわかりました。ここに...

MySQL GRANT ユーザー認証の実装

承認とは、ユーザーに特定の権限を付与することです。たとえば、新しく作成したユーザーに、すべてのデータ...

純粋なCSSを使用してスイッチ効果を実現する

まずアイデアはこの効果を実現するには、 <input type="checkbox&...

JSデータ型検出のさまざまな方法の概要

目次背景データ型を決定する方法は何ですか? 1. typeof を使用して基本データ型を決定します。...

CSS3 Flex エラスティックレイアウトのサンプルコードの詳細な説明

1. 基本概念 //任意のコンテナを Flex レイアウトとして指定できます。 。箱{ ディスプレイ...

MySQL での order by の使用に関する詳細

目次1. はじめに2. 本文2.1 単一列のソート2.2 複数の列を並べ替える2.3 ソート方法2....