本篇文章给大家分享的内容是关于如何通过Docker搭建一个swoft开发环境 ,内容很详细,有需要的朋友可以参考一下,希望可以帮助到你们。
Swoft
<br>首个基于 Swoole 原生协程的新时代 PHP
高性能协程全栈组件化框架,内置协程网络服务器及常用的协程客户端,常驻内存,不依赖传统的 PHP-FPM,全异步非阻塞 IO
实现,以类似于同步客户端的写法实现异步客户端的使用,没有复杂的异步回调,没有繁琐的 yield,有类似 Go
语言的协程、灵活的注解、强大的全局依赖注入容器、完善的服务治理、灵活强大的 AOP、标准的 PSR
规范实现等等,可以用于构建高性能的Web系统、API、中间件、基础服务等等。
Swoft
ist ein Swoole
, der auf 高性能协程 PHP 全栈框架
aufbaut, und Swoole
ist eine fortgeschrittene Fähigkeit in PHPer
, daher hat die Installation der zugehörigen Umgebung auch vielen Menschen große Probleme bereitet, Swoft
umso mehr In diesem Artikel wird die Bereitstellung von Laufumgebungen und Entwicklungsumgebungen auf äußerst einfache Weise durch Docker
gelöst.
Wie Sie der Enzyklopädie entnehmen können, ist Docker
eine Open-Source-Anwendungscontainer-Engine, die es Entwicklern ermöglicht, ihre Anwendungen und Abhängigkeitspakete zu verpacken werden in einem tragbaren Container abgelegt und dann auf jeder gängigen Linux
-Maschine veröffentlicht. Die Container nutzen vollständig den Sandbox-Mechanismus und es gibt keine Schnittstellen untereinander Wir haben verstanden, dass wir unseren Code und unsere Betriebsumgebung in einen Container packen können und der gepackte Container auf jedem gängigen Linux
-Computer veröffentlicht werden kann. Der hier erwähnte Linux-Computer ist dank des Docker for Windows
-Projekts tatsächlich nicht korrekt von Hyper-V
kann Docker
auch in gutem Zustand auf einem Windows 10-System ausgeführt werden, der Autor empfiehlt jedoch nicht, Docker for Windows
in einer Produktionsumgebung zu verwenden.
Hier finden Sie eine kurze Erklärung und Erläuterung einiger häufig verwendeter Substantive Docker
, um Anfängern das Verständnis des Folgenden zu erleichtern
Dockerfile
, Dockerfile
ist die Beschreibungsdatei von Docker镜像
, die durch den in einen docker build
镜像
) eingebaut wird Image
Befehl, erstellt durch Dockerfile
, einschließlich des Betriebssystems und der Betriebsumgebung
Container (Container
Der Container ist ein laufendes Image, das als verstanden werden kann). Das Bild ist ein Docker
Lebenszyklus Die Konstruktions- und Verpackungsphase in , während der Container die Start- und Ausführungsphase ist
Spiegellager (Repository
), das zur Lagerung des verwendet wird gebautes Docker镜像
Warehouse, das verstanden werden kann als Ein Warehouse ähnlich Git
Docker
Der Installationsprozess ist nicht kompliziert. In diesem Abschnitt wird der Installationsprozess unter dem Linux
-System vorgestellt. Die Windows 10
-Umgebung wird nicht zum Ausführen oder Entwickeln des Mac
-Projekts auf dem 不建议
-System verwendet, da die Leistung beeinträchtigt ist Der Zustand der freigegebenen Festplatte auf Docker
ist extrem schlecht, was dazu führt, dass Swoft
die Startphase sehr lange dauert. Mac for Docker
Swoft
Linux
Docker
auf docker-compose
installieren Der Prozess der Installation von bis Linux
und yum
ist ganz einfachapt-get
CentOS : Docker
Ubuntu: yum install docker -y
Sie müssen nur die obige Befehlszeile im Terminal ausführen, um die Installation von apt-get install docker-engine -y
entsprechend den Systemunterschieden abzuschließen. Wir müssen den Befehl
ausführen, um den Dienst Docker
zu starten. service docker start
Docker
Nach der Installation von
installieren, um die spätere Verwendung von Docker zu erleichtern. Docker
CentOS: docker-compose
Ubuntu: yum install python-pip -y && pip install --upgrade pip && pip install -U docker-compose
Nur erforderlich Abhängig von der System führen Sie die obige Befehlszeile im Terminal aus, um die Installation von apt-get install python-pip -y && pip install --upgrade pip && pip install -U docker-compose
abzuschließen.
Windows 10
und Docker
docker-compose
. Wir gehen direkt zur offiziellen Docker-Website, um das entsprechende Installationspaket herunterzuladen https://store.docker.com/edit... , nicht angemeldete Benutzer Wir sehen Please Login to Download
, was bedeutet, dass wir uns vor dem Herunterladen zuerst beim Docker-Konto anmelden müssen. Wir klicken direkt auf die Schaltfläche, um zur Anmeldeseite zu gelangen und die Kontoregistrierung abzuschließen oder uns anzumelden. Dann Klicken Sie zum Herunterladen auf die Linkseite oben. Achten Sie auf die Kontonummer dahinter. Wir werden sie auch verwenden. Get Docker
Nach dem Herunterladen des Installationspakets können Sie das Installationspaket direkt ausführen. Man kann sagen, dass es narrensicher ist. Fahren Sie einfach mit dem nächsten Schritt fort Der Installationsvorgang ist relativ einfach und Sie können sich auf andere Artikel beziehen: https://segmentfault.com/a/11... Beachten Sie, dass
nicht mit Hyper-V
in Konflikt steht. Sie können nur einen auswählen . Wenn Sie beispielsweise eine virtuelle Maschine verwenden müssen, können Tools wie Hyper-V
auch ein VMware
in einer virtuellen Maschine ausführen und dann Vagrant
in der virtuellen Maschine als Entwicklungsumgebung gemäß dem Installationsprozess von ausführen Linux 系统
in diesem Artikel. Linux 系统
Die neueste Version des Docker
-Installationspakets enthält bereits
, sodass keine zusätzlichen Vorgänge erforderlich sind. Docker
Nachdem die Installation abgeschlossen ist, starten Sie Ihren Computer neu. Wenn in der Taskleiste docker-compose
angezeigt wird, bedeutet dies, dass
erfolgreich gestartet wurde. 小鲸鱼(Docker Icon)
Docker is running
Docker
Wir müssen mit der rechten Maustaste auf klicken und auf
klicken, um uns bei anzumelden, den wir gerade registriert haben, damit wir uns anmelden können Holen Sie sich die öffentlichen Berechtigungen von DockerHub Mirror. Docker
Sign in / Create Docker ID
Da wir es für die Entwicklung verwenden, müssen wir auch die Berechtigungen des freigegebenen Verzeichnisses autorisieren. Klicken Sie mit der rechten Maustaste auf Docker ID
und klicken Sie auf
, um die Autorisierung abzuschließen. Docker
Settings
Shared Drives
Swoft-Entwicklungsumgebung磁盘盘符
Apply
docker-compose.yml<span style="font-size: 16px;">docker-compose.yml</span>
Wir führen das SWOFT-Projekt von über den Befehl -Datei, um eine Umgebung für die Entwicklung zu implementieren, git clone https://github.com/swoft-cloud/swoft
It ist die Orchestrierungskonfigurationsdatei von Github
. Schauen wir uns den Inhalt der offiziellen Standarddatei an: 克隆(clone)
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
docker-compose.yml
Es handelt sich um eine relativ einfache Orchestrierungsdatei docker-compose.yml
, die nicht zugeordnet ist Bezüglich des Dateiformats von docker-compose
werden wir hier nicht zu viel erklären. Sie können den relevanten Inhalt selbst zum Lesen und Verstehen finden. Eine einfache Interpretation des Inhalts dieser Datei kann so verstanden werden, dass das offizielle Image verwendet wird und der Containername auf swoft
gesetzt wird, wodurch der docker-compose.yml
-Port im Container an den
-Port des Hosts gebunden wird. und Festlegen von swoft/swoft
Das aktuelle Verzeichnis und das swoft
-Verzeichnis im Container sind freigegebene Verzeichnisse. Öffnen Sie ein interaktives Terminal mit dem Container und starten Sie den 80
-Dienst, wenn Sie die Orchestrierungsdatei starten. 80
Wir können feststellen, dass ./
in der Standardanordnungsdatei mit /var/www/swoft
konfiguriert ist, was der Befehl von Swoft
ist. Wenn wir jedoch nur das
-Projekt ausführen und command
ausführen, versuchen wir es zu starten php /var/www/swoft/bin/swoft start
, wir erhalten ein fehlgeschlagenes Ergebnis, da 启动 Swoft 服务
nicht ausgeführt wurde, um die Abhängigkeiten von 克隆(clone)
zu laden, und der Ordner docker-compose up
und 容器
sowie andere zugehörige Dateien fehlen, was dazu führt, dass die Ausführung fehlschlägt Schauen wir uns die Standardorchestrierung an. Die Datei legt zwei Parameter composer install
und Composer
fest, die den beiden Parametern vendor
und autoload
im Befehl Swoft
entsprechen ist, dass stdin_open: true
die Funktion tty: true
aktiviert und docker
Nach dem Öffnen von -i
in einem Verbindungscontainer können wir diese beiden Parameter verwenden und die Zeile -t
der Orchestrierungsdatei in -i
ändern Der 输入(input)
-Dienst wird nicht direkt nach dem Start des Containers gestartet, sondern von uns. Geben Sie den Container manuell über -t
ein, um ihn zu starten. 交互式终端(terminal)
Hier ist ein Beispiel einer geänderten command
Datei:command: /bin/bash
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
Es wird einen kleinen Unterschied zwischen der Entwicklung im PHP-FPM
-Modus und im PHP-FPM
-Modus geben Überprüfen Sie den Codeinhalt und besuchen Sie dann den entsprechenden Code, um den geänderten Inhalt abzurufen, da jede Anforderung im PHP-FPM
-Modus den PHP-Code neu lädt und Swoft
持久化运行
ist, was bedeutet, dass der Code die Anforderung nach dem Dienst akzeptiert Es ist nicht erforderlich, den Modus neu zu laden, sodass eine große Menge Code in Swoft
wiederverwendet werden kann, ohne dass ein Neuladen und eine erneute Instanziierung erforderlich sind. Dies ist einer der Gründe für die erhebliche Leistungsverbesserung.
Eine solche Änderung hat einen gewissen Einfluss auf die Entwicklung, das heißt, unter Swoft
benötigen Sie 重启 Worker
oder 重启服务
, damit der geänderte Code wirksam wird, aber dank Swoft
s 热重载
Funktion, kann Codeänderungen automatisch überprüfen und 重启 Worker
, wir müssen das Element .env
nur über die Datei AUTO_RELOAD
im Projektstammverzeichnis in true
ändern Im Stammverzeichnis des Projekts können Sie die Datei .env
direkt nach .env.example
kopieren und entsprechende Änderungen vornehmen. Beachten Sie, dass nur das Ändern des Codes im Verzeichnis .env
durch die Funktion „Ändern“ überlastet wird Andere Codes werden nicht überlastet. Dies liegt daran, dass sich unterschiedliche Codes in unterschiedlichen Lebenszyklen befinden. Wir werden diesen Teil weiter besprechen, wenn es um app
geht. 热重载
WorkerStart
Verwandte Empfehlungen: Swoft 的生命周期
Konfigurieren der Crontab für geplante Aufgaben im Docker-Container (DaoCloud + Docker + Laravel5)
Das obige ist der detaillierte Inhalt vonSo erstellen Sie eine schnelle Entwicklungsumgebung mit Docker. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!