LNMP と phpMyAdmin を Docker にデプロイする方法

LNMP と phpMyAdmin を Docker にデプロイする方法

環境準備:

複数のコンテナに基づいてホストに lnmp をデプロイします。
nginx サービス: 172.16.10.10
mysql サービス:172.16.10.20
php サービス:172.16.10.30

コンテナの IP アドレスが固定される問題を解決します。

注: コンテナが停止または削除され、同じコンテナが再度実行されると、その IP アドレスは元のアドレスではなくなるため、コンテナの IP アドレスを指定するにはネットワーク セグメントをカスタマイズする必要があります。

プロジェクト運営:

(1)まずネットワークをカスタマイズします。

[root@sqm-docker01 ~]# docker network create -d bridge --subnet 172.16.10.0/24 --gateway 172.16.10.1 mynet1

(2)nginx、php:fpm、mysql-5.7イメージをダウンロードします。

[root@sqm-docker01 ~]# docker pull nginx 
[root@sqm-docker01 ~]# docker pull php:7.2-fpm <!--php:7.2-fpmのイメージを使用-->
[root@sqm-docker01 ~]# docker pull mysql:5.7 <!--mysql:5.7のイメージを使用--> 

(3)####nginxイメージに基づいてコンテナを実行する#####

#まず nginx サービスを実行して nginx 設定ファイルをコピーします。

パラメータの説明:

  • 実行: 新しいコンテナを作成する
  • -d: バックグラウンドで実行
  • --name: カスタム名は test1 です

ファイルをマウントするホスト上にディレクトリを作成します。

ウェブサイトのメインディレクトリ: /wwwroot;

nginx 設定ファイル: /docker;

[root@sqm-docker01 ~]# mkdir /wwwroot
[root@sqm-docker01 ~]# mkdir /docker

##docker cp コマンドを使用して、nginx 構成ファイルが保存されているディレクトリをローカル マシンにコピーします。

注: docker cp コマンドは、ホストからコンテナにファイルをコピーしたり、コンテナ内のファイルまたはディレクトリをローカル マシンにコピーしたりできます。

[root@sqm-docker01 ~]# docker cp test1:/etc/nginx /docker/ #docker cp を使用して、nginx 構成ファイルが保存されているディレクトリをホストにコピーします

[root@sqm-docker01 ~]# ls /docker/nginx/conf.d/ 

デフォルト.conf

#注意:需要修改的是nginx conf.d目錄下的default.conf文件,而不是nginx.conf 文件。

nginx Web ディレクトリをコピーします。

[root@sqm-docker01 ~]# docker cp test1:/usr/share/nginx/html /wwwroot/
[root@sqm-docker01 ~]# ls /wwwroot/html/
50x.html インデックス.html

nginx のデフォルトのテスト Web ページを変更します。

[root@sqm-docker01 html]# echo "<h1>hello welcome to nginx web</h1>" > index.html 


(4)nginxコンテナを実行します。

コンテナ内のディレクトリをローカルディレクトリにマウントし、IPアドレスを指定します。

[root@sqm-docker01 ~]# docker run -itd --name nginx --network my_net1 --ip 172.16.10.10 -p 80:80 -v /docker/nginx:/etc/nginx -v /wwwroot/html:/usr/share/nginx/html nginx:latest

パラメータの説明:

  • run: コンテナを実行する
  • -itd: i: インタラクティブ
  • t: 擬似端末
  • d: コンテナをバックグラウンドで実行し続ける
  • --network : どのネットワークカードに基づいてネットワークを作成するか
  • --ip: コンテナのIPアドレスを定義します
  • -v = --volume データボリューム、マウントを実行
  • マウント形式: ホスト: コンテナ内
  • p: マップされたポート、ホストポート: コンテナ内のポート

(5)mysqlコンテナを実行します。

[root@sqm-docker01 ~]# docker run --name mysql -e MYSQL_ROOT_PASSWORD=123.com -d -p 3306:3306 --network my_net1 --ip 172.16.10.20 mysql:5.7
-eはコンテナ内の環境変数を設定するためのものです。コンテナに渡されてmysqlパスワードを設定するmysqlパスワード環境変数を設定します。

このマシンで root ユーザーが mysql にログインできるかどうかをテストします。

