自建 Laravel 的 Docker 開發環境

很久沒寫東西,今天說一說怎麼自建一個 Laravel 運行的 Docker 環境。php

市面上最出名的莫過於「laradock」github.com/laradock/la…node

Docker PHP development environment. 使用參考:laradock.iopython

既然是「自建」,那咱們能夠參考這個,最小化知足 Laravel 運行的須要。mysql

下面是我羅列出的基本條件:linux

  1. 軟件:PHP 7.二、Nginx、MySQL、Composer、NPM or Yarn 等等;
  2. 使用國內鏡像;使用國內鏡像;使用國內鏡像;
  3. 易於擴展使用,如隨時能夠切換 PHP 版本,或者 Apache 和 Nginx 切換使用。

Docker-Compose

要達到可擴展行,和「laradock」同樣,使用 Docker-Compose 編排的方式,將核心的幾個 image 組裝在一塊兒。nginx

php-fpm

這裏咱們使用的是「DaoCloud」加速鏡像 —— 7.2-fpm-alpinelaravel

該版本既用 PHP 7.2 版本,並且 alpine 最小化系統,能夠基於此,安裝環境須要的額外工具:如,composernodejspythonyarn 等。git

FROM daocloud.io/php:7.2-fpm-alpine

MAINTAINER coding01 <yemeishu@126.com>

RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories

RUN apk add --no-cache --virtual .build-deps \
        $PHPIZE_DEPS \
        curl-dev \
        imagemagick-dev \
        libtool \
        libxml2-dev \
        postgresql-dev \
        sqlite-dev \
    && apk add --no-cache \
        curl \
        git \
        imagemagick \
        mysql-client \
        postgresql-libs \
    && pecl install imagick \
    && docker-php-ext-enable imagick \
    && docker-php-ext-install \
        curl \
        iconv \
        mbstring \
        pdo \
        pdo_mysql \
        pdo_pgsql \
        pdo_sqlite \
        pcntl \
        tokenizer \
        xml \
        zip \
    && curl -s https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin/ --filename=composer \
    && apk del -f .build-deps

# 修改 composer 爲國內鏡像
RUN composer config -g repo.packagist composer https://packagist.laravel-china.org

# install prestissimo
RUN composer global require "hirak/prestissimo"

# install laravel envoy
RUN composer global require "laravel/envoy"

#install laravel installer
RUN composer global require "laravel/installer"

RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories

RUN apk update && apk add -u nodejs libpng-dev python

ENV PATH /root/.yarn/bin:$PATH

RUN apk update \
  && apk add curl bash binutils tar \
  && rm -rf /var/cache/apk/* \
  && /bin/bash \
  && touch ~/.bashrc \
  && curl -o- -L https://yarnpkg.com/install.sh | bash \
  && yarn config set registry 'https://registry.npm.taobao.org' \
  && npm install -g cnpm --registry=https://registry.npm.taobao.org

WORKDIR /var/www
複製代碼

其中安裝 alpine 系統插件,咱們使用 mirrors.aliyun.com 阿里雲鏡像。github

php:7.2-fpm-alpine 具體使用,能夠參考:dashboard.daocloud.io/packages/01…web

nginx

咱們使用 nginx,主要是將網站的配置文件載入 nginx 中。

FROM daocloud.io/nginx:1.13-alpine

MAINTAINER coding01 <yemeishu@126.com>

ADD vhost.conf /etc/nginx/conf.d/default.conf

WORKDIR /var/www
複製代碼

剩下就是鏈接這些 images。最後看看 docker-compose.yml 文件內容:

version: '2'
services:

  # The Application
  app:
    build:
      context: ./
      dockerfile: app.dockerfile
    working_dir: /var/www
    volumes:
      - ../:/var/www
    environment:
      - "DB_PORT=3306"
      - "DB_HOST=database"
      - "REDIS_HOST=redis"
      - "REDIS_PORT=6379"

  # The Web Server
  web:
    build:
      context: ./
      dockerfile: web.dockerfile
    working_dir: /var/www
    volumes_from:
      - app
    ports:
      - 8080:80

  # The Database
  database:
    image: daocloud.io/mysql:5.7.4
    volumes:
      - dbdata:/var/lib/mysql
    environment:
      - "MYSQL_DATABASE=homestead"
      - "MYSQL_USER=homestead"
      - "MYSQL_PASSWORD=secret"
      - "MYSQL_ROOT_PASSWORD=secret"
    ports:
        - "3306:3306"

  redis:
    image: daocloud.io/library/redis:4.0.10-alpine
    command: redis-server --appendonly yes

volumes:
  dbdata:
複製代碼

測試一遍

建立 Laravel 項目

composer create-project laravel/laravel demo
複製代碼

*注:*爲了作測試,能夠將 vendor 文件夾和 composer.lock 文件刪除。

git clone

demo 項目相同文件夾下,git clone 咱們自建的「laraveldocker」:

git clone https://github.com/fanly/laraveldocker.git
複製代碼

修改 docker-compose.yml

docker-compose.yml 文件的路徑執行咱們的項目:

app:
    build:
      context: ./
      dockerfile: app.dockerfile
    working_dir: /var/www
    volumes:
      - ../:/var/www
複製代碼

build

laraveldocker 下執行構建命令:

docker-compose up
複製代碼

整個速度仍是蠻快的

接下來進入容器內

docker exec -it de075c525528 bash
複製代碼

咱們看看安裝插件的效果:

使用的是 https://packagist.laravel-china.org 國內鏡像。

注:該鏡像是由 Laravel China 社區聯合 又拍雲 與 優帆遠揚 共同合做推出的公益項目,旨在爲廣大 PHP 用戶提供穩定和高速的 Composer 國內鏡像服務。

值得推薦使用

參考:laravel-china.org/topics/4484…

使用 yarn 或者 cnpm 安裝插件:

生成 Laravel key secret

cp .env.example .env
php artisan key:generate

Application key [base64:4A7VK6MEX7FakPLDSLji97kz/nyWUAWhW4wYn3gefsY=] set successfully.
複製代碼

運行下看看效果吧:

咱們接下來看看數據庫鏈接吧,修改 .env

DB_CONNECTION=mysql
DB_HOST=database
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret
複製代碼

咱們使用 php artisan make:auth 來生成佈局、註冊和登陸視圖以及全部的認證接口的路由。同時它還會生成 HomeController 來處理應用的登陸請求。使用 php artisan migrate 來載入數據。

咱們看看數據表:

至此,說明咱們鏈接 MySQL 數據庫 OK.

總結

在學習過程當中,使用別人作好的 Dockerfile,雖能夠直接拿來使用,但若是能自給自足,那最好不過了。

經過自建 docker 開發環境過程當中,也能讓本身學到更多。接下來還會不斷完善,最小化知足開發須要。

代碼已放在 github 上,歡迎參考和提出 issue

github.com/fanly/larav…

最後也能夠看以前對 「Laradock」的使用文章:

經過 Laradock 學 Docker —— 配置篇

經過 Laradock 學 Docker-HTTPS

相關文章
相關標籤/搜索