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

推薦する

CSS スクロールバースタイル変更コード

CSS スクロールバースタイル変更コード .scroll::-webkit-scrollbar { ...

MySQLはJSON内部フィールドを抽出し、数値としてダンプします

目次背景問題分析1. 属性値はJson形式であり、Json操作関数を使用して処理する必要があります。...

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

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

docker リモート API のワンクリック TLS 暗号化の実装

目次1. Docker の 2375 ポートを別のポートに変更します。これは一時的な対策にすぎません...

MySQL 集計関数のネストされた使用操作

目的: MySQL 集計関数のネストされた使用集計関数は直接ネストできません。例: max(coun...

リンクをクリックしたときにファイルのダウンロードダイアログボックスをポップアップ表示するには、HTML で href を使用します。

今日、新しい技を学びました。あまりやったことがなかったので、今まで知りませんでした...目的: リン...

mybatis-plusページングパラメータが渡された後、SQLのwhere条件にはページング情報操作の制限がありません

2時間近くかけて、さまざまな方法を試しました。後で、whereでフィルタリングした後のデータ量が1ペ...

CSS 背景画像を設定するための 6 つの興味深いヒント

background-image は、おそらくすべてのフロントエンド開発者がキャリアの中で少なくとも...

MySQL Installer 8.0.21 インストール チュートリアル (画像とテキスト付き)

1. 理由新しいシステムに MySQL を再インストールする必要があったので、将来詳細を忘れた場合...

MySQL btree インデックスとハッシュ インデックスの違い

MySQL では、ほとんどのインデックス (PRIMARY KEY、UNIQUE、INDEX、FUL...

MySQL 8.0 再帰クエリの簡単な使用例

序文この記事では、MySQL 8.0 の新機能を使用して再帰クエリを実装します。詳細なサンプル コー...

MySQL エラー 1290 (HY000) の解決方法

私は長い間問題に取り組み、文法上の問題を何度も確認しました。しかし、後でネットで調べてみたら、突然理...

nginxで静的リソースを公開する方法

ステップ準備した静的リソースファイルを指定されたフォルダに配置しますnginx 設定ファイルを変更す...

MySQLトランザクションとMySQLログの詳細な説明

取引特性1. アトミック性: トランザクションの開始後、すべての操作が完了するか、まったく実行されな...

js を使ってシンプルな虫眼鏡効果を実現

この記事の例では、参考までに簡単な虫眼鏡効果を実現するためのjsの具体的なコードを共有しています。具...