Heim  >  Artikel  >  Backend-Entwicklung  >  So erstellen Sie eine schnelle Entwicklungsumgebung mit Docker

So erstellen Sie eine schnelle Entwicklungsumgebung mit Docker

不言
不言Original
2018-07-26 10:26:143131Durchsuche

本篇文章给大家分享的内容是关于如何通过Docker搭建一个swoft开发环境 ,内容很详细,有需要的朋友可以参考一下,希望可以帮助到你们。

Swoft<br>首个基于 Swoole 原生协程的新时代 PHP 高性能协程全栈组件化框架,内置协程网络服务器及常用的协程客户端,常驻内存,不依赖传统的 PHP-FPM,全异步非阻塞 IO 实现,以类似于同步客户端的写法实现异步客户端的使用,没有复杂的异步回调,没有繁琐的 yield,有类似 Go 语言的协程、灵活的注解、强大的全局依赖注入容器、完善的服务治理、灵活强大的 AOP、标准的 PSR 规范实现等等,可以用于构建高性能的Web系统、API、中间件、基础服务等等。

Vorwort

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.

Docker

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.

Docker-Substantivkonzept

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镜像

  • -Spiegel (

    ) 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

Installieren von Docker

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 DockerSwoft

und

LinuxDocker auf docker-compose installieren Der Prozess der Installation von

auf

bis Linux und yum ist ganz einfachapt-getCentOS : 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 startDockerNach der Installation von

müssen wir auch

installieren, um die spätere Verwendung von Docker zu erleichtern. DockerCentOS: 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.

Installieren Sie Windows 10 und Dockerdocker-compose

auf

. 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 DockerNach 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. DockerNachdem 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 runningDocker

So erstellen Sie eine schnelle Entwicklungsumgebung mit DockerWir 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. DockerSign in / Create Docker IDDa 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

. Wechseln Sie zur Einstellungsoberfläche und überprüfen Sie das Verzeichnis, in dem sich Ihr Projektcode befindet, und klicken Sie unten rechts auf

, um die Autorisierung abzuschließen. DockerSettingsShared DrivesSwoft-Entwicklungsumgebung磁盘盘符Apply

Ändern Sie die offizielle Standardeinstellungdocker-compose.yml

Datei <span style="font-size: 16px;">docker-compose.yml</span> Wir führen das SWOFT-Projekt von über den Befehl

aus und verwenden die projekteigene

-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/swoftDas 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 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,当你看到下图即大功告成了!

So erstellen Sie eine schnelle Entwicklungsumgebung mit Docker

如果你绑定宿主机的端口不是80,则改成对应的即可;
如果访问看到的是 Redis connection failure host=127.0.0.1 port=6379 则说明缺少 Redis 服务,最简单直接的就是直接在当前容器内安装 Redis Server,直接执行 apt install -y redis-server && service redis-server start 即可完成安装以及启动操作了;

Ändern Sie den Code und machen Sie ihn wirksam

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 Swofts 热重载 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. 热重载WorkerStartVerwandte 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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn