有了第二篇《使用 Docker 搭建简易的 Java Web 环境 (二)》,懂了如何经过单一镜像建立 Docker 环境,这篇主要学习如何使用「docker-compose」。目标是:搭建 Laravel 开发环境php
Laravel 让咱们书写优雅的代码
为 Web 艺术家创造的 PHP 框架html
学习 Laravel,或者 PHP,不得不使用 composer。node
Composer 是 PHP 的一个依赖管理工具。它容许你申明项目所依赖的代码库,它会在你的项目中为你安装他们。
Composer 不是一个包管理器。是的,它涉及 "packages" 和 "libraries",但它在每一个项目的基础上进行管理,在你项目的某个目录中(例如 vendor)进行安装。默认状况下它不会在全局安装任何东西。所以,这仅仅是一个依赖管理。mysql这种想法并不新鲜,Composer 受到了 node's npm 和 ruby's bundler 的强烈启发。而当时 PHP 下并无相似的工具。laravel
Composer 将这样为你解决问题:git
a) 你有一个项目依赖于若干个库。sql
b) 其中一些库依赖于其余库。docker
c) 你声明你所依赖的东西。数据库
d) Composer 会找出哪一个版本的包须要安装,并安装它们(将它们下载到你的项目中)。
参考:http://docs.phpcomposer.com/00-intro.htmlapache
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');"
2.使用 Packagist / Composer 中国全量镜像加速
修改 composer 的全局配置文件(推荐方式)
composer config -g repo.packagist composer https://packagist.phpcomposer.com
3.并行 composer install
composer global require hirak/prestissimo
下载若有神助!!!
能够经过 Laravel 安装工具:
composer global require "laravel/installer"
而后就可使用 laravel new
命令安装 Laravel 项目了,如:
laravel new blog
也能够经过 composer 建立:
composer create-project --prefer-dist laravel/laravel blog
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」文档
直接看代码了,容易理解
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 实例很是简单:
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
感谢您能看到这了