Docker 实践(八):构建 Laravel 开发环境

   2016-12-23 0
核心提示:有人在SegmentFault上邀请我回答问题:请问下有人使用Docker来安装Laravel本地开发环境吗,随手写了篇答案,记录下。首先需要明确,一容器一进程,多容器协作完成。所以,需要以下四个容器:nginx作用:响应 web 请求,处理静态文件。镜像:无需自己构建,直

有人在 SegmentFault 上邀请我回答问题: 请问下有人使用Docker来安装Laravel本地开发环境吗 ,随手写了篇答案,记录下。

首先需要明确,一容器一进程,多容器协作完成。

所以,需要以下四个容器:

  1. nginx

    • 作用:响应 web 请求,处理静态文件。

    • 镜像:无需自己构建,直接拉去官方镜像。

  2. php-fpm

    • 作用:处理 PHP 脚本。

    • 镜像:由于项目中可能依赖不同的扩展,需要依赖官方镜像自行构建, 另外还需要 composer 和 phpunit 支持。

  3. mysql

    • 作用:数据库。

    • 镜像:无需自己构建,直接拉去官方镜像。

  4. redis

    • 作用:缓存数据库。

    • 镜像:无需自己构建,直接拉去官方镜像。

下面说一下 php-fpm 镜像的构建,需要注意以下几点:

  • 直接依赖官方的 php:7.0.12-fpm 镜像即可,无需自己从头开始构建。

  • 不当玩具使用的话最好不要使用 alpine 系列的镜像,虽然它小巧玲珑。

一个简单的 dockerfile 示例:

FROM php:7.0.12-fpm
MAINTAINER Tairy <tairyguo@gmail.com>

