Dockerを使用して完全な開発環境を構築するための詳細なチュートリアル

Dockerを使用して完全な開発環境を構築するための詳細なチュートリアル

DNMP の紹介

DNMP (Docker + Nginx + MySQL + PHP7/5 + Redis) は、フル機能のLNMP ワンクリック インストーラーです。豊富なサービス、強力な機能、使いやすさ、複数のプラットフォームとの互換性をサポートします。複数のターミナルに適した、docker 開発および本番環境用の PHP 環境の完全なセットです。

DNMP プロジェクトの特徴:

  • 100%オープンソース
  • Docker標準に100%準拠
  • 複数のバージョンの PHP の共存をサポートし、任意に切り替えることができます (PHP5.4、PHP5.6、PHP7.1、PHP7.2、PHP7.3)
  • 任意の数のドメイン名のバインドをサポート
  • HTTPS および HTTP/2のサポート
  • PHPソースコード、MySQLデータ、設定ファイル、ログファイルはすべてホストで直接変更および表示できます。
  • 組み込みの完全なPHP拡張機能インストールコマンド
  • デフォルトでは、 pdo_mysqlmysqlimbstringgdcurlopcacheなどの一般的な拡張機能をサポートしており、環境に応じて柔軟に設定できます。
  • 一般的なサービスはワンクリックで選択できます:
  1. 複数の PHP バージョン: PHP5.4、PHP5.6、PHP7.1-7.3
  2. Web サービス: Nginx、Openresty
  3. データベース: MySQL5、MySQL8、Redis、memcached、MongoDB、ElasticSearch
  4. メッセージキュー: RabbitMQ
  5. 補助ツール: Kibana、Logstash、phpMyAdmin、phpRedisAdmin、AdminMongo
  6. 実際のプロジェクトに適用され、 100%可用性が確保されます
  7. すべてのイメージは公式Dockerリポジトリからのものであり、安全で信頼性があります
  8. 一度だけの設定で、 Windows、Linux、MacOsで利用可能
  9. 拡張機能コマンドinstall-php-extensions apcuのクイックインストールをサポート
  10. 具体的な使用方法のドキュメントについては、https://gitee.com/bruce_qiq/dnmp/blob/master/README.md を参照してください。ドキュメントにはすでに明確な使用方法のチュートリアルがあります。次に、インストール後の基本的な操作の簡単なデモンストレーションを行います。一部の操作はソースドキュメントではあまり詳細に説明されておらず、明らかな落とし穴があるためです。主にいくつかの機能を記録:

1. MySQL に接続できない問題を修正しました。

2. NGINX 仮想ドメイン名を設定します。

3. PHP拡張機能をインストールします。

このパッケージを自分の開発環境として引き続き使用することを計画しているため、後でさまざまな問題をまとめ、元の所有者のリポジトリに基づいて反復的な更新も行います。フォロー歓迎します。公会計カードの技術サークル II

MySQL接続の問題を修正

dnmp はインストール中にローカル ポート 3305 を MySQL コンテナのポート 3306 にマップするため、接続時にはポート 3305 に接続する必要があります。

サンプル コードの www ディレクトリの下に、localhost ディレクトリがあります。次のように、MySQL をテストするためのコードが見つかります。

// MySQL サービス関数 getMysqlVersion() を検出する
{
  (拡張機能がロードされた場合('PDO_MYSQL')){
    試す {
      $dbh = 新しい PDO ('mysql:host=192.168.2.103;dbname=mysql', 'root', '123456');
      $sth = $dbh->query('バージョンとしてVERSION()を選択します');
      $info = $sth->fetch();
    } キャッチ (PDOException $e) {
      $e->getMessage() を返します。
    }
    $info['version']を返します。
  } それ以外 {
    'PDO_MYSQL 拡張機能がインストールされていません ×' を返します。
  }
}

コードを次のように変更するだけです。

// MySQL サービス関数 getMysqlVersion() を検出する
{
  (拡張機能がロードされた場合('PDO_MYSQL')){
    試す {
      $dbh = 新しい PDO ('mysql:host=192.168.2.103;port=3305;dbname=mysql', 'root', '123456');
      $sth = $dbh->query('バージョンとしてVERSION()を選択します');
      $info = $sth->fetch();
    } キャッチ (PDOException $e) {
      $e->getMessage() を返します。
    }
    $info['version']を返します。
  } それ以外 {
    'PDO_MYSQL 拡張機能がインストールされていません ×' を返します。
  }
}

ここで 192.168.2.103 はホスト マシンの IP アドレスです。実際の状況に応じて入力できます。 ifconfig を通じて表示できます。 Windows システムの場合は、ipconfig を使用して確認します。

 ifconfig

NGINXドメイン名を設定する

設定する前に、いくつか明確にしておくべき点があります。ソース コード ディレクトリ、NGINX 構成ファイル、NGINX ログ ファイルの場所。特記事項:

1. スクリーンショットから、conf.d ディレクトリの下に 2 つの設定ファイルがあることがわかります。これら 2 つは事前に設定したドメイン名ファイルです。このファイルは、NGINX コンテナを通じてローカル ディスクにマップされます。したがって、ホストマシンを通じて表示できます。

2. ログ ファイルは、NGINX のエラー、アクセス、およびその他の関連ログ ファイルであり、NGINX コンテナー内のホストにもマップされます。

3. ここでの www はプログラム ソース コードのパスであり、すべてのプログラム ソース コードをここに配置できます。

NGINX ドメイン名設定ファイルは、ホストマシンに書き込むのではなく、コンテナに入って書き込むことをお勧めします。

ステップ 1: www ディレクトリに移動してアプリケーションをインストールします。インストールには compser を使用することをお勧めします。composer を使用する場合は、簡単な設定に関するドキュメントを参照することもできます。

ert@ertiaodeMac-mini  ~/develop/env/dnmp/www   master ●  composer create-project topthink/think=5.1.35 tp5
「./tp5」に「topthink/think=5.1.35」プロジェクトを作成する
topthink/think (v5.1.35) のインストール
 - topthink/think (v5.1.35) のインストール: キャッシュから読み込み
/app/tp5にプロジェクトを作成しました
パッケージ情報を含む Composer リポジトリの読み込み
依存関係の更新(require-devを含む)
パッケージ操作: インストール 2 回、更新 0 回、削除 0 回
 - topthink/think-installer (v2.0.0) のインストール: キャッシュから読み込み中
 - topthink/framework (v5.1.39) のインストール: キャッシュから読み込み
ロックファイルの書き込み
自動ロードファイルの生成
 ert@ertiaodeMac-mini  ~/develop/env/dnmp/www   マスター ●  ll
合計 0
drwxr-xr-x 3 ert スタッフ 96B 9 6 22:02 ローカルホスト
drwxr-xr-x 19 エルトスタッフ 608B 9 8 22:26 tp5

このようにして、tp5 フレームワークがローカルに設定されます。ステップ 2: NGINX コンテナに入り、docker ps で Docker コンテナのコンテナ ID を表示し、docker exec コマンドを使用してコンテナに入ります。

ert@ertiaodeMac-mini  ~/develop/env/dnmp/www   マスター ●  docker ps
コンテナID イメージ コマンド 作成ステータス ポート名
0f5f9cd08aa2 dnmp_php "docker-php-entrypoi…" 27 時間前 約 1 時間前 9000/tcp、9501/tcp php
8bc44fc8c578 dnmp_nginx "/docker-entrypoint.…" 27 時間前 26 時間前 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp nginx
f02ad53bf14d mysql:5.7.28 "docker-entrypoint.s..." 27 時間前 26 時間前にアップ 33060/tcp、0.0.0.0:3305->3306/tcp mysql5
 ert@ertiaodeMac-mini  ~/develop/env/dnmp/www   マスター ●  docker exec -it 8bc44fc8c578 /bin/sh
/www#ls
ローカルホスト tp5

NGINX設定ファイルのパスを入力してください

/ # cd /etc/nginx/
/etc/nginx # ls -la
合計60
drwxr-xr-x 1 ルート ルート 4096 9月 8日 20:23 。
drwxr-xr-x 1 ルート ルート 4096 9月 7日 19:34 ..
drwxr-xr-x 5 ルート ルート 160 9月8日 20:05 conf.d
-rw-r--r-- 1 ルート ルート 429 9月 6日 22:02 fastcgi-php.conf
-rw-r--r-- 1 ルート ルート 1077 7月 8日 00:14 fastcgi.conf
-rw-r--r-- 1 ルート ルート 1062 9月 6日 22:02 fastcgi_params
-rw-r--r-- 1 ルート ルート 2837 7月 8 00:14 koi-utf
-rw-r--r-- 1 ルート ルート 2223 7月 8 00:14 koi-win
-rw-r--r-- 1 ルート ルート 5231 7月 8日 00:14 mime.types
lrwxrwxrwx 1 root root 22 Jul 11​​ ​​04:27 モジュール -> /usr/lib/nginx/modules
-rw-r--r-- 1 ルート ルート 760 9月 6日 22:02 nginx.conf
drwxr-xr-x 2 ルート ルート 4096 9月8日 20:23 書き換え
-rw-r--r-- 1 ルート ルート 636 7月8日 00:14 scgi_params
-rw-r--r-- 1 ルート ルート 664 7月 8日 00:14 uwsgi_params
-rw-r--r-- 1 ルート ルート 3610 7月 8 00:14 win-utf

conf.d はドメイン名の設定パスであり、nginx はデフォルトの設定ファイルです。

ドメイン構成ファイルを作成します。

/etc/nginx # conf.d/ を cd し、tp5.conf をタッチします
/etc/nginx/conf.d # ls -la
合計 16
drwxr-xr-x 5 root root 160 9月8日 20:05 .
drwxr-xr-x 1 ルート ルート 4096 9月 8日 20:23 ..
-rw-r--r-- 1 ルート ルート 48 9月 6 22:02 .gitignore
-rw-r--r-- 1 ルート ルート 2254 9月 6日 22:02 localhost.conf
-rw-r--r-- 1 ルート ルート 505 9月8日 20:29 tp5.conf

