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

推薦する

要素の円弧モーションを実現する CSS3 サンプルコード

CSS を使用して要素の円弧の動きを制御する方法CSS3 の新しい属性 transfrom トランジ...

WeChatアプレットのスケルトン画面の実装例

目次スケルトンスクリーンとはアプレットでスケルトン画面を生成する方法導入方法表示と非表示ユーザーエク...

HTML の表の行と列を結合する問題の解決策の詳細な説明

私たちが構築しようとしていたウェブサイトには、長い文章だけでなく、多数の表も含まれており、表のレイア...

CSSアニメーション属性キーフレームの詳細な説明

コラムを更新してからどれくらい経ったでしょうか?半年ですか?今年の後半は、まさに離陸、つまり文字通り...

mysql5.7.21 utf8 エンコーディングの問題と Mac 環境での解決方法

1. 目標: mysql の character_set_server の値を latin1 から ...

JavaScript 基礎シリーズ: 関数とメソッド

目次1. 関数とメソッドの違い2. 良い関数の書き方2.1 正確な命名2.1.1 関数の命名2.1....

Vue が Web オンラインチャット機能を実現

この記事では、Webオンラインチャットを実装するためのVueの具体的なコードを参考までに紹介します。...

MySQL でのインデックスの追加と削除に関連する操作

目次1. インデックスの役割2. インデックスの作成と削除(1)ALTER TABLE文を使用して、...

JavaScript parseInt() と Number() の違いのケーススタディ

学習目標: parseInt() と Number() という 2 つの関数は、文字列をデータ型に変...

Vue2.0でデータの双方向バインディング機能をjsを使って実装する

Object.definePropertyの理解文法:オブジェクト.defineProperty(o...

Vue が scss (mixin) をグローバルに導入

目次1. ミックスイン.scss 2. 単一ファイルの使用3. グローバルマウント3.1 依存関係の...

Nginx/Httpd ロードバランシング Tomcat 設定チュートリアル

前回のブログでは、Nginx と httpd を使用して、逆生成用のバックエンド Tomcat サー...

VUE ユニアプリの基本コンポーネントの簡単な紹介

1. スクロールビュー垂直スクロールを使用する場合は、固定の高さを指定して CSS で高さを設定する...

新しいカーネルをLinuxシステムに移植する手順

1. ubuntu16.04 イメージと対応する ubuntu16.04 カーネル バージョンのソー...

MySql 共通クエリコマンド操作リスト

MYSQL でよく使用されるクエリ コマンド: mysql> select version()...