Dockerコンテナの個別展開のためのLNMPの実装

Dockerコンテナの個別展開のためのLNMPの実装

1. 環境整備

各コンテナの IP アドレス:

  • nginx: 172.16.10.10
  • マイSQL: 172.16.10.20
  • 172.16.10.30 のアドレス

LNMP を構築する際の注意事項:

  • 各コンテナのデータは永続化されます。
  • コンテナを再構築した後に IP アドレスが変更されて不要なトラブルが発生するのを防ぐため、コンテナに固定 IP アドレスを割り当てます。
  • クライアントは Nginx のポート 80 にアクセスし、PHP を呼び出して Nginx 経由でデータベースに接続するだけでよいため、「-p」オプションを使用して Nginx のポート 80 をホスト マシンにマップするだけで済みます。他のコンテナーをマップする必要はないため、比較的安全です。

2. ケースの実装

(1)カスタムネットワークを作成する

[root@docker ~]# docker network create -d bridge --subnet 172.16.10.0/24 --gateway 172.16.10.1 lnmp
//カスタム ネットワークを作成し、ネットワーク セグメントとゲートウェイを指定します。ネットワーク セグメントが定義されている場合にのみ、このネットワークを使用してコンテナーに固定 IP を割り当てることができます。

(2)nginxコンテナを実行する

[root@docker ~]# docker run -itd --name test nginx    
//コンテナをランダムに実行し、nginxに必要な設定ファイルを生成します[root@docker ~]# mkdir /wwwroot //ウェブサイトアクセス用のホームディレクトリ[root@docker ~]# mkdir /docker //Nginxの設定ファイル//nginxコンテナの関連ディレクトリをマウントするためのディレクトリを作成します[root@docker ~]# docker cp test:/etc/nginx /docker/
// nginx コンテナ内の nginx ホーム ディレクトリをローカルに作成されたディレクトリ [root@docker ~] にコピーします。# ls /docker/
nginx
[root@docker ~]# docker cp test:/usr/share/nginx/html /wwwroot/
// nginx コンテナ内の Web ルート ディレクトリをローカルに作成されたディレクトリ [root@docker ~] にコピーします。# ls /wwwroot/
html
[root@docker ~]# docker run -itd --name nginx -v /docker/nginx:/etc/nginx -v /wwwroot/html:/usr/share/nginx/html -p 80:80 --network lnmp --ip 172.16.10.10 nginx
// 作成した nginx ネットワークに基づいて Nginx コンテナを実行し、その IP アドレスを指定します。
// データの永続性を実現するために、ディレクトリを nginx 構成ファイルと Web ルート ディレクトリにそれぞれマウントするには、「-v」オプションを使用します。
// データの永続性を実現する過程で、nginx コンテナ内でいくつかの基本コマンドが使用できない問題も解決されます。
// nginx 構成ファイルまたはネットワーク ルート ディレクトリを変更する必要がある場合は、ローカルの /data ディレクトリで対応する操作を実行するだけです。
//Nginx コンテナを実行してテストします [root@docker ~]# echo "hello world" > /wwwroot/html/index.html 
[root@docker ~]# curl 127.0.0.1
こんにちは世界


(3)MySQLコンテナを実行する

[root@docker ~]# docker run --name mysql -e MYSQL_ROOT_PASSWORD=123.com -d -p 3306:3306 --network lnmp --ip 172.16.10.20 mysql:5.7
// lnmp ネットワークに基づいて MySQL イメージを実行し、その IP アドレスを指定します。
//MYSQL_ROOT_PASSWORD=123.com" は、指定された MySQL データベースのルート パスワードです。// サードパーティのグラフィカル ツールを使用してデータベースに接続する必要がある場合は、"-p" オプションを追加して、コンテナーのポート 3306 をホスト マシンにマップします。

(4)PHPコンテナを実行する

[root@docker ~]# docker run -itd --name phpfpm -p 9000:9000 -v /wwwroot/html:/usr/share/nginx/html --network lnmp --ip 172.16.10.30 php:7.2-fpm
//phpfpm というコンテナを実行し、ポートをマップし、対応するディレクトリをマウントして、IP アドレスを指定します //マウントされたディレクトリは、nginx コンテナの設定ファイルを変更する必要があるため、nginx のメイン ディレクトリと同じです [root@docker ~]# cd /wwwroot/html/
[root@docker html]# vim test.php
<?php
phpinfo();
?>

