很久沒寫東西,今天說一說怎麼自建一個 Laravel 運行的 Docker 環境。php
市面上最出名的莫過於「laradock」https://github.com/laradock/laradocknode
![]()
Docker PHP development environment.
使用參考:http://laradock.iopython
既然是「自建」,那咱們能夠參考這個,最小化知足 Laravel 運行的須要。mysql
下面是我羅列出的基本條件:linux
要達到可擴展行,和「laradock」同樣,使用 Docker-Compose 編排的方式,將核心的幾個 image 組裝在一塊兒。nginx
這裏咱們使用的是「DaoCloud」加速鏡像 —— 7.2-fpm-alpine
。laravel
該版本既用 PHP 7.2
版本,並且 alpine
最小化系統,能夠基於此,安裝環境須要的額外工具:如,composer
、nodejs
、python
、yarn
等。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
具體使用,能夠參考:https://dashboard.daocloud.io/packages/019c8dce-ec80-4468-bddc-254fc62ef5c7web
咱們使用 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:
composer create-project laravel/laravel demo
注:爲了作測試,能夠將 vendor
文件夾和 composer.lock
文件刪除。
在 demo
項目相同文件夾下,git clone
咱們自建的「laraveldocker」:
git clone https://github.com/fanly/laraveldocker.git
將 docker-compose.yml
文件的路徑執行咱們的項目:
app: build: context: ./ dockerfile: app.dockerfile working_dir: /var/www volumes: - ../:/var/www
在 laraveldocker
下執行構建命令:
docker-compose up
整個速度仍是蠻快的
接下來進入容器內
docker exec -it de075c525528 bash
咱們看看安裝插件的效果:
使用的是 https://packagist.laravel-china.org
國內鏡像。
注:該鏡像是由 Laravel China 社區聯合 又拍雲 與 優帆遠揚 共同合做推出的公益項目,旨在爲廣大 PHP 用戶提供穩定和高速的 Composer 國內鏡像服務。值得推薦使用
參考:http://laravel-china.org/topics/4484/composer-mirror-use-help
使用 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
:
https://github.com/fanly/laraveldocker
最後也能夠看以前對 「Laradock」的使用文章: