资讯专栏INFORMATION COLUMN

使用 docker-compose 搭建 Laravel 环境 (三)

roadtogeek / 1338人阅读

摘要:更换源更新源使用的源通过安装脚本安装应用所需要的依赖。

有了第二篇《使用 Docker 搭建简易的 Java Web 环境 (二)》,懂了如何通过单一镜像创建 Docker 环境,这篇主要学习如何使用「docker-compose」。目标是:搭建 Laravel 开发环境

Laravel 安装

</>复制代码

  1. Laravel 让我们书写优雅的代码
    为 Web 艺术家创造的 PHP 框架

学习 Laravel,或者 PHP,不得不使用 composer。

</>复制代码

  1. Composer 是 PHP 的一个依赖管理工具。它允许你申明项目所依赖的代码库,它会在你的项目中为你安装他们。
    Composer 不是一个包管理器。是的,它涉及 "packages""libraries",但它在每个项目的基础上进行管理,在你项目的某个目录中(例如 vendor)进行安装。默认情况下它不会在全局安装任何东西。因此,这仅仅是一个依赖管理。

  2. 这种想法并不新鲜,Composer 受到了 node"s npm 和 ruby"s bundler 的强烈启发。而当时 PHP 下并没有类似的工具。

  3. Composer 将这样为你解决问题:

  4. a) 你有一个项目依赖于若干个库。

  5. b) 其中一些库依赖于其他库。

  6. c) 你声明你所依赖的东西。

  7. d) Composer 会找出哪个版本的包需要安装,并安装它们(将它们下载到你的项目中)。
    参考:http://docs.phpcomposer.com/00-intro.html

composer

1.使用 php 命令安装

</>复制代码

  1. php -r "copy("https://getcomposer.org/installer", "composer-setup.php");"
  2. php -r "if (hash_file("SHA384", "composer-setup.php") === "544e09ee996cdf60ece3804abc52599c22b1f40f4323403c44d44fdfdd586475ca9813a858088ffbc1f233e9b180f061") { echo "Installer verified"; } else { echo "Installer corrupt"; unlink("composer-setup.php"); } echo PHP_EOL;"
  3. php composer-setup.php
  4. php -r "unlink("composer-setup.php");"

</>复制代码

  1. 更多查看:https://getcomposer.org/download/

2.使用 Packagist / Composer 中国全量镜像加速

修改 composer 的全局配置文件(推荐方式)

</>复制代码

  1. composer config -g repo.packagist composer https://packagist.phpcomposer.com

</>复制代码

  1. 更多查看:https://pkg.phpcomposer.com/

3.并行 composer install

</>复制代码

  1. composer global require hirak/prestissimo

下载如有神助!!!

创建 Laravel 项目

可以通过 Laravel 安装工具:

</>复制代码

  1. composer global require "laravel/installer"

然后就可以使用 laravel new 命令安装 Laravel 项目了,如:

</>复制代码

  1. laravel new blog

也可以通过 composer 创建:

</>复制代码

  1. composer create-project --prefer-dist laravel/laravel blog

</>复制代码

  1. 更多查看:https://d.laravel-china.org/docs/5.4/installation

构建 php + apache 镜像

1.选择 DaoCloud 提供的 PHP 镜像作为项目的基础镜像。

</>复制代码

  1. FROM daocloud.io/php:7.1.8-apache

2.更换 163 源:

</>复制代码

  1. #更新apt-get源 使用163的源
  2. RUN mv /etc/apt/sources.list /etc/apt/sources.list.bak &&
  3. echo "deb http://mirrors.163.com/debian/ jessie main non-free contrib" >/etc/apt/sources.list &&
  4. echo "deb http://mirrors.163.com/debian/ jessie-proposed-updates main non-free contrib" >>/etc/apt/sources.list &&
  5. echo "deb-src http://mirrors.163.com/debian/ jessie main non-free contrib" >>/etc/apt/sources.list &&
  6. echo "deb-src http://mirrors.163.com/debian/ jessie-proposed-updates main non-free contrib" >>/etc/apt/sources.list

3.通过安装脚本安装 Laravel 应用所需要的 PHP 依赖。

