当前位置: 首页 > 后端技术 > PHP

使用Dockercompose编排Laravel应用

时间:2023-03-29 23:02:26 PHP

前言Laravel官方开发环境推荐Homestead(其实是一个打包好的Vagrant盒子)。感觉这个比较重,所以用Dockercompose自己布置了一个开发环境,这里分享下。环境需要先安装Docker和Dockercompose,最好把Docker仓库镜像换成国内的。一般我会在自己的开发电脑上运行一个Vagrant,然后在里面运行Docker等应用。Docker官方推荐的主要思路是一个容器运行一个服务,所以会有Compose编排,各个服务通过容器互联技术进行通信。比如在连接一个Php服务到Mysql时,只需要写Host名作为容器名,内部会直接转换成具体的IP。代码目录使用数据卷从容器映射到宿主机,配置文件(Nginx等)也通过数据卷映射到容器。在实践中,我已经把这套服务打包好了。如果平时使用的话,只需要clone下来直接使用即可。这里主要说一下实现思路。项目地址:https://github.com/rootrl/php...我的项目目录结构:php-environment-with-docker/├──bin│├──composer│├──getContainerIp│└──php├──conf│├──nginx││└──conf.d││└──nginx.conf│└──redis│└──redis。php├──LICENSE├──README.MD└──startbin这些是打包好的命令行工具,其实是Docker容器服务,不过都是现成的服务。conf该目录是应用程序的配置目录。它将使用Volumn映射到容器中的docker-composer.yamlcompose编排文件。下面会具体讲Dockerfile.phpphp镜像构建(里面会有一些自定义,比如更改dns,安装特殊扩展)startrun./start启动所有服务,restart也可以运行这个命令docekr-compose.yaml此文件构成布局文件version:'2'services:nginx:depends_on:-"php"image:"nginx"volumes:-"$PWD/conf/nginx/conf.d:/etc/nginx/conf.d"-"$PWD/www:/usr/share/nginx/html"端口:-"8888:80"网络:-oa-network容器名称:"oa-nginx"命令:/bin/bash-c"mkdir-p/var/www&&ln-s/usr/share/nginx/html/var/www&&nginx-g'daemonoff;'"php:image:"oa-php-fpm"build:context:.dockerfile:“Dockerfile.php”网络:-oa-networkcontainer_name:“oa-php-fpm”卷:-“$PWD/www:/var/www/html”mysql:图像:mysql:5.7卷:-“$PWD/db_data:/var/lib/mysql"environment:MYSQL_ROOT_PASSWORD:root123MYSQL_DATABASE:oaMYSQL_USER:oaMYSQL_PASSWORD:oa123ports:-"3306:3306"networks:-oa-network包含er_name:"oa-mysql"redis:image:"redis"ports:-"6379:6379"networks:-oa-networkvolumes:-"$PWD/conf/redis/redis.conf:/usr/local/etc/redis/redis.conf"container_name:"oa-redis"networks:oa-network:driver:bridge定义了四个服务:php-fpm、nignx、mysql、redis(如果需要其他服务,自己添加)然后定义a公共网络,以便所有容器可以轻松通信。比如nginx.conf中server{listen80;服务器名称本地主机;根/usr/share/nginx/html/public;索引index.phpindex.html;location/{try_files$uri$uri//index.php?$query_string;}error_page500502503504/50x.html;location=/50x.html{root/usr/share/nginx/html;}location~\.php${fastcgi_passphp:9000;fastcgi_indexindex.php;fastcgi_paramSCRIPT_FILENAME/var/www/html/public/$fastcgi_script_name;包括fastcgi_params;}}这里与php-fpm的连接方式:php:9000Dockerfile.phpFROMphp:7.2-fpmRunecho"nameserver223.5.5.5">>/etc/resolv.conf\&&echo"nameserver223.6.6.6">>/etc/resolve.conf\&&apt-getupdate\&&apt-getinstall-y\libfreetype6-dev\libjpeg62-turbo-dev\libpng-dev\&&docker-php-ext-configuregd--with-freetype-dir=/usr/include/--with-jpeg-dir=/usr/include/\&&docker-php-ext-install-j$(nproc)gd\&&docker-php-ext-installmysqlipdo_mysql\&&peclinstallswoole\&&peclinstallredis\&&docker-php-ext-enableswooleRedis是一个Php镜像构建。这里改了dns服务器,安装了几个php扩展。使用start./start命令行启动所有服务./bin/php-v#Laravelartisan./bin/phpartisan总结具体访问:https://github.com/rootrl/php...