ホームページ  >  記事  >  バックエンド開発  >  Dockerを使ってSwoft開発環境を構築する方法

Dockerを使ってSwoft開発環境を構築する方法

不言
不言オリジナル
2018-07-26 10:26:143086ブラウズ

この記事の内容は、Docker による Swft 開発環境の構築方法に関するもので、非常に詳しい内容となっておりますので、困っている方は参考にしていただければ幸いです。

Swoft<br>Swoole ネイティブ コルーチンに基づく最初の新時代の PHP 高性能コルーチン フルスタック コンポーネント フレームワーク、組み込みコルーチン ネットワーク サーバーと一般的に使用されるコルーチン クライアント、メモリ内に常駐、従来の PHP-FPM に依存しない、完全非同期ノンブロッキング IO 実装では、同期クライアントの使用と同様の書き込みメソッドを使用して、非同期クライアントの使用を実装します。複雑な非同期コールバックや煩わしいイールドなどはありません。 言語コルーチン、柔軟なアノテーション、強力なグローバル依存関係注入コンテナ、完全なサービス ガバナンス、柔軟で強力な AOP、および標準 PSR 標準実装などを利用して、高機能なWebシステム、API、ミドルウェア、基本サービスなどを構築できます。

まえがき

Swoft は、Swoole Cheng PHP 完全版に基づいて構築された 高性能プロトコルです。 -stack FrameworkSwoolePHPer の高度なスキルであるため、関連環境のインストールでも多くの人々に多大な迷惑をもたらしました。Swoft さらに、この記事では、Docker を使用して、実行環境と開発環境のデプロイを非常に簡単な方法で解決します。

Docker

百科事典からわかるように、Docker は、開発者がアプリケーションをパッケージ化できるオープンソースのアプリケーション コンテナ エンジンです。アプリケーションと依存関係はポータブル コンテナにパッケージ化され、一般的な Linux マシンに公開されます。仮想化も実現できます。コンテナは完全にサンドボックス メカニズムを使用し、相互に対話しません。任意のインターフェイス コードと実行環境をコンテナーにパッケージ化できるので、これも理解できます。パッケージ化されたコンテナーは、一般的な Linux マシンに公開できます。ここでは Linux マシンを指します。実際には、これは正確ではありません。 Docker for Windows プロジェクトと Hyper-V の開発のおかげで、Docker は Windows 10 システムでも良好に実行できますが、著者は推奨しません運用環境で Docker for Windows を使用する。

Docker 名詞の概念

ここでは、初心者でも理解できるように、Docker でよく使用されるいくつかの名詞について簡単に説明します

  • DockerfileDockerfile は、docker build# を通じてビルドされる Docker image の説明ファイルです。 ## コマンド Dockerfile を通じて構築された ミラー

  • ミラー (Image) になります (オペレーティング システムとオペレーティング システムを含む)。環境

  • コンテナ (

    Container)、コンテナは実行中のイメージであり、Docker における構築およびパッケージ化の段階として理解できます。コンテナは、起動フェーズおよび実行フェーズ中の

  • ミラー ウェアハウス (

    Repository) であり、ビルドされた Docker イメージを保存するために使用されます。 ウェアハウス、わかりやすい Git

## に似たリポジトリに Docker をインストールするためのインストール プロセス#Docker

は複雑ではありません。このセクションでは、Linux および Windows 10 システムでのインストール プロセスを紹介しますが、Mac では は推奨されません システム。Swoft プロジェクトを実行または開発するための #Docker 環境。Mac 上の Docker 用共有ディスクのパフォーマンスが非常に低いため、 が発生します。 Swoft が起動時に失敗する ステージには非常に長い時間がかかります。 # を介して docker-compose

を使用して LinuxDockerLinux

にインストールします。 ##yum

apt-get を使用した Docker のインストールは非常に簡単です。 CentOS: yum install docker -y Ubuntu:
apt-get install docker-engine -yシステムの違いに応じて、ターミナルで上記のコマンド行を実行するだけで、
Docker のインストールが完了します。 . インストール完了後 その後、service docker start
コマンドを実行して、Docker サービスを開始する必要があります。 Docker をインストールした後、その後の Docker の使用を容易にするために

docker-compose

もインストールする必要があります。 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 のインストールが完了します。

Windows 10Dockerdocker-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を使ってSwoft開発環境を構築する方法Docker を右クリックし、

サインイン / Docker ID の作成

をクリックしてログを記録する必要があります。 DockerHub からパブリック イメージを取得できるように、先ほど登録した Docker ID に追加します。 開発に使用しているため、共有ディレクトリのアクセス許可も必要です。Docker を右クリックし、

Settings

をクリックして設定インターフェイスを切り替えます。 共有ドライブ に移動し、プロジェクト コードが配置されている ディスク ドライブ文字 を確認し、右下隅の 適用 をクリックして認証を完了します。 #Swoft 開発環境

公式のデフォルトを変更する

docker-compose.yml

ファイル <span style="font-size: 16px;"></span> コマンド git clone https://github.com/swoft-cloud/swoft を使用して、Github# から

clone (クローン) を実行します。

## Swoft プロジェクトを作成し、プロジェクトに付属する docker-compose.yml ファイルを使用して開発環境を実装します。docker-compose.yml docker- compose のオーケストレーション構成ファイルについて、公式のデフォルト ファイルの内容を見てみましょう: <pre class="brush:php;toolbar:false">version: '3' services:     swoft:         container_name: swoft         image: swoft/swoft         ports:             - &quot;80:80&quot;         volumes:             - ./:/var/www/swoft         stdin_open: true         tty: true         command: php /var/www/swoft/bin/swoft start</pre> これは比較的単純なオーケストレーション ファイルであり、サービス swoft# が 1 つだけ含まれています。 ## と関連性はありません。多くのコンテンツがあります。ここでは docker-compose.yml のファイル形式についてはあまり説明しません。関連するコンテンツは自分で見つけて読んでください。理解。 このファイルの内容を簡単に解釈すると、

swoft/swoft

公式イメージを使用し、コンテナ名を swoft に設定し、コンテナの ポートとホストの 80
ポート、コンテナ内の ./ 現在のディレクトリと /var/www/swoft ディレクトリを次のように設定します。共有ディレクトリでは、コンテナーで対話型ターミナルを有効にし、オーケストレーション ファイルの開始時に Swoft サービスを開始します。 デフォルトのオーケストレーション ファイルの commandphp /var/www/swoft/bin/swoft start (Start the Swoft) で構成されていることがわかります。 service コマンドですが、プロジェクトを clone(clone)
し、docker-compose up を実行して container を起動しようとすると、次の結果が得られます。 composer install が実行されていないため、Composervendor フォルダー、autoload およびその他の関連ファイルの依存関係が読み込まれません。ファイルが見つからないため、正しく実行できなくなりますSwoft 例として、デフォルトのオーケストレーション ファイル設定 stdin_open: true および tty: true の 2 つのパラメーターを見てみましょう。それぞれ docker コマンドに対応します。2 つのパラメータ -i-t を単純に理解すると、-iinput(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 bashdocker 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,当你看到下图即大功告成了!

Dockerを使ってSwoft開発環境を構築する方法

如果你绑定宿主机的端口不是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 がリロードされるためです。コードであり、Swoftpersistently 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。