まず、mysql クライアントをダウンロードする必要があります。

[root@sqm-docker01 ~]# yum -y mysqlをインストールします

(6)PHPコンテナを実行します。

[root@sqm-docker01 ~]# docker run -itd -p 9000:9000 --name phpfpm -v /wwwroot/html:/usr/share/nginx/html --network my_net1 --ip 172.16.10.30 php:7.2-fpm

知らせ:
nginx と PHP が Web ページを保存するためのディレクトリを共有し、PHP が nginx と同じデフォルトの Web ルート ディレクトリを作成することを確認します (-v がマウントされている場合、コンテナー内にディレクトリが存在しない場合は自動的に作成されます)。

(7)nginxとphp-fpmを設定します。

nginx を解析するには PHP を設定する必要があります。

簡単なテスト Web ページを作成します。

次に、nginx 構成ファイルを変更する必要があります。

[root@sqm-docker01 html]# vim /docker/nginx/conf.d/default.conf 


(8)mysqlを設定する:

phpMyadmin の設定:

phpMyAdmin は、Web サイト ホスト上の PHP ベース、Web ベースの MySQL データベース管理ツールであり、管理者は Web インターフェイスを使用して MySQL データベースを管理できます。この Web インターフェイスは、特に大量のデータをインポートおよびエクスポートする場合に、複雑な SQL 構文を簡単に入力するためのより優れた方法です。最大の利点の 1 つは、phpMyAdmin が他の PHP プログラムと同様に Web サーバー上で実行されるため、これらのプログラムによって生成された HTML ページをどこからでも使用できることです。つまり、MySQL データベースをリモートで管理し、データベースとテーブルを簡単に作成、変更、削除できます。
[root@sqm-docker01 html]# pwd
/wwwroot/html

現在のディレクトリに解凍します:

[root@sqm-docker01 html]# phpMyAdmin-4.9.1-all-languages.zip を解凍します

名前を変更:

[root@sqm-docker01 html]# mv phpMyAdmin-4.9.1-すべての言語phpmyadmin

nginx 設定ファイルを変更します - phpMyAdmin との接続を設定します。

[root@sqm-docker01 html]# vim /docker/nginx/conf.d/default.conf 

元の場所構成項目をコピーし、次の 2 つの場所構成セクションを追加します。

nginx 設定ファイルを変更したら、nginx を再起動します。

テスト Web ページにアクセスしてください:

コンテナ内のポートはホストにマッピングされているので、ホストアドレス172.16.1.30に直接アクセスします。

PHP にアクセスして nginx Web ページを解析します。

次に、phpMyAdmin へのログインをテストします。

URLにアクセス: http://172.16.1.30/phpmyadmin/index.php

mysqli モジュールが欠落しているためアクセスできません。そのため、mysql 構成モジュールをサポートするために php を追加する必要があります。

コンテナに拡張モジュールを追加する方法については、dockerhub にログインして関連ドキュメントを照会できます。

リンクパス: https://hub.docker.com/


上記の Dockerfile スクリプトをコピーしてローカルにインストールします。

いくつかの追加コンテンツを追加する必要があることに注意してください。

[root@sqm-docker01 ~]# vim Dockerfile
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

Dockerfile をビルドします。

[root@sqm-docker01 ~]# docker build -t phpfpm-mysqli .

パラメータの説明:

  • ビルド: ビルド
  • -t : タグを指定する
  • . は現在のディレクトリにあるDockerfileを示します

ビルドが完了したら、元の PHP イメージを削除し、正常にビルドされて mysqli モジュールをサポートするイメージを実行します。

[root@sqm-docker01 ~]# docker stop phpfpm 
phpfpm
[root@sqm-docker01 ~]# docker rm phpfpm 
phpfpm
[root@sqm-docker01 ~]# docker run --name phpfpm -d -p 9000:9000 -v /wwwroot/html:/usr/share/nginx/html --network my_net1 --ip 172.16.10.30 phpfpm-mysqli:latest

#Mirror は、ビルドしたばかりの Dockerfile によって生成されたイメージ名を指定します。

phpMyAdmin のデフォルトのサンプル (サンプル ファイル) を変更します。

設定ファイルで使用する場合は、名前を変更してサンプルを削除する必要があります。

