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

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

Laravel 安装

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

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

Composer 是 PHP 的一个依赖管理工具。它允许你申明项目所依赖的代码库,它会在你的项目中为你安装他们。 Composer 不是一个包管理器。是的,它涉及 "packages" 和 "libraries",但它在每个项目的基础上进行管理,在你项目的某个目录中(例如 vendor)进行安装。默认情况下它不会在全局安装任何东西。因此,这仅仅是一个依赖管理。 这种想法并不新鲜,Composer 受到了 node's npm 和 ruby's bundler 的强烈启发。而当时 PHP 下并没有类似的工具。 Composer 将这样为你解决问题: a) 你有一个项目依赖于若干个库。 b) 其中一些库依赖于其他库。 c) 你声明你所依赖的东西。 d) Composer 会找出哪个版本的包需要安装,并安装它们(将它们下载到你的项目中)。 参考:http://docs.phpcomposer.com/00-intro.html

composer

1.使用 php 命令安装

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

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

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

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

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

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

3.并行 composer install

composer global require hirak/prestissimo

下载如有神助!!!

创建 Laravel 项目

可以通过 Laravel 安装工具:

composer global require "laravel/installer"

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

laravel new blog

也可以通过 composer 创建:

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

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

构建 php + apache 镜像

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

 FROM daocloud.io/php:7.1.8-apache

2.更换 163 源:

 #更新apt-get源 使用163的源

RUN mv /etc/apt/sources.list /etc/apt/sources.list.bak && \    
 echo "deb http://mirrors.163.com/debian/ jessie main non-free contrib" >/etc/apt/sources.list && \    
 echo "deb http://mirrors.163.com/debian/ jessie-proposed-updates main non-free contrib" >>/etc/apt/sources.list && \    
 echo "deb-src http://mirrors.163.com/debian/ jessie main non-free contrib" >>/etc/apt/sources.list && \    
 echo "deb-src http://mirrors.163.com/debian/ jessie-proposed-updates main non-free contrib" >>/etc/apt/sources.list

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

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

4.创建 Laravel 目录结构:

# 开启 URL 重写模块# 配置默认放置 App 的目录RUN a2enmod rewrite \
    && mkdir -p /app \
    && rm -fr /var/www/html \
    && ln -s /app/public /var/www/html

WORKDIR /app

5.加载 composer 依赖包

# 预先加载 Composer 包依赖,优化 Docker 构建镜像的速度

COPY ./composer.json /app/
COPY ./composer.lock /app/
RUN composer install  --no-autoloader --no-scripts

最终整个 Dockerfile 如下所示:

FROM daocloud.io/php:7.1.8-apache#更新apt-get源 使用163的源RUN mv /etc/apt/sources.list /etc/apt/sources.list.bak && \    echo "deb http://mirrors.163.com/debian/ jessie main non-free contrib" >/etc/apt/sources.list && \    echo "deb http://mirrors.163.com/debian/ jessie-proposed-updates main non-free contrib" >>/etc/apt/sources.list && \    echo "deb-src http://mirrors.163.com/debian/ jessie main non-free contrib" >>/etc/apt/sources.list && \    echo "deb-src http://mirrors.163.com/debian/ jessie-proposed-updates main non-free contrib" >>/etc/apt/sources.list# APT 自动安装 PHP 相关的依赖包,如需其他依赖包在此添加RUN apt-get update \
    && apt-get install -y \
        libmcrypt-dev \
        libz-dev \
        git \
        wget \
        libpcre3-dev \    # 官方 PHP 镜像内置命令,安装 PHP 依赖
    && docker-php-ext-install \
        mcrypt \
        mbstring \
        pdo_mysql \
        zip \    # 用完包管理器后安排打扫卫生可以显著的减少镜像大小
    && apt-get clean \
    && apt-get autoclean \
    && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* \    # 安装 Composer,此物是 PHP 用来管理依赖关系的工具
    && curl -sS https://getcomposer.org/installer \
        | php -- --install-dir=/usr/local/bin --filename=composer \    # 国内镜像加速
    && composer config -g repo.packagist composer https://packagist.phpcomposer.com \
    && composer global require hirak/prestissimo# 开启 URL 重写模块# 配置默认放置 App 的目录RUN a2enmod rewrite \
    && mkdir -p /app \
    && rm -fr /var/www/html \
    && ln -s /app/public /var/www/html

WORKDIR /app# 预先加载 Composer 包依赖,优化 Docker 构建镜像的速度COPY ./composer.json /app/
COPY ./composer.lock /app/
RUN composer install  --no-autoloader --no-scripts# 复制代码到 App 目录COPY . /app# 执行 Composer 自动加载和相关脚本# 修改目录权限RUN composer install \
    && chown -R www-data:www-data /app \
    && chmod -R 0777 /app/storage

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

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」文档

直接看代码了,容易理解

version: '3'

services:
  app:
    build: .
    restart: always
    depends_on:
      - mysql
    ports:
       - "8000:80"
    networks:
      - app

  mysql:
    image: daocloud.io/mysql:latest
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: somewordpress
      MYSQL_DATABASE: homestead
      MYSQL_USER: homestead
      MYSQL_PASSWORD: secret
    ports:
      - 8002:3306
    networks:
      - app
networks:
  app:
volumes:
  db_data:

执行构建命令:

docker-compose up -d

执行结果如下:

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

总结

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

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

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

附:使用 MySQL 镜像

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

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


原文发布于微信公众号 - coding01(coding01)

原文发表时间:2017-09-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏云计算

如何在Kubernetes群集上安装,配置和部署NGINX

Kubernetes是一个基于Google Borg的开源容器管理系统。它可以配置为提供高度可用的,水平自动缩放的自动部署。本指南介绍如何在Linode上设置K...

99630
来自专栏散尽浮华

python报错问题解决:'ascii' codec can't encode character

之前部署了openstack虚拟化环境,有一天在使用nova list查看虚拟机的时候,突然报错!如下: [root@linux-node1 src]# nov...

22960
来自专栏finleyMa

docker学习系列2 保存对容器的修改

注意: 经查,不推荐更改运行中的容器配置,容器本身是无状态的,当然也可以通过进入容器内部的方式进行更改: docker exec -it 这样的更改是无法持久...

2.2K10
来自专栏JMCui

Docker 系列五(Docker Compose 项目).

    Docker Compose 是官方编排项目之一,负责快速的部署分布式应用。它允许用户通过一个单独的 docker-compose.yml 模板文件(Y...

10020
来自专栏吴伟祥

Linux中ctrl-c, ctrl-z, ctrl-d 区别

1、Ctrl+C比较暴力,就是发送Terminal到当前的程序,比如你正在运行一个查找功能,文件正在查找中,Ctrl+C就会强制结束当前的这个进程。

9510
来自专栏Petrichor的专栏

ubuntu: wget 指令

11120
来自专栏散尽浮华

完整部署CentOS7.2+OpenStack+kvm 云平台环境(4)--用OZ工具制作openstack镜像

在部署openstack云平台环境的时候,需要上传镜像到glance。 首先下载iso镜像,这里下载了centos6.5镜像,放到/usr/local/src目...

42290
来自专栏杂烩

Docker容器之最小JDK基础镜像 原

    2、因为java依赖glibc,所以基础镜像使用的是alpine-glibc而非alpine,alpine-glibc大概是11.1M。

70620
来自专栏散尽浮华

Docker管理工具-Swarm部署记录

介绍另一个管理工具Swarm的用法,Swarm是Docker原生的集群管理软件,与Kubernetes比起来比较简单。

64260
来自专栏云计算

Docker for Devs:创建一个开发版镜像

Docker for Devs 系列包括以下6篇文章,这是第二篇。

35290

扫码关注云+社区

领取腾讯云代金券