</>复制代码

  1. # APT 自动安装 PHP 相关的依赖包,如需其他依赖包在此添加
  2. RUN apt-get update
  3. && apt-get install -y
  4. libmcrypt-dev
  5. libz-dev
  6. git
  7. wget
  8. libpcre3-dev
  9. # 官方 PHP 镜像内置命令,安装 PHP 依赖
  10. && docker-php-ext-install
  11. mcrypt
  12. mbstring
  13. pdo_mysql
  14. zip
  15. # 用完包管理器后安排打扫卫生可以显著的减少镜像大小
  16. && apt-get clean
  17. && apt-get autoclean
  18. && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
  19. # 安装 Composer,此物是 PHP 用来管理依赖关系的工具
  20. && curl -sS https://getcomposer.org/installer
  21. | php -- --install-dir=/usr/local/bin --filename=composer
  22. # 国内镜像加速
  23. && composer config -g repo.packagist composer https://packagist.phpcomposer.com
  24. && composer global require hirak/prestissimo

4.创建 Laravel 目录结构:

</>复制代码

  1. # 开启 URL 重写模块
  2. # 配置默认放置 App 的目录
  3. RUN a2enmod rewrite
  4. && mkdir -p /app
  5. && rm -fr /var/www/html
  6. && ln -s /app/public /var/www/html
  7. WORKDIR /app

5.加载 composer 依赖包

</>复制代码

  1. # 预先加载 Composer 包依赖,优化 Docker 构建镜像的速度
  2. COPY ./composer.json /app/
  3. COPY ./composer.lock /app/
  4. RUN composer install --no-autoloader --no-scripts

最终整个 Dockerfile 如下所示:

</>复制代码

  1. FROM daocloud.io/php:7.1.8-apache
  2. #更新apt-get源 使用163的源
  3. RUN mv /etc/apt/sources.list /etc/apt/sources.list.bak &&
  4. echo "deb http://mirrors.163.com/debian/ jessie main non-free contrib" >/etc/apt/sources.list &&
  5. echo "deb http://mirrors.163.com/debian/ jessie-proposed-updates main non-free contrib" >>/etc/apt/sources.list &&
  6. echo "deb-src http://mirrors.163.com/debian/ jessie main non-free contrib" >>/etc/apt/sources.list &&
  7. echo "deb-src http://mirrors.163.com/debian/ jessie-proposed-updates main non-free contrib" >>/etc/apt/sources.list
  8. # APT 自动安装 PHP 相关的依赖包,如需其他依赖包在此添加
  9. RUN apt-get update
  10. && apt-get install -y
  11. libmcrypt-dev
  12. libz-dev
  13. git
  14. wget
  15. libpcre3-dev
  16. # 官方 PHP 镜像内置命令,安装 PHP 依赖
  17. && docker-php-ext-install
  18. mcrypt
  19. mbstring
  20. pdo_mysql
  21. zip
  22. # 用完包管理器后安排打扫卫生可以显著的减少镜像大小
  23. && apt-get clean
  24. && apt-get autoclean
  25. && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
  26. # 安装 Composer,此物是 PHP 用来管理依赖关系的工具
  27. && curl -sS https://getcomposer.org/installer
  28. | php -- --install-dir=/usr/local/bin --filename=composer
  29. # 国内镜像加速
  30. && composer config -g repo.packagist composer https://packagist.phpcomposer.com
  31. && composer global require hirak/prestissimo
  32. # 开启 URL 重写模块
  33. # 配置默认放置 App 的目录
  34. RUN a2enmod rewrite
  35. && mkdir -p /app
  36. && rm -fr /var/www/html
  37. && ln -s /app/public /var/www/html
  38. WORKDIR /app
  39. # 预先加载 Composer 包依赖,优化 Docker 构建镜像的速度
  40. COPY ./composer.json /app/
  41. COPY ./composer.lock /app/
  42. RUN composer install --no-autoloader --no-scripts
  43. # 复制代码到 App 目录
  44. COPY . /app
  45. # 执行 Composer 自动加载和相关脚本
  46. # 修改目录权限
  47. RUN composer install
  48. && chown -R www-data:www-data /app
  49. && chmod -R 0777 /app/storage

