使用Docker搭建Laravel环境

   2016-10-07 0
核心提示:现在有很多关于Docker的争吵,这是正常的。因为Docker带来了一个重大飞跃,app的集装箱化活用,将搭建例如google和facebook那样强大的数据中心的能力带到了普通的开发者或系统管理员的手中。Docker使用源生Linux内核集装成一个进程,类似于将它们放入一个独立

现在有很多关于Docker的争吵,这是正常的。因为Docker带来了一个重大飞跃,app的集装

箱化活用,将搭建例如google和facebook那样强大的数据中心的能力带到了普通的开发者

或系统管理员的手中。

Docker使用源生Linux内核集装成一个进程,类似于将它们放入一个独立的小仓库里面,使

得它们不会影响到系统的其他进程。Docker常被用于部署,管理,和自动化构建容器。集装

箱化,带来和虚拟机相似等级的隔离,却只耗费运行虚拟机管理程序的10%-15%的性能。看

下面这部Docker创始人兼Docker的CTO的访谈,可以帮助你快速了解Docker。(油管链接

,我就不贴了)。如果你想要了解更多背景,你可以访问Dokcer的官网。

我开发的大多数应用程序都是基于Laravel,所以我想看看使用Docker搭建一个本地开发环

境,作为我的生产环境的一个镜像。当你仅仅部署应用程序本身和它的依赖(像Nginx),与部署在

传统的虚拟机上相比,安全和稳定的风险将大大降低。而你仍然可以节省从开发环境到生产环境的时

间.

网上很少文章是结合Larvel和Docker来讲的.所有我们阅读到的要使用Vagrant的概念,都可以直接

使用Dokcer,本文中所有的进程将运行在一个容器中.因为一些原因,这意味着你将错过了一些Dokcer

的真正优点.我们想要一个进程运行在一个容器中,我们将每个容器(即进程)链接一个数据容器上,所有

的应用程序文件都保存在这个数据容器上.让我们开始吧.

准备你的开发环境

Docker使用集装箱化技术专用于Linux, 所以如果你使用OS X或者Windows,则需要虚拟机.非linux的Docker包被称之为Boot2Docker.

(注:Docker已经宣布支持OS X和Windows了)

关于不同系统版本的安装方式,参见Dokcer的官方文档. Docker documentation

概述

获取和启动运行Lavavel应用程序,我们不仅仅需要一个可以运行PHP的web服务器,我们也

需要能够运行PHP命令行应用程序的 composerartisan .也许还有更好运行环境

的方式(例如浏览器).但是这是一个好的基础整合Dokcer和Laravel.每个进程都有一个自

己的容器.

下面列出了我们要使用Docker镜像:

有分离的 composerartisan 容器对我们来说真是一大优势,我们可以只选择推送

docker-laravel-data , docker-laravel-nginxdocker-laravel-phpfpm 容器

到生产环境.

我画了一副流程图可视化帮助理解,沿着获取数据方向理解如何整合这些容器.

使用Docker搭建Laravel环境

你可以看到这些容器都将他们的 /data 定位到了 docker-laravel-data 容器.又可以

看到是从主目录的 ~/myapp 目录定向到了 /data .在 ~/myapp 中我们有两个目录

wwwlogs .

  • www - 包含我们的应用程序文件(例如: public/index.php )
  • logs - 存放Nginx的错误日志文件.

从Docker Hub上拉取这些镜像非常容易,只需要在命令行(或boot2docker虚拟机)中运行

下面的命令:

$ docker pull dylanlindgren/docker-laravel-data && \
 docker pull dylanlindgren/docker-laravel-composer && \
 docker pull dylanlindgren/docker-laravel-artisan && \
 docker pull dylanlindgren/docker-laravel-phpfpm && \
 docker pull dylanlindgren/docker-laravel-nginx && \
 docker pull dylanlindgren/docker-laravel-bower

这些镜像也可以通过获取上面GitHub上的Dockerfile,使用 docker build 命令来构建.

不过那已经是本教程之外的内容了.

Docker&Laravel实践

我使用2013年的MackBook Pro开发,因此下面说明都是针对 OS X 环境的.应该很容易改

变一些路径,就可以用于了 LinuxWindows 了.

创建数据容器

创建两个目录在你的系统中 ~/myapp/www~/myapp/logs .这个 ~/myapp/ 目录映射

到数据容器中,提供给其他容器访问应用程序文件.

如果你已经有了一Laravel app,将它的所有文件放入 ~/myapp/www 目录中.否则我们将

创建一个.

让我们来创建我们的数据容器,并且将 ~/myapp/ 映射到这个容器的 /data 目录上.

$ docker run --namemyapp-data-v /Users/dylan/myapp:/data:rw dylanlindgren/docker-laravel-data

运行composer命令行

通过如下的命令执行 composer 命令行:

$dockerrun--privileged=true--volumes-frommyapp-data--rmdylanlindgren/docker-laravel-composer
*yourcomposercommandshere*

哇!这真是一个好长的命令.谁想输入这么长的命令只是为了简单的运行 composer dump-autoload ?可以灵活的使用Bash的aliases使命令简短.在 .bashrc 文件中添加下面的代码.

aliasmyapp-composer="dockerrun--privileged=true--volumes-frommyapp-data--rmdylanlindgren/docker-laravel-composer"

重新启动终端的会话.你就可以通过 myapp-composer 命令行来运行 composer 了.

如果你想要创建一个新的Laravel app,执行下面的命令,使用 composer 下载Laravel和它的依赖:

myapp-composer create-projectlaravel/laravel/data/www--prefer-dist

不要忘记适当的给 app/storage 目录权限,不然你可能会看到运行错误.

运行artisan命令行

artisan 命令行的运行方式和运行 composer 命令行的方法相似:

$dockerrun--privileged=true--volumes-frommyapp-data--rmdylanlindgren/docker-laravel-artisan
*yourartisancommandshere*

同样的,让我们增加另一条配置到 .bashrc 中:

aliasmyapp-artisan="dockerrun--privileged=true--volumes-frommyapp-data--rmdylanlindgren/docker-laravel-artisan"

重启终端,你就可以通过 myapp-artisan 来运行 artisan 了.

Laravel服务

NginxPHP-FPM 是分开的两个进程,因此,我们将分开它们不同容器的原因在这之前解释清楚.

首先,我们先创建 PHP-FPM 的容器,注意这里我们使用 -d 选项,说明进程将在后台运行. PHP-FPM 不是运行不成功,以为是像 composerartisan 那样退出了,其实它只是在保持运行.我们要把它当做守护进程那样运行,这样我们就可以做其他的事情,例如加载Nginx的容器.

如下运行PHP-FPM:

$dockerrun--privileged=true--namemyapp-php--volumes-frommyapp-data-ddylanlindgren/docker-laravel-phpfpm

我们使用 --link 选项,当我们创建Nginx容器的时候,链接到这个PHP-FPM容器,通过它们的ip来沟通数据.(准确来说是9000端口)

让我们运行Nginx:

$dockerrun--privileged=true--namemyapp-web--volumes-frommyapp-data-p80:80--linkmyapp-php:fpm-ddylanlindgren/docker-laravel-nginx

最后通过浏览器访问 http://localhost 就可以看见Laravel的欢迎界面.

使用Docker搭建Laravel环境

 
标签: 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
点击排行