本篇文章给大家分享的内容是关于如何通过Docker搭建一个swoft开发环境 ,内容很详细,有需要的朋友可以参考一下,希望可以帮助到你们。
Swoft
<br>首个基于 Swoole 原生协程的新时代 PHP
高性能协程全栈组件化框架,内置协程网络服务器及常用的协程客户端,常驻内存,不依赖传统的 PHP-FPM,全异步非阻塞 IO
实现,以类似于同步客户端的写法实现异步客户端的使用,没有复杂的异步回调,没有繁琐的 yield,有类似 Go
语言的协程、灵活的注解、强大的全局依赖注入容器、完善的服务治理、灵活强大的 AOP、标准的 PSR
规范实现等等,可以用于构建高性能的Web系统、API、中间件、基础服务等等。
Swoft
est un Swoole
construit sur 高性能协程 PHP 全栈框架
, et Swoole
est une compétence avancée dans PHPer
, donc l'installation de l'environnement associé a également causé beaucoup de problèmes à de nombreuses personnes, Swoft
Encore plus , cet article résoudra le déploiement de l'environnement d'exécution et de l'environnement de développement d'une manière extrêmement simple via Docker
.
Comme vous pouvez le voir dans l'encyclopédie, Docker
est un moteur de conteneur d'applications open source qui permet aux développeurs de packager leurs applications et leurs packages de dépendances sont placés dans un conteneur portable puis publiés sur n'importe quelle Linux
machine populaire. La virtualisation peut également être réalisée. Les conteneurs utilisent entièrement le mécanisme du bac à sable et il n'y aura aucune interface entre eux . compris que nous pouvons empaqueter notre code et notre environnement d'exécution dans un conteneur, et que le conteneur empaqueté peut être publié sur n'importe quelle machine Linux
populaire. La machine Linux mentionnée ici n'est en fait pas exacte, grâce au projet Docker for Windows
avec le développement. de Hyper-V
, Docker
peut également fonctionner sur un système Windows 10 en bon état, mais l'auteur ne recommande pas d'utiliser Docker for Windows
dans un environnement de production.
Voici une brève explication et explication de certains noms couramment utilisés Docker
pour faciliter la compréhension des novices de ce qui suit
Dockerfile
, Dockerfile
est le fichier de description de Docker镜像
, qui est intégré dans un miroir docker build
镜像
) à travers le Image
commande , construite via Dockerfile
, comprenant le système d'exploitation et l'environnement d'exploitation
conteneur (Container
) est une image en cours d'exécution, qui peut être comprise comme le conteneur. l'image est un Docker
cycle de vie La phase de construction et d'emballage en , tandis que le conteneur est la phase de démarrage et d'exécution
entrepôt miroir (Repository
), qui est utilisé pour stocker le Docker镜像
entrepôt construit, qui peut être compris comme un entrepôt similaire à Git
Docker
Le processus d'installation n'est pas compliqué. Cette section présentera Linux
Et le processus d'installation sous le système Windows 10
, et l'environnement Mac
n'est pas utilisé pour exécuter ou développer le projet 不建议
sur le système Docker
, car les performances du disque partagé sur Swoft
est extrêmement mauvais, ce qui entraînera Mac for Docker
La phase de démarrage prend beaucoup de temps. Swoft
Linux
Docker
docker-compose
sur sur Linux
via yum
et apt-get
est assez simpleDocker
CentOS : yum install docker -y
Ubuntu : apt-get install docker-engine -y
Il vous suffit d'exécuter la ligne de commandes ci-dessus dans le terminal pour terminer l'installation de
selon la différence du système. Une fois l'installation terminée, nous devons l'exécuterDocker
commande pour démarrer le service docker start
service. Docker
, nous devons également installer Docker
pour faciliter l'utilisation ultérieure de Docker docker-compose
CentOS : yum install python-pip -y && pip install --upgrade pip && pip install -U docker-compose
Ubuntu : apt-get install python-pip -y && pip install --upgrade pip && pip install -U docker-compose
Requis uniquement En fonction du système, exécutez la ligne de commandes ci-dessus dans le terminal pour terminer l'installation de
. docker-compose
Windows 10
et Docker
docker-compose
On se rend directement sur le site officiel de Docker pour télécharger le package d'installation correspondant https://store.docker.com/edit... , utilisateurs non connectés Nous verrons Please Login to Download
, ce qui signifie que nous devons d'abord nous connecter au compte Docker avant de télécharger. Nous cliquons directement sur le bouton pour accéder à la page de connexion pour terminer l'enregistrement du compte ou nous connecter. Get Docker
sur la page de lien ci-dessus pour télécharger. Faites attention au numéro de compte derrière celui-ci. Nous l'utiliserons également lors de son utilisation.
Après avoir téléchargé le package d'installation, vous pouvez exécuter directement le package d'installation pour l'installation. L'ensemble du processus peut être considéré comme infaillible. Passez simplement à l'étape suivante. Notez que vous devez ouvrir le système Hyper-V
avant. installation. Le processus d'ouverture est relativement simple et vous pouvez vous référer à d'autres articles https://segmentfault.com/a/11... Notez que Hyper-V
est en conflit avec VMware
. Vous ne pouvez en choisir qu'un. . Si vous devez utiliser une machine virtuelle, par exemple, des outils comme Vagrant
peuvent également exécuter un Linux 系统
dans une machine virtuelle, puis exécuter Linux 系统
dans la machine virtuelle en tant qu'environnement de développement selon le processus d'installation de <.> dans cet article. Docker
La dernière version du
package d'installation contient déjà Docker
, il n'est donc pas nécessaire d'effectuer des opérations supplémentaires. docker-compose
Une fois l'installation terminée, redémarrez votre ordinateur. Lorsque vous voyez
dans la barre des tâches affichant 小鲸鱼(Docker Icon)
, cela signifie que Docker is running
a démarré avec succès. Docker
Nous devons faire un clic droit sur
et cliquer sur Docker
pour nous connecter au Sign in / Create Docker ID
que nous venons d'enregistrer afin de pouvoir obtenez le public à partir des autorisations DockerHub Mirror. Docker ID
et cliquez sur Docker
Basculez vers l'interface de configuration sur Settings
et vérifiez le. répertoire où se trouve votre code de projet Shared Drives
et cliquez sur 磁盘盘符
dans le coin inférieur droit pour terminer l'autorisation. Apply
docker-compose.yml<span style="font-size: 16px;">docker-compose.yml</span>
Fichier
Nous exécutons le git clone https://github.com/swoft-cloud/swoft
projet Swoft depuis Github
via la commande 克隆(clone)
et utilisons le propre fichier docker-compose.yml
du projet pour implémenter un environnement de développement, docker-compose.yml
Il est le fichier de configuration de l'orchestration de docker-compose
. Jetons un coup d'œil au contenu du fichier officiel par défaut :
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
Il s'agit d'un fichier d'orchestration relativement simple, avec un seul service swoft
et pas trop. de nombreux contenus associés, nous n'expliquerons pas trop ici sur le format de fichier de docker-compose.yml
Vous pouvez trouver par vous-même du contenu pertinent pour la lecture et la compréhension.
Une interprétation simple du contenu de ce fichier peut être comprise comme l'utilisation de l'image officielle swoft/swoft
et la définition du nom du conteneur sur swoft
, liant le port 80
du conteneur au port 80
de l'hôte, et définir ./
Le répertoire actuel et le répertoire /var/www/swoft
dans le conteneur sont des répertoires partagés. Ouvrez un terminal interactif avec le conteneur et démarrez le service Swoft
lors du démarrage du fichier d'orchestration.
On peut remarquer que command
sur le fichier d'arrangement par défaut est configuré avec php /var/www/swoft/bin/swoft start
, qui est la commande de 启动 Swoft 服务
, mais si on exécute seulement le projet 克隆(clone)
et exécute docker-compose up
pour essayer de démarrer 容器
, nous obtiendrons un résultat échoué car composer install
n'a pas été exécuté pour charger les dépendances de Composer
et le dossier vendor
et autoload
et d'autres fichiers associés sont manquants, ce qui entraîne l'échec de l'exécution l'instance Swoft
correctement. Regardons l'orchestration par défaut Le fichier définit deux paramètres stdin_open: true
et tty: true
, qui correspondent respectivement aux deux paramètres docker
et -i
sur la commande -t
. est-ce que -i
active la fonction 输入(input)
, et -t
Après avoir ouvert 交互式终端(terminal)
dans un conteneur de connexion, nous pouvons utiliser ces deux paramètres et changer la ligne command
du fichier d'orchestration en command: /bin/bash
pour que le service Swoft
n'est pas démarré directement après le démarrage du conteneur, mais par nous. Entrez manuellement le conteneur via 交互式终端(terminal)
pour démarrer.
Voici un exemple de fichier docker-compose.yml
modifié :
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
Il y aura une petite différence entre le développement en mode PHP-FPM
Dans le mode PHP-FPM
, changez directement. le contenu du code puis visitez Le code correspondant peut obtenir le contenu modifié car chaque requête en mode PHP-FPM
rechargera le code PHP, et Swoft
est 持久化运行
, ce qui signifie que le code accepte la requête une fois le service terminé démarré. Il n'est pas nécessaire de recharger. Ce changement de mode permet de réutiliser une grande quantité de code dans Swoft
sans avoir besoin de recharger et de ré-instancier, ce qui est l'une des raisons de l'amélioration considérable des performances.
Un tel changement aura un certain impact sur le développement, c'est-à-dire que sous Swoft
, il faut 重启 Worker
ou 重启服务
pour que le code modifié prenne effet, mais grâce à Swoft
de 热重载
Fonction, peut vérifier automatiquement les modifications de code et automatiquement 重启 Worker
, il suffit de changer l'élément .env
en AUTO_RELOAD
via le fichier true
dans le répertoire racine du projet s'il n'y a pas de fichier .env
dans le répertoire racine du projet. le répertoire racine du projet, vous pouvez directement copier le fichier .env.example
dans .env
et apporter les modifications correspondantes. Une chose à noter est que seule la modification du code dans le répertoire app
sera surchargée par la fonction 热重载
. les autres codes ne seront pas surchargés, cela est dû au fait que différents codes sont dans des cycles de vie différents. Seul le code chargé après WorkerStart
peut être rechargé. Nous discuterons plus en détail de cette partie lorsqu'il s'agira d'expliquer. Swoft 的生命周期
Configuration de la crontab des tâches planifiées dans le conteneur Docker (DaoCloud + Docker + Laravel5)
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!