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

group_5622_0
group_5622_0

有了第二篇《使用 Docker 搭建簡易的 Java Web 環境 (二)》,懂了如何經過單一鏡像建立 Docker 環境,這篇主要學習如何使用「docker-compose」。目標是:搭建 Laravel 開發環境php

Laravel 安裝

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 會找出哪一個版本的包須要安裝,並安裝它們(將它們下載到你的項目中)。
參考:docs.phpcomposer.com/00-intro.ht…apache

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');"複製代碼

更多查看:getcomposer.org/download/

2.使用 Packagist / Composer 中國全量鏡像加速

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

composer config -g repo.packagist composer https://packagist.phpcomposer.com複製代碼

更多查看:pkg.phpcomposer.com/

3.並行 composer install

composer global require hirak/prestissimo複製代碼

WX20170912-154506@2x
WX20170912-154506@2x

下載若有神助!!!

建立 Laravel 項目

能夠經過 Laravel 安裝工具:

composer global require "laravel/installer"複製代碼

而後就可使用 laravel new 命令安裝 Laravel 項目了,如:

laravel new blog複製代碼

也能夠經過 composer 建立:

composer create-project --prefer-dist laravel/laravel blog複製代碼

更多查看:d.laravel-china.org/docs/5.4/in…

構建 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複製代碼

WX20170911-213430@2x
WX20170911-213430@2x

咱們進入該容器看看,是否是已經建立了數據庫:yemeishu_database,以及是否設置了 root 的密碼爲:000000。

WX20170911-213820@2x
WX20170911-213820@2x

若是使用數據庫客戶端,也能夠看到建立的數據庫:yemeishu_database

WX20170911-213933@2x
WX20170911-213933@2x


coding01 期待您關注

qrcode
qrcode


感謝您能看到這了

qrcode
qrcode
相關文章
相關標籤/搜索