tp5.conf ファイルを設定します。次の内容をコピーします。

サーバー{
  聞く 80;
  サーバー名 tp5.com;
  ルート /www/tp5/public;
  インデックスindex.php;
  #NGINX ログ ファイル。別のドメイン名の場合は、ファイル名を nginx.tp5.com.xx.log に置き換えます。
  アクセスログ /var/log/nginx/nginx.tp5.com.access.log;
  エラーログ /var/log/nginx/nginx.tp5.com.error.log;
  #Thinkphp5 の URL 書き換えファイルは、繰り返しの書き込みを回避し、別のファイルに配置します。将来的には、他の thinkphp プロジェクトを直接インポートできます。
  rewrite/thinkphp.conf をインクルードします。
  場所 ~ \.php$ {
      # ここで php は PHP コンテナの名前です。実際の IP に変更できます。IP が変更されるため、推奨されません。
      fastcgi_passphp:9000;
      fastcgi-php.conf をインクルードします。
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      fastcgi_params を含めます。
    }
}

ドメイン名の設定をテストし、NGINX サービスを再起動します。

/etc/nginx/conf.d # nginx -t && nginx -s リロード
nginx: 設定ファイル /etc/nginx/nginx.conf の構文は正常です
nginx: 設定ファイル /etc/nginx/nginx.conf のテストが成功しました
/etc/nginx/conf.d #

ホストマシンのホストファイルにドメイン名を追加します。

アクセステスト

PHP拡張機能のインストール

Docker 環境を構築する場合、PHP の Redis 拡張機能はデフォルトではインストールされません。ここでは Redis 拡張機能を例に説明します。

一部の拡張機能は組み込まれているため (特定の拡張機能については、上記の使用方法のドキュメントを参照してください)、コマンドを使用して直接インストールできます。

PHP拡張機能Redisのインストール

拡張機能のテスト

/www # php --ri redis
レディス
Redis サポート => 有効
Redis バージョン => 5.3.1
......

要約する

これで、docker を使用して完全な開発環境を構築する方法についての記事は終了です。docker を使用して完全な開発環境を構築する方法の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Dockerを使用してOracle開発環境を素早く構築する方法
  • MAC OSXでのDocker開発環境の設定方法の詳細な説明
  • Ubuntu は Docker をベースに LNMP+Redis 開発環境を構築します (画像とテキスト)
  • Docker ベースの PHP 開発環境の構築に関する詳細なチュートリアル

<<:  この記事はVueのライフサイクルを理解するのに役立ちます

>>:  MySQL のロックとトランザクションの簡単な分析

推薦する

Tomcat の 404 エラーの解決方法の詳細な説明

Tomcat テストで 404 問題が発生します。問題は次のとおりです。 HTTP ステータス 40...

Vue+Openlayerはグラフィックスのドラッグと回転変形効果を実現します

目次序文関連資料成果を達成する実装手順序文Openlayer には独自の拡張プラグイン ol-ext...

MySQLのロングトランザクションに関する深い理解

序文:この記事では主にMySQLのロングトランザクションに関する内容を紹介します。例えば、トランザク...

JS を使用した簡単な雪効果の例の詳細な説明

目次序文主な実装コードHTMLコードJSコード序文南の友達の多くは、雪をほとんど見たことがない、ある...

Centos7.5 構成 Java 環境のインストール Tomcat の説明

Tomcat は Java 言語をベースにした Web サーバー ソフトウェアです。この記事では主に...

HTMLコードテキストボックスの制限入力テキストボックスが灰色になり、制限テキストボックスの入力

方法 1: readonly 属性を true に設定します。入力値=読み取り専用 readOnly...

MySQL 8.0.19 インストールチュートリアル

公式サイトからインストールパッケージをダウンロードします: mysql-8.0.19-linux-g...

WeChatアプレットの入力ジッター問題を解決する方法

問題を見つけるまず問題を見てみましょう。ミニプログラムでは、Vant のダイアログ コンポーネント ...

ChromeとIEに対応したWMPに埋め込まれたHTMLの詳細な紹介

実際には、対応する記述方法は多数ありますが、最も一般的なのは object + embedded で...

CSS3 を使用して 3D テキスト ホバー効果を実装するサンプル コード

この記事では、3D テキストのホバー変更効果を実現するための CSS3 のサンプル コードを紹介しま...

リンクをクリックしたときに表示される点線のボックスを削除するいくつかの方法

削除する方法はいくつかあります:リンクを直接追加するonfocus="this.blur(...

Dockerコンテナシェルスクリプトの実行ステータスを監視する方法

シナリオ会社のプロジェクトはDockerでデプロイされています。原因不明ですが、コンテナが時々停止し...

ネイティブjsはショッピングカートのロジックと機能を実装します

この記事の例では、ショッピングカートのロジックと機能を実装するためのjsの具体的なコードを共有してい...

MySQL UPDATE ステートメントの非標準実装コード

今日は、MySQL データベースと SQL 標準 (および他のデータベース) の UPDATE ステ...

JavaScript で知らない Object.entries の使い方

目次序文1. 共通オブジェクトを反復処理するには for...of を使用します2. 通常のオブジェ...