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

coding01發表於2019-03-04

group_5622_0
group_5622_0

有了第二篇《使用 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 會找出哪個版本的包需要安裝,並安裝它們(將它們下載到你的專案中)。
參考:docs.phpcomposer.com/00-intro.ht…

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

相關文章