前言

Laravel官方开发环境推荐的是Homestead(其实就是一个封装好的Vagrant box),我感觉这个比较重,于是自己用Docker compose编排了一套开发环境,在这里分享下。

环境要求

先要安装好Docker 和 Docker compose,而且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.conf
├── docker-compose.yaml
├── Dockerfile.php
├── LICENSE
├── README.MD
└── start

  • bin 这里面都是封装的命令行工具,其实也是Docker容器服务,只不过他们都是用完即走的服务。
  • conf 该目录都是应用的配置目录,会使用Volumn映射到容器内
  • docker-composer.yaml compose 的编排文件,下面会具体讲到
  • Dockerfile.php php的镜像构建(里面会有一些定制,比如改dns,装特殊扩展)
  • start 运行./start就可以启动所有服务,重启也可以运行此命令

docekr-compose.yaml

此文件是compose的编排文件

```
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"

    ports:
  • "8888:80"

    networks:
  • oa-network

    container_name: "oa-nginx"

    command: /bin/bash -c "mkdir -p /var/www && ln -s /usr/share/nginx/html /var/www && nginx -g 'daemon off;'"

    php:

    image: "oa-php-fpm"

    build:

    context: .

    dockerfile: "Dockerfile.php"

    networks:
  • oa-network

    container_name: "oa-php-fpm"

    volumes:
  • "$PWD/www:/var/www/html"

mysql:

image: mysql:5.7

volumes:

  • "$PWD/db_data:/var/lib/mysql"

    environment:

    MYSQL_ROOT_PASSWORD: root123

    MYSQL_DATABASE: oa

    MYSQL_USER: oa

    MYSQL_PASSWORD: oa123

    ports:
  • "3306:3306"

    networks:
  • oa-network

    container_name: "oa-mysql"

redis:

image: "redis"

ports:

  • "6379:6379"

    networks:
  • oa-network

    volumes:
  • "$PWD/conf/redis/redis.conf:/usr/local/etc/redis/redis.conf"

    container_name: "oa-redis"

networks:

oa-network:

driver: bridge


<p>这里定义了php-fpm、nignx、mysql、redis四个服务(如果需要其他服务,自行添加)。然后定义了一个公共的networks,这样容器内都可以很方便地进行通信。</p>
<p>比如nginx.conf中</p>
```server {
listen 80;
server_name localhost;
root /usr/share/nginx/html/public;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ \.php$ {
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/html/public/$fastcgi_script_name;
include fastcgi_params;
}
}

这里与php-fpm的连接方式:php:9000

Dockerfile.php

