Maison  >  Article  >  développement back-end  >  Comment créer un environnement de développement logiciel via Docker

Comment créer un environnement de développement logiciel via Docker

不言
不言original
2018-07-26 10:26:143131parcourir

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

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

Avant-propos

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.

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.

Concept de nom Docker

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

Installation de Docker

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

Installer

et LinuxDockerdocker-compose sur

Le processus d'installation de

sur Linux via yum et apt-get est assez simpleDockerCentOS :
yum install docker -yUbuntu :
apt-get install docker-engine -yIl 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

Après l'installation de

, nous devons également installer Docker pour faciliter l'utilisation ultérieure de Docker docker-composeCentOS :
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-composeRequis uniquement En fonction du système, exécutez la ligne de commandes ci-dessus dans le terminal pour terminer l'installation de
. docker-compose

Installez Windows 10 et Dockerdocker-compose

sur

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. DockerLa 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-composeUne 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

Comment créer un environnement de développement logiciel via 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

Puisque nous l'utilisons pour le développement, nous devons également autoriser les autorisations du répertoire partagé. Faites un clic droit sur

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

Environnement de développement Swoft

Modifier la valeur par défaut officielledocker-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 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,当你看到下图即大功告成了!

Comment créer un environnement de développement logiciel via Docker

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

Modifiez le code et rendez-le efficace

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 的生命周期

Recommandations associées :

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn