この記事の内容は、Docker による Swft 開発環境の構築方法に関するもので、非常に詳しい内容となっておりますので、困っている方は参考にしていただければ幸いです。
Swoft
<br>Swoole ネイティブ コルーチンに基づく最初の新時代の PHP
高性能コルーチン フルスタック コンポーネント フレームワーク、組み込みコルーチン ネットワーク サーバーと一般的に使用されるコルーチン クライアント、メモリ内に常駐、従来の PHP-FPM に依存しない、完全非同期ノンブロッキング IO
実装では、同期クライアントの使用と同様の書き込みメソッドを使用して、非同期クライアントの使用を実装します。複雑な非同期コールバックや煩わしいイールドなどはありません。
言語コルーチン、柔軟なアノテーション、強力なグローバル依存関係注入コンテナ、完全なサービス ガバナンス、柔軟で強力な AOP、および標準 PSR
標準実装などを利用して、高機能なWebシステム、API、ミドルウェア、基本サービスなどを構築できます。
Swoft
は、Swoole
Cheng PHP 完全版に基づいて構築された 高性能プロトコルです。 -stack Framework
、Swoole
は PHPer
の高度なスキルであるため、関連環境のインストールでも多くの人々に多大な迷惑をもたらしました。Swoft
さらに、この記事では、Docker
を使用して、実行環境と開発環境のデプロイを非常に簡単な方法で解決します。
百科事典からわかるように、Docker
は、開発者がアプリケーションをパッケージ化できるオープンソースのアプリケーション コンテナ エンジンです。アプリケーションと依存関係はポータブル コンテナにパッケージ化され、一般的な Linux
マシンに公開されます。仮想化も実現できます。コンテナは完全にサンドボックス メカニズムを使用し、相互に対話しません。任意のインターフェイス コードと実行環境をコンテナーにパッケージ化できるので、これも理解できます。パッケージ化されたコンテナーは、一般的な Linux
マシンに公開できます。ここでは Linux マシンを指します。実際には、これは正確ではありません。 Docker for Windows
プロジェクトと Hyper-V
の開発のおかげで、Docker
は Windows 10 システムでも良好に実行できますが、著者は推奨しません運用環境で Docker for Windows
を使用する。
ここでは、初心者でも理解できるように、Docker
でよく使用されるいくつかの名詞について簡単に説明します
Dockerfile
、Dockerfile
は、docker build# を通じてビルドされる
Docker image の説明ファイルです。 ## コマンド
Dockerfile を通じて構築された
ミラー
ミラー (
Image) になります (オペレーティング システムとオペレーティング システムを含む)。環境
Container)、コンテナは実行中のイメージであり、
Docker における構築およびパッケージ化の段階として理解できます。コンテナは、起動フェーズおよび実行フェーズ中の
Repository) であり、ビルドされた
Docker イメージを保存するために使用されます。 ウェアハウス、わかりやすい
Git
は複雑ではありません。このセクションでは、Linux
および Windows 10
システムでのインストール プロセスを紹介しますが、Mac では
は推奨されません
システム。Swoft
プロジェクトを実行または開発するための #Docker 環境。
Mac 上の Docker 用共有ディスクのパフォーマンスが非常に低いため、
が発生します。 Swoft が起動時に失敗する ステージには非常に長い時間がかかります。
# を介して
docker-compose
を使用して
Linux に
Docker を
Linux と apt-get
を使用した Docker
のインストールは非常に簡単です。 CentOS:
yum install docker -y Ubuntu:
apt-get install docker-engine -yシステムの違いに応じて、ターミナルで上記のコマンド行を実行するだけで、
Docker のインストールが完了します。 . インストール完了後 その後、
service docker start
コマンドを実行して、Docker
サービスを開始する必要があります。 Docker
をインストールした後、その後の Docker の使用を容易にするために
もインストールする必要があります。 CentOS:
yum install python -pip - y && pip install --upgrade pip && pip install -U docker-composeUbuntu:
apt-get install python-pip -y && pip install --upgrade pip && pip install - U docker- composeシステムの違いに応じてターミナルで上記のコマンド行を実行するだけで、
docker-compose のインストールが完了します。
に
Docker と
docker-compose
Docker 公式 Web サイトに直接アクセスして、対応するインストール パッケージをダウンロードします。 https://store.docker.com/edit...、ログインしていないユーザーには Please Login to Download
が表示されます。これは、ダウンロードする前に最初に Docker アカウントにログインする必要があることを意味します。ログイン ページに移動するボタンをクリックして完了します。登録またはログイン後、上記のリンク ページで Get Docker
をクリックしてダウンロードできます。このアカウントは後で使用することにも注意してください。
インストール パッケージをダウンロードした後、インストール パッケージを直接実行してインストールできます。プロセス全体は確実であると言えます。次のステップに進んでください。システムの Hyper を開く必要があることに注意してください。インストール前に -V
を実行します。起動プロセスは比較的簡単です。他の記事 https://segmentfault.com/a/11... を参照してください。Hyper-V
は ## と競合することに注意してください。 #VMware と 2 つは共存できません。選択できるのは 1 つだけです。
Vagrant やその他のツールなどの仮想マシンを使用する必要がある場合は、
Linux システム# を実行することもできます。 ## を仮想マシンに追加し、この記事の手順に従います。 Linux システム
のインストール プロセスが処理され、開発環境としての仮想マシンで Docker
が実行されます。 最新バージョンの
Docker
インストール パッケージにはすでに docker-compose
が含まれているため、追加の操作を行う必要はありません。 インストールが完了したら、コンピューターを再起動します。タスクバーに
小さなクジラ (Docker アイコン)
が表示され、Docker が実行中であることが示されている場合は、
Docker# を意味します。 ## が開始されました。うまくいきました。
Docker を右クリックし、
サインイン / Docker ID の作成 をクリックしてログを記録する必要があります。 DockerHub からパブリック イメージを取得できるように、先ほど登録した Docker ID
に追加します。 開発に使用しているため、共有ディレクトリのアクセス許可も必要です。
Docker
を右クリックし、
をクリックして設定インターフェイスを切り替えます。 共有ドライブ
に移動し、プロジェクト コードが配置されている ディスク ドライブ文字
を確認し、右下隅の 適用
をクリックして認証を完了します。 #Swoft 開発環境
<span style="font-size: 16px;"></span> コマンド
git clone https://github.com/swoft-cloud/swoft を使用して、Github# から ## Swoft プロジェクトを作成し、プロジェクトに付属する docker-compose.yml
ファイルを使用して開発環境を実装します。docker-compose.yml
は docker- compose
のオーケストレーション構成ファイルについて、公式のデフォルト ファイルの内容を見てみましょう: <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">version: '3'
services:
swoft:
container_name: swoft
image: swoft/swoft
ports:
- "80:80"
volumes:
- ./:/var/www/swoft
stdin_open: true
tty: true
command: php /var/www/swoft/bin/swoft start</pre><div class="contentsignin">ログイン後にコピー</div></div>
これは比較的単純なオーケストレーション ファイルであり、サービス swoft# が 1 つだけ含まれています。 ## と関連性はありません。多くのコンテンツがあります。ここでは
docker-compose.yml のファイル形式についてはあまり説明しません。関連するコンテンツは自分で見つけて読んでください。理解。
このファイルの内容を簡単に解釈すると、
公式イメージを使用し、コンテナ名を swoft
に設定し、コンテナの ポートとホストの
80
ポート、コンテナ内の ./
現在のディレクトリと /var/www/swoft
ディレクトリを次のように設定します。共有ディレクトリでは、コンテナーで対話型ターミナルを有効にし、オーケストレーション ファイルの開始時に Swoft
サービスを開始します。 デフォルトのオーケストレーション ファイルの
command が
php /var/www/swoft/bin/swoft start (
Start the Swoft) で構成されていることがわかります。 service コマンドですが、プロジェクトを
clone(clone)
し、docker-compose up
を実行して container
を起動しようとすると、次の結果が得られます。 composer install
が実行されていないため、Composer
と vendor
フォルダー、autoload
およびその他の関連ファイルの依存関係が読み込まれません。ファイルが見つからないため、正しく実行できなくなりますSwoft
例として、デフォルトのオーケストレーション ファイル設定 stdin_open: true
および tty: true
の 2 つのパラメーターを見てみましょう。それぞれ docker
コマンドに対応します。2 つのパラメータ -i
と -t
を単純に理解すると、-i
は input(input)
function,-t
は、接続コンテナーで 対話型ターミナル (ターミナル)
を開きます。これら 2 つのパラメーターを使用して、 コマンドを変更できます。配置ファイルの
行を command: /bin/bash
に変更します。これにより、Swoft
サービスはコンテナの起動直後には開始されませんが、手動でコンテナに入ります。 対話型ターミナル (ターミナル)
ブートに移動します。 以下は、変更された
docker-compose.yml ファイルの例です:
version: '3' services: swoft: container_name: swoft image: swoft/swoft ports: - "80:80" volumes: - ./:/var/www/swoft stdin_open: true tty: true command: /bin/bash
此时我们在编排文件的所在目录启动一个 终端(Shell)
, 然后执行 docker-compose up -d
,-d
的意思是以守护模式(Daemon Mode)
运行,便于我们在同一个 终端(Shell)
进入到容器内,命令执行后我们可以看到 Starting swoft ... done
即表示启动容器成功。
如果在执行启动命令时得到一下错误,则说明宿主机的80
端口已经被占用了,更改 docker-compose.yml
文件内的 80:80
为其它未被占用的端口即可,注意第一个80
指的是宿主机的端口,第二个80
指的是容器内的端口,也就是说我们只需要更改第一个即可
ERROR: for swoft Cannot start service swoft: b'driver failed programming external connectivity on endpoint swoft(dab0f4d00620e2f5c07e33084ca5cac6f08cb48018d6b737eadc035e5aa0b597): Bind for 0.0.0.0:80 failed: port is already allocated'
通过执行 docker ps
命令可以查看启动的容器信息,下面为示例信息:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f22173763374 swoft/swoft:latest "docker-php-entrypoin" About a minute ago Up About a minute 0.0.0.0:80->80/tcp swoft
得知 容器ID(Container ID)
为 f22173763374
,容器名称(Container Name)
为 swoft
,我们可以执行 docker exec -it f22173763374 bash
或 docker exec -it swoft bash
通过 交互式终端(terminal)
进入到容器内。
如执行时报错 the input device is not a TTY. If you are using mintty, try prefixing the command with 'winpty'
,可在 docker exec
命令前面增加 winpty
命令解决,即 winpty docker exec -it swoft bash
<span style="font-size: 16px;">Composer</span>
依赖及生成<span style="font-size: 16px;">自动加载(Autoload)</span>
文件
通过 docker exec
命令进入容器后,我们留意到光标左侧的内容变为 root@f22173763374:
即为已进入容器内,其中 f22173763374
为对应的 容器ID(Container ID)
。
由于 Swoft
官方镜像 swoft/swoft
配置的工作目录为 /var/www/swoft
,而 docker-compose.yml
又将项目当前目录
关联了容器 /var/www/swoft
目录,即通过 docker exec
进入的目录已经为 /var/www/swoft
目录,即项目目录,所以我们可以直接执行 composer install
命令来加载 Composer
的依赖并生成 自动加载(Autoload)
文件。
考虑到国内的网络环境,我们在执行 composer install
命令前可以先执行 composer config -g repo.packagist composer https://packagist.phpcomposer.com
命令配置 Composer 中国镜像源
加速安装速度。
<span style="font-size: 16px;">Swoft</span>
服务
安装完 Composer
依赖后,便可以执行 php bin/swoft start
启动服务了,当你看到
root@f22173763374:/var/www/swoft# php bin/swoft start Server Information ******************************************************************** * HTTP | host: 0.0.0.0, port: 81, type: 1, worker: 1, mode: 3 * TCP | host: 0.0.0.0, port: 8099, type: 1, worker: 1 (Enabled) ******************************************************************** Server has been started. (master PID: 15, manager PID: 16) You can use CTRL + C to stop run.
即意味着你的 Swoft
以及启动成功了,我们可以打开浏览器访问一下 http://127.0.0.1:80
,当你看到下图即大功告成了!
如果你绑定宿主机的端口不是80
,则改成对应的即可;
如果访问看到的是 Redis connection failure host=127.0.0.1 port=6379
则说明缺少 Redis
服务,最简单直接的就是直接在当前容器内安装 Redis Server
,直接执行 apt install -y redis-server && service redis-server start
即可完成安装以及启动操作了;
##Swoft
PHP-FPM モードでの開発と # での開発では少し異なります。 # #PHP-FPM
モードでは、コードの内容を直接変更し、対応するコードにアクセスして変更された内容を取得します。これは、PHP-FPM
モードでは、リクエストごとに PHP がリロードされるためです。コードであり、Swoft
は persistently run
です。これは、サービスの開始後、受け入れられたリクエストに対してコードを再ロードする必要がないことを意味します。このモードを変更すると、 が行われる可能性があります。 Swoft
リロードや再インスタンス化を必要とせずに多くのコードを再利用できる理由の 1 つは、パフォーマンスが大幅に向上することです。 このような変更は開発に一定の影響を及ぼします。つまり、
Swoft
では、ワーカーを再起動する
または サービスを再起動
する必要があります。コードの変更は有効になりますが、Swoft
の ホット リロード
機能のおかげで、コードの変更が自動的にチェックされ、ワーカーが自動的に 再起動されます。プロジェクトのルート ディレクトリを渡すには、
.env ファイル内の
AUTO_RELOAD 項目を
true に変更するだけです。プロジェクトのルート ディレクトリにあるファイルを直接コピーできます。
.env.example ファイルは
.env で、対応する変更を加えます。注意すべき点は、次のコードのみを変更することです。
app ディレクトリは
hot reloaded 関数がオーバーロードされ、他のコードへの変更は再ロードされません。これは、異なるコードが異なるライフサイクルにあるためです。
WorkerStart の後にロードされるコードのみです はオーバーロードされるため、
Swoft のライフサイクルに関してこの部分をさらに説明します。
関連する推奨事項:
Docker コンテナーでスケジュールされたタスク crontab を構成する (DaoCloud Docker Laravel5)
以上がDockerを使ってSwoft開発環境を構築する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。