(5)nginxとphpを接続するためにnginx設定ファイルを変更する

[root@docker ~]# vim /docker/nginx/conf.d/default.conf
  位置 / {
    ルート /usr/share/nginx/html;
    index index.html index.htm index.php; //このセクションを追加: index.php
  }

  場所 ~ \.php$ {
    root /usr/share/nginx/html; //Web ページのルート ディレクトリの場所を変更します fastcgi_pass 172.16.10.30:9000; //PHP コンテナーの IP アドレスに変更します fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; // $document_root 変数を追加します include fastcgi_params;
  }
[root@docker ~]# docker restart nginx //nginxサービスを再起動します。nginx

この時点で、ブラウザに移動して、nginx サービスと php サービスのインターフェースを確認します...


(6)PHPコンテナとMySQLの連携をテストする

これは、nginx と php 間の接続に問題がないことを示しています。次のステップは、php と mysql 間の接続です。

ここでは、phpMyAdmin データベース管理ツールを使用します。

[root@docker ~]# wget https://files.phpmyadmin.net/phpMyAdmin/4.9.1/phpMyAdmin-4.9.1-all-languages.zip
//phpmyadmin ソースコードパッケージをダウンロード[root@docker ~]# unzip phpMyAdmin-4.9.1-all-languages.zip //ソースコードパッケージを解凍[root@docker ~]# mv phpMyAdmin-4.9.1-all-languages ​​/wwwroot/html/phpmyadmin //解凍したディレクトリの名前を変更します[root@docker ~]# vim /docker/nginx/conf.d/default.conf //Nginx メイン構成ファイルを編集location /phpmyadmin {
    ルート /usr/share/nginx/html;
    インデックス index.html index.htm index.php ;
  }

場所 ~ /phpmyadmin/(?<after_ali>(.*)\.(php|php5)?$) {
    ルート /usr/share/nginx/html;
    172.16.10.30:9000; をパスします。
    fastcgi_index インデックス.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_params を含めます。
  } 


[root@docker ~]# docker restart nginx // nginx コンテナを再起動します [root@docker ~]# docker ps | grep nginx nginx コンテナが正常に動作していることを確認します f8442dc794b9 nginx "/docker-entrypoint.…" 約 1 時間前 24 秒前に起動 0.0.0.0:80->80/tcp nginx

ブラウザ テストにアクセスします。

エラーが表示された場合は、すべてが正しく実行されたことを意味します。通常、このエラーは、PHP を正常にコンパイルしてインストールするときに、「--with-mysql...」などの関連オプションを追加する必要があるために表示されます。このページを見ると、実行している PHP コンテナがデータベースに関するオプションを追加していないことは明らかです。次に、これらの問題を解決します。

(7)PHPコンテナがMySQLデータベースとの関連付けをサポートしていない問題を解決する

次のように、docker の公式 Web サイトにログインし、「PHP」を検索してクリックして入力します。



Docker公式サイトで回答を見ました。次は、元のPHPイメージをベースにDockerfileを書いて、この機能をサポートする新しいイメージを生成してみます!

[root@docker html]# vim Dockerfile #Dockerfileファイルを書き込みます。ファイルの先頭は、公式サイトFROM php:7.2-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-install mysqli pdo pdo_mysql //mysql接続機能をサポートするためにこの行を追加します//記述後、保存して終了します [root@docker html]# docker build -t phpmyadmin . //新しいイメージを生成します。コマンドの末尾の「.」を省略しないでください。
[root@docker html]# docker rm -f phpfpm // 元の PHP コンテナは削除できます [root@docker html]# docker run -itd --name phpfpm -p 9000:9000 -v /wwwroot/html:/usr/share/nginx/html --network lnmp --ip 172.16.10.30 phpmysql
// 新しく作成した PHP イメージに基づいて新しい PHP コンテナを実行します [root@docker ~]# cd /wwwroot/html/phpmyadmin/
[root@docker phpmyadmin]# mv config.sample.inc.php config.inc.php 
[root@docker phpmyadmin]# vim config.inc.php //php設定ファイルを記述する $cfg['Servers'][$i]['host'] = '172.16.10.20'; これをmysqlコンテナのIPアドレスに変更する