[root@sqm-docker01 phpmyadmin]# パスワード
/wwwroot/html/phpmyadmin
[root@sqm-docker01 phpmyadmin]# cp config.sample.inc.php config.inc.php

設定ファイルを変更します。

[root@sqm-docker01 phpmyadmin]# vim config.inc.php 

設定ファイルを変更したら、PHP を再起動します。

[root@sqm-docker01 phpmyadmin]# dockerを再起動しますphpfpm 
phpfpm

phpMyAdmin Web ページにアクセスします。

URLを入力してください: http://172.16.1.30/phpmyadmin/index.php

#ユーザー名とパスワードはデータベースのログインパスワードです

mysql データベースに正常にアクセスしました。 。 。 。 。 。

この時点で、docker 内の複数のコンテナ間での lnmp の展開は完了です。

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

以下もご興味があるかもしれません:
  • Mac で docker を使って PHP 開発環境を構成する方法
  • PHP の Docker インストールと Nginx を使用したデプロイメントの例
  • DockerにPHP拡張機能をインストールする手順の説明
  • Docker を使用して OpenLDAP+phpLDAPadmin 統合ユーザー認証を構築する方法
  • Docker ビルド PHP 環境チュートリアル詳細説明
  • docker に php-fpm サービス/拡張機能/構成をインストールする詳細なチュートリアル
  • PHP環境構築におけるDockerの柔軟な実装
  • PHP は docker を使用してワーカーマンを実行するケースの説明

<<:  Win10 での MySQL 8.0.15 のインストールと設定のグラフィック チュートリアル

>>:  Web Storage APIの使用に関する簡単な説明

推薦する

CentOS 8 に htop をインストールする方法のチュートリアル

システムをインタラクティブに監視したい場合は、htop コマンドが最適な選択肢の 1 つです。 ht...

MySQL の遅いクエリ操作の例の分析 [有効化、テスト、確認など]

この記事では、MySQL のスロー クエリ操作について例を挙げて説明します。ご参考までに、詳細は以下...

Nginx がサーバーの生存状態をパッシブにチェックする詳細な説明

導入定期的にヘルスチェックを送信して、アップストリーム グループ内の HTTP サーバーのヘルスを監...

MySQL の準同期レプリケーションについての簡単な説明

導入MySQL はレプリケーションを通じてストレージ システムの高可用性を実現します。現在、MySQ...

Nginx の負荷分散方法の概要

負荷分散を理解するには、まずフォワード プロキシとリバース プロキシを理解する必要があります。注記:...

Vue スクロールダウンしてさらにデータを読み込む スクロールケースの詳細な説明

vue-無限スクロールインストール npm インストール vue-infinite-scroll -...

springcloud alibaba nacos linux 設定の詳細なチュートリアル

まず、github から nacos の圧縮パッケージをダウンロードします: https://git...

MySQL は、元のデータと同じデータがある場合、更新ステートメントを再度実行しますか?

背景この記事では主に、MySQL が更新ステートメントを実行するときに、元のデータと同一の (つまり...

MySQLで判定文を書く方法のまとめ

MySQL で判断文を書く方法:方法1. CASE関数case関数の構文: CASE条件 値1の場合...

HTMLの水平線注釈とコードコメントの使い方をマスターするだけです

水平線<hr /> タグを使用して、現在の位置に水平の分割線を描画します。例: XML/...

MySQLがフルテーブルスキャンを実行するいくつかの状況

目次ケース1:ケース2:ケース3:簡単にまとめると:過去 2 日間で、完全なテーブル スキャンを引き...

MySQL 8.0.22 解凍版インストールチュートリアル(初心者向け)

目次1. リソースのダウンロード2. ソフトウェアを解凍する2.1 場所を選択する2.2 名前を変更...

数十行のjsを使用してクールなキャンバスインタラクティブ効果を実現する方法を教えます

目次1. 円を描く2. マウスで動かした円3. マウスでドラッグした粒子4. カラーグラデーション粒...

Linux での MySQL 8.0 インストール チュートリアル

この記事では、LinuxでMySQL 8.0をインストールする方法を紹介します。具体的な内容は次のと...

React refsの詳細な紹介

1. 何ですかRefs 、コンピューターでは Resilient File System (ReF...