如果根据上一篇文章的写法,修改.env 将数据库指向上一篇所写的 MySQL 容器,然后产生镜像,最后创建容器,运行起来,但这不是本文的目标,本文的目标是利用「docker composer」来结合多个镜像,配置 Laravel 环境。

</>复制代码

  1. Compose is a tool for defining and running multi-container Docker applications. With Compose, you use a Compose file to configure your application’s services. Then, using a single command, you create and start all the services from your configuration.

所以下一步需要编写「docker-compose.yml」文档

「docker-compose.yml」文档

直接看代码了,容易理解

</>复制代码

  1. version: "3"
  2. services:
  3. app:
  4. build: .
  5. restart: always
  6. depends_on:
  7. - mysql
  8. ports:
  9. - "8000:80"
  10. networks:
  11. - app
  12. mysql:
  13. image: daocloud.io/mysql:latest
  14. volumes:
  15. - db_data:/var/lib/mysql
  16. restart: always
  17. environment:
  18. MYSQL_ROOT_PASSWORD: somewordpress
  19. MYSQL_DATABASE: homestead
  20. MYSQL_USER: homestead
  21. MYSQL_PASSWORD: secret
  22. ports:
  23. - 8002:3306
  24. networks:
  25. - app
  26. networks:
  27. app:
  28. volumes:
  29. db_data:

执行构建命令:

</>复制代码

  1. docker-compose up -d

执行结果如下:

在浏览器输入:http://localhost:8000,运行如下:

总结

这里还剩下一个小尾巴有待于各位去检验:创建了 MySQL 容器,但具体和 Laravel 项目怎么结合?

注:由于通过命令 laravel new 创建 blog 项目时,就已经把 composer 依赖包下载回来了,由于大家的本地环境和 docker 环境不一致,所以我把 vendor 整个文件夹删除了,这也好理解,因为我们和别人配合时,在版本库中也不会有 vendor 依赖包文件夹的。

「docker-compose.yml」文档写法规则请听下回分解

附:使用 MySQL 镜像

启动一个 MySQL 实例非常简单:

</>复制代码

  1. docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=000000 -e MYSQL_DATABASE=yemeishu_database daocloud.io/mysql:latest

我们进入该容器看看,是不是已经创建了数据库:yemeishu_database,以及是否设置了 root 的密码为:000000。

如果使用数据库客户端,也可以看到创建的数据库:yemeishu_database


感谢您能看到这了

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/27026.html

相关文章

  • 使用 docker-compose 搭建 Laravel 环境 ()

    摘要:更换源更新源使用的源通过安装脚本安装应用所需要的依赖。 showImg(https://segmentfault.com/img/remote/1460000011106825); 有了第二篇《使用 Docker 搭建简易的 Java Web 环境 (二)》,懂了如何通过单一镜像创建 Docker 环境,这篇主要学习如何使用「docker-compose」。目标是:搭建 Laravel...

    bingchen 评论0 收藏0
  • PHP开发环境03 - 使用KFKDock搭建PHP项目环境

    摘要:基于快速搭建服务根据自定义配置文件快速搭建环境。目录此项目能做什么地址视频教程包含软件项目目录结构快速运行运行服务运行项目运行前端服务此项目能做什么搭建开发生产环境。搭建开发生产环境。 基于Docker快速搭建Web服务 根据自定义配置文件快速搭建Web环境。 目录 此项目能做什么 GItHub地址、视频教程 包含软件 项目目录结构 快速运行KFKDock 运行PHP服务 运行L...

    Zhuxy 评论0 收藏0
  • PHP开发环境03 - 使用KFKDock搭建PHP项目环境

    摘要:基于快速搭建服务根据自定义配置文件快速搭建环境。目录此项目能做什么地址视频教程包含软件项目目录结构快速运行运行服务运行项目运行前端服务此项目能做什么搭建开发生产环境。搭建开发生产环境。 基于Docker快速搭建Web服务 根据自定义配置文件快速搭建Web环境。 目录 此项目能做什么 GItHub地址、视频教程 包含软件 项目目录结构 快速运行KFKDock 运行PHP服务 运行L...

    yagami 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<