[root@docker phpmyadmin]# docker restart phpfpm //phpを再起動します
phpfpm
[root@docker phpmyadmin]# docker ps | grep phpfpm // PHP コンテナが正常に動作していることを確認します c9feb2df0603 phpmysql "docker-php-entrypoi…" 11 分前 起動 約 1 分 0.0.0.0:9000->9000/tcp phpfpm 


これで、Docker コンテナ分離デプロイメント LNMP の実装に関するこの記事は終了です。より関連性の高い Docker 分離デプロイメント LNMP コンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • LNMP と phpMyAdmin を Docker にデプロイする方法
  • dockerでlnmp環境を構築する方法
  • Dockerを使用して統合サービスlnmp環境を作成する
  • Dockerを使用してLNMP環境を構築する詳細な説明
  • Ubuntu は Docker をベースに LNMP+Redis 開発環境を構築します (画像とテキスト)

<<:  MySQL無料インストール版を解凍した後にパスワードが見つからない問題を解決する方法

>>:  Vue3ナビゲーションバーコンポーネントのカプセル化実装方法

推薦する

Ubuntuのソースリスト(ソースリスト)を変更する方法詳細説明

導入Ubuntu のデフォルトのソースは国内サーバーではないため、更新されたソフトウェアのダウンロー...

最新の仮想マシン VMware 14 インストール チュートリアル

まず、VMware 14のアクティベーションコードをお渡ししますFF31K-AHZD1-H8ETZ-...

JavaScriptは、ユーザーがチェックボックスをオンにする必要があるプロトコルの例を実装します。

js では、ログインまたは登録を確認する前に、ユーザーが特定の契約書を読むように設定します (使用...

Vue要素はテーブルの追加、削除、データの変更を実装します

この記事では、テーブル内のデータを追加、削除、変更するためのvue要素の具体的なコードを参考までに共...

MySQL ステートメントを使用した簡単な追加、削除、変更、クエリ操作の例

この記事では、例を使用して、MySQL ステートメントを使用して、単純な追加、削除、変更、およびクエ...

MySQLテーブルのテーブル構造を素早く変更する方法

MySQL テーブルのテーブル構造をすばやく変更する - 「MySQL 管理」から抜粋 ALTER ...

VMware CentOS 仮想マシンのインストールとネットワーク構成のグラフィックチュートリアル

1. CentOSイメージをダウンロードする1.1 ダウンロードウェブサイトhttp://mirro...

最小限のルートファイルシステムを構築するためにbusyboxを移植するための詳細な手順

Busybox: 小さなコマンドが詰まったスイスアーミーナイフ。ステップ1: ディレクトリ構造を作成...

Vue+elementを使用してページ上部のタグを実装する方法の詳細な説明

目次1. ページレンダリング2. タグを切り替える3. タグを削除するこのようなタグはどのように記述...

MySQL 高可用性クラスタの展開とフェイルオーバーの実装

目次1. 内閣府1. コンセプト2. MHAの構成3. MHAの特徴2. MySQL+MHAをビルド...

フロントエンド プロジェクトのデフォルトのスクロール バー スタイルを変更する (概要)

スクロールバーのデフォルトスタイルを変更する必要があるプロジェクトを多数作成しましたが、プラグインを...

Win10環境にMysql5.7.23をインストールする際の問題点と落とし穴

たくさんのチュートリアルを読みましたが、うまくインストールできませんでした。しばらく試行錯誤した後、...

純粋な CSS3 でモバイルの拡大と縮小の効果を実装するためのサンプル コード

この記事では、純粋な CSS3 を使用してモバイル端末での展開と折りたたみの効果を実装するサンプルコ...

ドロップダウンメニューを実装するためのネイティブ js

ドロップダウン メニューも実生活では非常に一般的です。実装に使用される js コードは、タブ選択やア...

MySQL 10進数符号なし更新負数を0に変換

今日、インターフェースの同時実行の問題を検証したところ、これまでredisで解決していた同時実行のプ...