```FROM php:7.2-fpm
Run echo "nameserver 223.5.5.5" >> /etc/resolv.conf \
&& echo "nameserver 223.6.6.6" >> /etc/resolve.conf \
&& apt-get update \
&& apt-get install -y \
libfreetype6-dev \
libjpeg62-turbo-dev \
libpng-dev \
&& docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
&& docker-php-ext-install -j$(nproc) gd \
&& docker-php-ext-install mysqli pdo_mysql \
&& pecl install swoole \
&& pecl install redis \
&& docker-php-ext-enable swoole redis


<p>这是Php镜像构建,这里改了dns服务器,并安装了若干php扩展。</p>
<h3>使用</h3>
<h4>启动</h4>
<p>./start 启动所有服务</p>
<h4>命令行</h4>

./bin/php -v

Laravel artisan

./bin/php artisan


<h3>总结</h3>
<p>具体可访问:<a href="https://github.com/rootrl/php-environment-with-docker" rel="nofollow noreferrer">https://github.com/rootrl/php...</a></p> 原文地址:https://segmentfault.com/a/1190000015491751

使用Docker compose编排Laravel应用的更多相关文章

  1. Docker(二十六)-Docker Compose编排容器

    1. 前言 Docker Compose 是 Docker 容器进行编排的工具,定义和运行多容器的应用,可以一条命令启动多个容器. 使用Compose 基本上分为三步: Dockerfile 定义应用 ...

  2. Docker系列之(五):使用Docker Compose编排容器

    1. 前言 Docker Compose 是 Docker 容器进行编排的工具,定义和运行多容器的应用,可以一条命令启动多个容器. 使用Compose 基本上分为三步: Dockerfile 定义应用 ...

  3. docker compose 编排

    Compose是Docker的服务编排工具,主要用来构建基于Docker的复杂应用,Compose 通过一个配置文件来管理多个Docker容器,非常适合组合使用多个容器进行开发的场景. 说明:Comp ...

  4. Docker Compose编排工具部署lnmp实践及理论(详细)

    目录 一.理论概述 编排 部署 Compose原理 二.使用docker compose 部署lnmp 三.测试 四.总结 一.理论概述 Docker Compose是一个定义及运行多个Docker容 ...

  5. 使用Docker Compose编排Spring Cloud微服务

    文章目录 微服务构建实例 简化Compose的编写 编排高可用的Eureka Server 编排高可用Spring Cloud微服务集群及动态伸缩 微服务项目名称 项目微服务中的角色 microser ...

  6. 使用docker compose编排容器

    一.安装docker compose 二进制包安装 1.安装 Docker Compose 从 官方 GitHub Release 处直接下载编译好的二进制文件即可 # curl -L https:/ ...

  7. 使用Docker Compose编排微服务

    一般微服务架构会包含若干个微服务,而每个微服务可以有多个实例,如果每个微服务都有手动启停,那么效率就很低.维护量比较大. 所以我们可以使用Docker Compose来轻松.高效地管理容器. 一.安装 ...

  8. asp.net core容器&mysql容器network互联 & docker compose方式编排启动多个容器

    文章简介 asp.net core webapi容器与Mysql容器互联(network方式) docker compose方式编排启动多个容器 asp.net core webapi容器与Mysql ...

  9. Docker Compose 容器编排 NET Core 6+MySQL 8+Nginx + Redis

    环境: CentOS 8.5.2111Docker 20.10.10Docker-Compose 2.1.0 服务: db  redis  web nginx NET Core 6+MySQL 8+N ...

随机推荐

  1. IT兄弟连 JavaWeb教程 请求重定向案例

    Check2Servlet类与Output2Servlet类之间为请求转发关系.在web.xml文件中,为Check2Servlet映射的URL为"/check2",为Output ...

  2. 鸟哥私房菜基础篇:认识与学习BASH习题

    猫宁!!! 参考链接:http://linux.vbird.org/linux_basic/0320bash.php 鸟哥是为中国信息技术发展做出巨大贡献的人. 1-在 Linux 上可以找到哪些 s ...

  3. 黑客攻防技术宝典web实战篇:利用信息泄露习题

    猫宁!!! 参考链接:http://www.ituring.com.cn/book/885 随书答案. 1. 当探查 SQL 注入漏洞时,如果请求以下 URL:https://wahh-app.com ...

  4. 富文本编辑器vue2-editor实现全屏功能

    vue2-editor非常不错,可惜并未带全屏功能,自己实现了一个,供大家参考. 实现思路:自定义模块. 1. 定义全屏模块Fullscreen /** * 编辑器的全屏实现 */ import no ...

  5. [BJOI2017]魔法咒语

    Description Chandra 是一个魔法天才. 从一岁时接受火之教会洗礼之后, Chandra 就显示出对火元素无与伦比的亲和力,轻而易举地学会种种晦涩难解的法术.这也多亏 Chandra ...

  6. 洛谷1387(基础二维dp)

    题目很简单,数据也很小,但是思路不妨借鉴:dp[i][j]代表以(i,j)为右下角的最长正方形边长. 类比一维里面设“以XX为结尾的最XXX(所求)”. 另外define不要乱用!尤其这种min套mi ...

  7. 常见的问题:https://localhost:1158/em 无法打开

    常见的问题:https://localhost:1158/em 无法打开 安装了Oracle Database 11g,里面有个基于网页的管理工具“https://localhost:1158/em” ...

  8. iphone 开发Categories 、Extensions 区别 --转

    Category和Extension这两个概念,即便对于Java程序员,可能也会感到陌生.这是Objective C为程序员提供的两个强大的动态机制——简单地说,它们允许程序员为已有的对象添加新的方法 ...

  9. AJPFX谈Java 性能优化之基本类型 vs 引用类型

    ★名词定义 先明确一下什么是“基本类型”,什么是“引用类型”. 简单地说,所谓基本类型就是 Java 语言中如下的8种内置类型: booleancharbyteshortintlongfloatdou ...

  10. layout转Bitmap

    业务需求详细描述:最近产品说要在分享的商品图中添加一些其他图片和文字,然后拼接为一张图片,再分享到微信朋友圈,于是我就一脸懵逼了,但是没办法还是得做额! 然后整理了一下思路,主要有这么两条路线: 自己 ...