前言

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. robotframework自动化系列:文本类型的下拉框

    对于下拉框定位和输入,这里主要遇到有两种类型的下拉选择. 其中一个类型是select-options格式,如图 这种方式的定位可以使用select from list by value或select ...

  2. bzoj 4821 [Sdoi2017]相关分析

    题面 https://www.lydsy.com/JudgeOnline/problem.php?id=4821 题解 做法显然 就是维护一颗线段树 里面装4个东西 区间x的和 区间y的和 区间$x^ ...

  3. Educational Codeforces Round 18 A

    Description There are n cities situated along the main road of Berland. Cities are represented by th ...

  4. 寻找项目中顶级Vue对象 (一)

    个人博客首发博客园: http://www.cnblogs.com/zhangrunhao/ 参考 感谢作者 从一个奇怪的错误出发理解 Vue 基本概念 安装 - Vue.js 渲染函数 - Vue. ...

  5. h5-20-文件操作-拖放文件

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  6. Backbone学习记录(4)

    事件绑定  on()方法 调用格式:object.on(event, callback, [context])"change" — 当attributes变化时"chan ...

  7. Oozie的架构

    Oozie的架构图,如下: 从oozie的架构图中,可以看到所有的任务都是通过oozie生成相应的任务客户端,并通过任务客户端来提交相应的任务. 继续...

  8. [转]写给Git初学者的7个建议

    本文转自:http://www.open-open.com/news/view/b7227e 阅读目录 第一条:花时间去学习 Git 的基本操作 第二条:从简单的 Git 工作流开始 第四条:理解分支 ...

  9. P1303 A*B Problem

    题目描述 求两数的积. 输入输出格式 输入格式: 两个数 输出格式: 积 输入输出样例 输入样例#1: 1 2 输出样例#1: 2 说明 需用高精 #include<iostream> # ...

  10. 微信小程序 逻辑层

    1. 注册程序小程序APP在小程序的根目录下有一个app.js文件.有App(Object),App() 函数用来注册一个小程序.接受一个 Object 参数,其内便是小程序的生命周期.App() 必 ...