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の使用に関する簡単な説明

推薦する

VUE + OPENLAYERSがリアルタイムポジショニング機能を実現

目次序文1. ラベルスタイルを定義する2. GeoJSONデータのシミュレーション3. Vercto...

nginx を使用した負荷分散モジュールの解釈

目次負荷分散に nginx を使用するための 2 つのモジュール:アップストリームはロードノードプー...

MySQLカスタム関数の原理と使用法の分析

この記事では、例を使用して MySQL カスタム関数の原理と使用方法を説明します。ご参考までに、詳細...

Vue ユニットテストに推奨されるプラグインと使用例

目次フレーム最高レベルのエラー報告活発なコミュニティとチーム冗談モカ推奨プラグインVue テストライ...

MySQL 8.0.13 のインストールと設定のグラフィックチュートリアル

Msyqlデータベースのインストール、参考までに具体的な内容は次のとおりです。 ①ブラウザでhttp...

JavaScript の条件付きアクセス属性と矢印関数の紹介

目次1. 条件付きアクセス属性2. アロー関数の紹介1. 条件付きアクセス属性?. は ES2020...

MySQL の遅いクエリを見つける方法

序文誰もが日常業務で SQL の最適化を経験したことがあると思います。したがって、最適化の前に、遅い...

react setStateの詳細な説明

目次setState は同期ですか、それとも非同期ですか?カスタム合成イベントと React フック...

ウェブ クラスターの Docker Stack 展開方法の手順

Docker はますます成熟し、その機能もますます強力になっています。 Docker Stack を...

Linuxシステムでノードプロセスを実行しているが、プロセスを強制終了できない問題を解決します

まず、Linux システムで実行されているノード プロセスはプロセスを強制終了できないことを紹介しま...

MySQL 全文あいまい検索 MATCH AGAINST メソッドの例

MySQL 4.x 以降では、全文検索 MATCH ... AGAINST モード (大文字と小文字...

LinuxベースのApacheウェブサイトサービス構成の詳細な説明

オープンソース ソフトウェアである Apache は、最も広く使用されている Web アプリケーショ...

ins タグと del タグの属性と使用法

insとdel は、HTML 4.0 で導入され、文書の作成時に作成者が共同作業できるようにし、また...

Vue ページ監視ユーザープレビュー時間機能実装コード

最近のビジネスでは、オンライン トレーニング システムが特定のオンライン プレビュー ページに対する...

MySQL データベース グループ クエリの group by ステートメントの詳細な説明

1: グループ化関数の記述順序 1 選択 ... 2 から ... 3 どこで ... 4 グループ...