今回はDockerでPHP開発環境を構築する際の注意事項をご紹介します。実際の事例をいくつかご紹介しますので、一緒に見ていきましょう。
1. はじめに
1.1 Docker を使用する理由
そのようなシナリオはありますか? ローカルで開発するときに環境をセットアップする必要があります。また、会社に行くときにも環境をセットアップする必要があります。こっそり遊びたい場合は環境を整える必要があります。環境依存性がかなり高いので、それに合わせないと不十分です。このとき Docker があれば、マシンに Docker をインストールして、記述した Dockerfile を置くだけで、コマンド行 1 行で自動的に完了するので便利で効率的ですよね。 1.2 準備
次に、この記事では、zPhal-dockerfiles を例として、PHP 開発環境をセットアップする方法を紹介します。これは、私のブログ システム用に用意した Dockerfile のセットです。
Windows、Mac、Linux のいずれであっても、Windows 10 システムを含む Docker は非常に優れたサポートを提供しますが、より多くのメモリを消費します。
Docker コマンド ラインを介して、イメージのプル、コンテナーの実行、コンテナー内でのコマンドの実行など、多くのことを行うことができますが、現在は、より単純で粗雑な方法を使用して Dockerfile を作成し、管理する必要があります。これらのドキュメントは、操作プロセスを簡素化します。
Dockerfile とは何ですか?
Dockerfile は、一連のコマンドとパラメーターで構成されるスクリプトであり、これらのコマンドはプルされたベース イメージに適用され、最終的に、インストールするものを含む必要なイメージを作成できます。ソフトウェアは、インストールする拡張機能や実行するコマンドなどをあらかじめカスタマイズしてワンクリックで実行することに相当し、操作プロセスが大幅に簡素化されます。
この記事に従って環境をセットアップするには、次のことを行う必要があります:
まず、Docker と Docker のいくつかの基本操作、および docker-compose とは何かを理解します。
次に、Docker と docker-compose をインストールする必要があります。ここでは、docker-compose を使用して Dockerfile を管理します。 Dockerfile の作成は生きているものであり、死んだものではないことに注意してください。作成する Dockerfile は、ニーズに応じて異なります。
Docker の公式ドキュメントは非常に明確ですが、質問がある場合は、Docker ドキュメントを参照することをお勧めします。
2. 書き込みを開始します
以下では、zPhal-dockerfiles を例として説明します。リンクをクリックすると、完全なファイルが表示されます。
2.1 プレビュー
まず、私が作成した Dockerfile プロジェクトは、大まかに次のディレクトリに分かれています (もちろん、これは私が決めたものであり、ファイルをこのようにフォーマットする必要はありません)。
zPhal-dockerfiles app/ index.php phpinfo.php data/ .gitignore files/ mysql/ conf.d/ mysql-file.cnf Dockerfile nginx/ conf.d/ default.conf zphal.conf Dockerfile nginx.conf php/ pkg/ .gitignore Dockerfile php.ini php-dev.ini php-fpm.conf redis/ Dockerfile docker-compose.yml logs/ .gitgnore README.md
In このプロジェクトでは、PHP、MySQL、Nginx、Redis、Composer、Phalcon 拡張機能などを使用しました。
これを行うには、一般に 3 つのプロセスがあります: 各ソフトウェアの Dockerfile を作成する;
構成ファイルを作成する; 構成構成ファイルを Dockerfile ファイルにスローしてミラーにビルドすることを含む、すべての Dockerfile を処理する。 2.2 Dockerfileの作成
2.2.1 PHP
以下はPHP用のDockerfileです:
FROM php:7.2-fpm
MAINTAINER goozp "gzp@goozp.com"
タイムゾーンを設定します
ENV TZ =Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
依存関係パッケージと PHP コア拡張機能を更新してインストールします
RUN apt-get update && apt-get install -y \ git \ libfreetype6-dev \ libjpeg62-turbo-dev \ libpng-dev \ && 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 zip \ && docker-php-ext-install pdo_mysql \ && docker-php-ext-install opcache \ && docker-php-ext-install mysqli \ && rm -r /var/lib/apt/lists/*
pre をコピーします-ダウンロードした拡張パッケージをホストにコピーします
COPY ./pkg/redis.tgz /home/redis.tgz COPY ./pkg/cphalcon.tar.gz /home/cphalcon.tar.gz
ここでは Redis をインストールしています
pecl install /home/redis.tgz && echo "extension=redis.so" > etc/php/conf. d/redis.ini
サードパーティの拡張機能をインストールします。これは Phalcon 拡張機能です
RUN cd /home \ && tar -zxvf cphalcon.tar.gz \ && mv cphalcon-* phalcon \ && cd phalcon/build \ && ./install \ && echo "extension=phalcon.so" > /usr/local/etc/php/conf.d/phalcon.ini
Composer をインストールします
ENV COMPOSER_HOME /root/composer RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer ENV PATH $COMPOSER_HOME/vendor/bin:$PATH RUN rm -f /home/redis.tgz \ rm -f /home/cphalcon.tar.gz WORKDIR /data Write Permission RUN usermod -u 1000 www-data
最初の行はベースイメージを定義します。ここでは PHP 7.2 の fpm バージョンを使用します。ここで、2 行目はメンテナンス By を定義しています。
次のステップはタイムゾーンを定義することです。この文は主にすべてのコンテナーの時間をホストと同期するために、すべての Dockerfile で定義されます。実際には、docker-composer.yml ファイルで次のように定義できます。
services: php-fpm:volumes: - /etc/localtime:/etc/localtime:roただし、Windows などの Linux 以外のシステムで実行している場合、/etc/localtime を取得できません。互換性の向上 すべてのプラットフォームで、時間を Dockerfile に同期します。
set timezome
FROM mysql:5.7MySQL には特別なものは何もなく、公式イメージを使用するだけです。 2.2.4 Redis以下はRedisで、公式イメージもそのまま使用しています:set timezome
ENV TZ=Asia/ShanghaiRUN ln -snf /usr/share/zoneinfo/$TZ / etc/ localtime && echo $TZ > /etc/timezone
FROM redis:3.22.3 設定ファイルの書き方 PHP 設定ファイルは PHP ディレクトリに配置されます。 Nginx 設定は Nginx ディレクトリに配置されます。conf.d フォルダーなどの新しいサブフォルダーを作成するかどうかは状況によって異なります。 以下では、Nginx 設定ファイルを例として取り上げます。まず、Nginx ディレクトリは次のようになります: nginx/conf.d/default.conf zpal.confDockerfilenginx.conf conf に加えて、すべてのドメイン名設定ファイルを保存するために使用されるサブフォルダー conf.d も Linux で PHP 環境を構築したことがある方にはよく知られているはずです。これらの構成ファイルは、その時点でコンテナに転送されるファイルであり、ホスト上では使用されません。 注意すべき最も重要なことは、構成ファイルに表示されるパスは、ホストへのパスではなく、コンテナ内の環境へのパスであるということです。各コンテナには、これらのミニチュア システムである実行環境があります。パスはすべてコンテナ内のパスです。コンテナー内でマウントして通信することでファイルを同期できます。コマンド ラインでコンテナーを起動するには、このステップを解決するために docker-compose も使用します。 設定ファイルの例を次に示します:set timezome
ENV TZ=Asia/ShanghaiRUN ln -snf /usr/share /zoneinfo/ $TZ /etc/localtime && echo $TZ > /etc/timezone
server { listen 80 default; index index.html index.htm; server_name localhost docker; root /data/www; index index.php index.html index.htm; location / { try_files $uri $uri/ /index.html; } location ~ \.php { include fastcgi_params; fastcgi_pass php-fpm:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /data/www/$fastcgi_script_name; } }
而root /data/www中,/data/www路径,是到时候Nginx容器的路径,而不是当前在操作的宿主机的路径,所以到时候我们要挂载Web程序放的位置到这个路径。
2.4 编写 docker-compose.yml
在PHP、Nginx等目录的同级,我们创建一个docker-compose.yml,我们在执行docker-compose相关命令时,会自动找到这个文件,并根据里面的内容来执行。
接上面Nginx的例子,我们先谈挂载,因为这是最重要的一步。在docker-compose.yml中,Nginx的部分:
build: ./nginx depends_on: - php-fpm links: - php-fpm:php-fpm volumes: - ../app:/data/www:rw - ./nginx/conf.d:/etc/nginx/conf.d:ro - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro - ../logs/nginx:/var/log/nginx ports: - "80:80" - "8080:8080" - "443:443" restart: always command: nginx -g 'daemon off;'
有一个volumes参数,这里就是我们要挂载的目录的相关配置,第一条我们将../app挂载到/data/www之中,也是我们配置文件中定义的默认监听的root,而APP目录是我们宿主机中的一个目录,通过这样挂载我们可以直接将我们的项目文件放到APP中,Docker会帮你传输到容器内的/data/www目录下。
其它的参数:
build定义了你的Dockerfile在哪里,如果没有写Dockerfile可以不用build,可以用images参数定义官方镜像,比如image:mysql:5.7;
depends_on表示将依赖其它镜像,比如Nginx依赖php-fpm,没有它我Nginx没法玩;
links定义连接,比如要连接到php-fpm容器,就是php-fpm:php-fpm,后面是别名;
ports表示端口映射,80:80表示将80端口映射到宿主机的80端口;
restart重启,restart: always表示将自动重启;
command是自动执行的命令;
……
参数很多,更多的可以参考官方文档。
下面是一个完整的 docker-compose.yml 文件:
version: '3.2' services: php-fpm: build: ./php/ ports: - "9000:9000" links: - mysql-db:mysql-db - redis-db:redis-db volumes: - ../app:/data/www:rw - ./php/php-dev.ini:/usr/local/etc/php/php.ini:ro - ./php/php-fpm.conf:/usr/local/etc/php-fpm.conf:ro - ../logs/php-fpm:/var/log/php-fpm:rw restart: always command: php-fpm nginx: build: ./nginx depends_on: - php-fpm links: - php-fpm:php-fpm volumes: - ../app:/data/www:rw - ./nginx/conf.d:/etc/nginx/conf.d:ro - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro - ../logs/nginx:/var/log/nginx ports: - "80:80" - "8080:8080" - "443:443" restart: always command: nginx -g 'daemon off;' mysql-db: build: ./mysql ports: - "3306:3306" volumes: - ../data/mysql:/var/lib/mysql:rw - ../logs/mysql:/var/lib/mysql-logs:rw - ./mysql/conf.d:/etc/mysql/conf.d:ro environment: MYSQL_ROOT_PASSWORD: 123456 MYSQL_DATABASE: zphaldb MYSQL_USER: zphal MYSQL_PASSWORD: zphal123 restart: always command: "--character-set-server=utf8" redis-db: build: ./redis ports: - "6379:6379" volumes: - ../data/redis:/data restart: always
3. 使用
这一套编写下来,我们怎么用呢?
3.1 使用搭建好的环境
首先,进入项目Dockerfiles的目录下,这里是files目录:
cd zPhal-dockerfiles/files
wget https://pecl.php.net/get/redis-3.1.6.tgz -O php/pkg/redis.tgz
wget https://codeload.github.com/phalcon/cphalcon/tar.gz/v3.3.1 -O php/pkg/cphalcon.tar.gz
然后下载我们会用到的PHP拓展包。
执行命令:
docker-compose up
Docker会自动通过编写好的docker-compose.yml内容构建镜像,并且启动容器。
如果没问题,下次启动时可以以守护模式启用,所有容器将后台运行:
docker-compose up -d
关闭容器:
可以这样关闭容器并删除服务:
docker-compose down
使用 docker-compose 基本上就这么简单,用stop,start等这些命令来操纵容器服务。而更多的工作是在于编写Dockerfile和docker-compose.yml文件。
3.2 使用Composer
当我们要使用Composer时怎么做呢? 我们已经在php-fpm里安装了Composer。
用docker-compose进行操作:
docker-compose run --rm -w /data/www/zPhal php-fpm composer update
-w /data/www/zPhal为在php-fpm的工作区域,zPhal项目也是挂载在里面,所有我们可以直接在容器里运行Composer。
或者进入宿主机APP目录下用Docker命令:
cd zPhal-dockerfiles/app
docker run -it --rm -v `pwd`:/data/www/ -w /data/www/zPhal files_php-fpm composer update
相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!
推荐阅读:
以上がDockerでPHP開発環境を構築するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

tomodifydatainaphpsession、starthessession withsession_start()、$ _sessiontoset、modify、orremovevariables.1)startthessession.2)

配列はPHPセッションに保存できます。 1。セッションを開始し、session_start()を使用します。 2。配列を作成し、$ _Sessionで保存します。 3. $ _Sessionを介して配列を取得します。 4.セッションデータを最適化してパフォーマンスを向上させます。

PHPセッションガベージコレクションは、有効期限が切れたセッションデータをクリーンアップするために確率メカニズムを通じてトリガーされます。 1)構成ファイルにトリガー確率とセッションのライフサイクルを設定します。 2)Cronタスクを使用して、高負荷アプリケーションを最適化できます。 3)データの損失を避けるために、ごみ収集の頻度とパフォーマンスのバランスを取る必要があります。

PHPでのユーザーセッションアクティビティの追跡は、セッション管理を通じて実装されます。 1)SESSION_START()を使用してセッションを開始します。 2)$ _Sessionアレイを介してデータを保存およびアクセスします。 3)セッションを終了するには、session_destroy()を呼び出します。セッショントラッキングは、ユーザーの動作分析、セキュリティ監視、パフォーマンスの最適化に使用されます。

データベースを使用してPHPセッションデータを保存すると、パフォーマンスとスケーラビリティが向上します。 1)MySQLを構成してセッションデータを保存します:PHP.iniまたはPHPコードでセッションプロセッサを設定します。 2)カスタムセッションプロセッサを実装します:データベースと対話するために、開いて、閉じ、読み取り、書き込み、その他の機能を定義します。 3)最適化とベストプラクティス:インデックス、キャッシュ、データ圧縮、分散ストレージを使用して、パフォーマンスを向上させます。

phpssionsStrackuserdataacrossmultiplepagerequestsusingauniqueidstoredinacookie.here'showtomanageetheemefectively:1)Startassession withsession_start()andstoredatain $ _ session.2)RegeneratesseSsessidafterloginwithsession_id(the topreventes_id)

PHPでは、次の手順を通じてセッションデータを繰り返すことができます。1。session_start()を使用してセッションを開始します。 2。$ _Sessionアレイのすべてのキー価値ペアを介してforeachループを反復します。 3.複雑なデータ構造を処理する場合、is_array()またはis_object()関数を使用し、print_r()を使用して詳細情報を出力します。 4.トラバーサルを最適化する場合、ページングを使用して、一度に大量のデータの処理を避けることができます。これにより、実際のプロジェクトでPHPセッションデータをより効率的に管理および使用するのに役立ちます。

このセッションは、サーバー側の状態管理メカニズムを介してユーザー認証を実現します。 1)セッションの作成と一意のIDの生成、2)IDはCookieを介して渡されます。3)サーバーストアとIDを介してセッションデータにアクセスします。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

ホットトピック