WORKDIR /working
RUN apt-get update --fix-missing && apt-get install -y \
    g++ autoconf bash git apt-utils libxml2-dev libcurl3-dev pkg-config \
    && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
    && echo "Asia/Shanghai" > /etc/timezone \
    && docker-php-ext-install iconv curl mbstring \
        xml json mcrypt mysqli pdo pdo_mysql zip \
    && docker-php-ext-configure gd \
        --with-gd \
        --with-freetype-dir=/usr/include/ \
        --with-png-dir=/usr/include/ \
        --with-jpeg-dir=/usr/include/ \
    && docker-php-ext-install gd \
    && docker-php-ext-enable gd \
    && pecl install /pecl/redis-3.0.0.tgz \
    && docker-php-ext-enable redis \
    && apt-get purge -y --auto-remove \
    && rm -rf /var/cache/apt/* \
    && rm -rf /var/lib/apt/lists/* \
    && rm -rf /pecl
    
# 安装 composer
RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" \
    && php composer-setup.php \
    && php -r "unlink('composer-setup.php');" \
    && mv composer.phar /usr/local/bin/composer \
    && composer self-update \
    && composer config -g repo.packagist composer https://packagist.phpcomposer.com \
    && composer global require "laravel/installer=~1.1" \
    && composer global require predis/predis \
    && wget https://phar.phpunit.de/phpunit.phar \
    && chmod +x phpunit.phar \
    && mv phpunit.phar /usr/local/bin/phpunit

当然,构建过程中可能会遇到 GFW 的问题,可以参考我的文章做一些调整: Docker 实践(七):提升幸福感

构建好镜像之后,多容器管理需要使用编排工具 docker-compose ,所以还需要编写 docker-compose.yml 文件,一个简单的示例(不要忘了看注释):

version: '2'
services:
  nginx:
    image: nginx:alpine
    depends_on:
      - red
    ports:
      - 8080:80
    volumes:
      - /path/to/nginx.conf:/etc/nginx/nginx.conf
      - /path/to/default.conf:/etc/nginx/conf.d/default.conf
      # 这个挂载是为了处理静态文件
      - /path/to/static:/working
    networks:
      - app
  app:
    image: your-php-fpm-image
    depends_on:
      - mysql
      - redis
    volumes:
      - .:/working
      - /path/to/php.ini:/usr/local/etc/php/php.ini
    networks:
      - app
  mysql:
    image: mysql:latest
    environment:
      TZ: 'Asia/Shanghai'
      MYSQL_ROOT_PASSWORD: 123456
    volumes:
      - ./data:/var/lib/mysql
    ports:
      - 8002:3306
    networks:
      - app
  redis:
    image: redis:latest
    ports:
      - 8003:6379
    networks:
      - app
networks:
  app:

需要注意的几点:

  • 一定要定义网络。

  • nginx.conf, default.conf, php.ini 最好自己定义,挂载到容器中。

  • 不要忘了设置时区。

这样在nginx的 default.conf 文件可以这样写:

server {
  listen 80 default_server;
  server_name  default;

  location /static/ {
    root /working;
    index index.html;
  }

  index index.html index.php;
  root /working/public;
  location / {
    try_files $uri $uri/ /index.php?$query_string;
  }

  location /packages {
    try_files $uri $uri/;
  }

  location ~ [^/]\.php(/|$) {
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    # 注意下面这行,pass 到 php-fpm 容器的服务名即可。
    fastcgi_pass app:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
  }

  sendfile off;
}

至此,配置工作完成,以后你只需要 cd 到你的项目目录下执行

docker-compose up -d

就可以进行开发了,是不是很简单。

 
标签: Docker Laravel
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • Docker windows下安装并搭建Nodejs的webapp
    Docker windows下安装并搭建Nodejs的webapp
    一、关于Docker什么是Docker?Docker 采用go语言编写,是一个开源的应用容器引擎。让开发者可以快速打包他们的应用以及依赖包到一个封装的可移植的容器Image中,然后发布到任何流行的机器( Linux ,windows,Mac等)上,也可以实现虚拟化。容器是使用完全
    02-09
  • Docker-用LaraDock搭建PHP环境 docker搭建php开
    简介LaraDock 致力于简化创建开发环境过程,能够帮助我们在 Docker 上快速搭建 PHP 开发环境。 它预装了 Docker 镜像,为我们提供了一站式的开发环境,而不需要再去在本地机器安装 PHP、Nginx、MySQL 以及其他很多开发过程中需要的软件。特点:在 PHP 版本:7
    02-09
  • WASM 之 Rust 开发(Windows Docker环境)
    WASM 之 Rust 开发(Windows Docker环境)
    环境活动: 学 Rust,免费拿树莓派+Rust 官方文档Windows10 ProDocker (开启 WSL2 Feature 及 Hyper-V 虚拟层)基于Rust的wasm项目开发模板 https://github.com/second-state/ssvm-nodejs-starter/VSCode 及其 Rust 插件另外可以考虑加上 Remote-Docker 插件测
    02-09
  • Docker安装ruby2.1 docker安装青龙面板
    # sudo apt-get install Python-software-properties# sudo apt-add-repository ppa:brightbox/ruby-ng# sudo apt-get update# sudo apt-get install ruby2.1 ruby2.1-dev 解决方案:apt-get install python-software-properties apt-get install software-p
    02-09
  • Docker windows下安装,入门及注意事项,并搭建包含Nodejs的webapp
    Docker windows下安装,入门及注意事项,并搭建
        一、关于Docker什么是Docker?Docker 采用go语言编写,是一个开源的应用容器引擎。让开发者可以快速打包他们的应用以及依赖包到一个封装的可移植的容器Image中,然后发布到任何流行的机器( Linux ,windows,Mac等)上,也可以实现虚拟化。容器是
    02-09
  • Selenium4+Python3系列(十三) - 与docker中的
    前言文章更新到这一篇时,其实我还是很开心的,因为这也正是这系列教程的最后一篇文章,也算是完成了一个阶段性的小目标,也很感谢那些愿意看我文章与我交流学习的同学,感谢有你们的支持和陪伴。Jenkins的下载安装1、拉取镜像:笔者是Mac系统,为了方便就直
    02-09
  • [Go语言]从Docker源码学习Go——指针和Structs
    这两天在看reflect这个包在Docker中的使用时,遇到了各种问题,最后虽然知道怎么用了。但是对于这块的原理还不是太懂,于是把"THE WAY TO GO"中关键的几章看了下。继续坚持往下写,争取能说明白。源码还是先看Docker中源码, docker/api/client/cli.gotype Doc
    02-09
  • /usr/bin/docker-current: Error response from
    docker创建容器时报错如下:containerd: start container” error=“oci runtime error: container_linux.go:247: starting container process caused “process_linux.go:245: running exec setns process for init caused \“exit status 17\””\n”答:这
    02-09
  • 【Docker】使用Docker Client和Docker Go SDK为
    目录背景使用 Docker Client 调用 GPU依赖安装安装 Docker安装 NVIDIA Container Toolkit¶--gpus 用法使用 Docker Go SDK 为容器分配 GPU使用 NVIDIA/go-nvml 获取 GPU 信息使用 Docker Go SDK 为容器分配 GPU背景深度学习的环境配置通常是一项比较麻烦的工
    02-09
  • docker报错 ERROR: Service 'workspace�
    在 Windows 系统中使用 Laradock 搭建基于 Docker 的 PHP 开发环境执行命令 docker-compose up nginx mysql redis执行过程中出现错误报 laradock ERROR: Service ‘workspace’ failed to build:报 docker ERROR: Service 'php-fpm' failed to build:解决方案
    02-09
点击排行