使用docker搭建laravel開發環境

爲什麼用docker?

在電腦仍是window系統的時候,常常須要基於vm服務搭建一套環境才能更好地(應該是更貼近線上環境)進行開發,而如今在docker的神祕光環底下已經能實現用最小的資源搭建本地開發環境,同時能更好地遷移到其餘地方。php

前置知識

  • 瞭解docker安裝及使用
  • 瞭解docker-compose命令行的使用
  • 瞭解laravel安裝及使用

本文主要使用laradock進行本地的docker配置。laradock已經集成laravel須要使用的環境,只須要簡單修改配置就能搭建環境提供開發,對開發及管理來講真是一味良方。html

簡單說明一下,在docker環境下咱們須要運行laravel項目,實際會創建下幾個容器(container):mysql

  • workspace (開發環境)
  • php-fpm (php支持)
  • nginx (web服務)
  • mysql (數據庫)

這些都是基於laradock再處理後的生成的容器,可參考laradock目錄下相應名字的目錄,裏面包含Dockerfile及相關配置,感興趣的同窗能夠盡情閱讀學習 :)nginx

更加深刻的內容建議移步至laradock官方文檔laravel

準備

在window系統下先安裝dockergit

找到支持的window包下載

等屢次重啓後運行docker命令測試一下。github

輸入docker命令測試

而後在你項目的平級目錄使用git拉取https://github.com/laradock/laradock.git這個包。web

# 平級目錄

D:/www/
 - /laradock
 - /my-project

這樣準備就緒進入下一步。sql

配置

這裏配置的環境按經常使用環境進行配置docker

  • nginx
  • php-fpm 5.6
  • mysql 5.6

接着須要修改laradock/.env文件

/www/laradock
 - .env

進入laradock目錄會發現並不存在.env文件,這裏須要咱們從env-example複製一份進行修改。

# /www/laradock

$ cp env-example .env

修改PHP版本

進入.env文件找到 PHP_VERSION 修改php版本爲56(默認71,可選71, 70, 56)。

# /www/laradock/.env
### PHP Version

PHP_VERSION=56

修改Mysql版本及配置

進入.env文件找到 MYSQL 修改mysql版本爲56(默認8,可選8, 5, 5.6, 5.5)。

其餘的設置根據我的須要填寫,通常狀況下須要修改MYSQL_USER, MYSQL_PASSWORD, MYSQL_ROOT_PASSWORD 來確保連接。

# /www/laradock/.env
### MYSQL

MYSQL_VERSION=5.6

# MYSQL_DATABASE 可選,填寫後會默認建立同名數據庫
MYSQL_DATABASE=default

# MYSQL_USER 用戶,填寫後會建立用戶,默認爲 default
MYSQL_USER=packy

# MYSQL_PASSWORD 密碼,填寫後做爲新建用戶的密碼,默認爲 secret
MYSQL_PASSWORD=123456-

# MYSQL_PORT 訪問端口,默認是3306,建議不要修改
MYSQL_PORT=3306

# MYSQL_ROOT_PASSWORD root用戶密碼,建議使用嚴謹的密碼,默認爲 root
MYSQL_ROOT_PASSWORD=23333-
MYSQL_ENTRYPOINT_INITDB=./mysql/docker-entrypoint-initdb.d

關於Mysql版本選擇

mysql使用的是官方鏡像,因此咱們可使用hub.docker.com查詢mysql官方鏡像包含哪些版本。具體如何選擇得看各自的需求。

docker hub 的mysql頁面說明

修改nginx配置

通常狀況下並不須要修改什麼,使用默認的即可。關於網站的配置須要進入laradock/nginx/sites

如須要修改端口能夠進入 .env文件找到 NGINX進行修改。
# /www/laradock/.env
### NGINX

NGINX_HOST_HTTP_PORT=80
NGINX_HOST_HTTPS_PORT=443

# NGINX_HOST_LOG_PATH log存放位置,默認位置在laradock/logs/nginx/
NGINX_HOST_LOG_PATH=./logs/nginx/

# NGINX_SITES_PATH 網站配置, 默認位置在laradock/nginx/sites/
NGINX_SITES_PATH=./nginx/sites/

NGINX_PHP_UPSTREAM_CONTAINER=php-fpm
NGINX_PHP_UPSTREAM_PORT=9000

關於Nginx的配置

nginx的配置文件存放在laradock/nginx/sites下,須要新建網站的可經過複製對應的.example並重命名爲.conf進行修改。注:只用.conf文件纔會在nginx下加載。

這裏我複製laravel.conf.example做爲例子重命名爲my-project.conf

# laradock/nginx/sites/my-project.conf
server {

    listen 80;
    listen [::]:80;

    # 域名,改成你的域名
    server_name my-project.com;
    # 項目目錄,均以 /var/www/ 開頭。這個約定後續會說明
    root /var/www/my-project;
    index index.php index.html index.htm;

    location / {
         try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ \.php$ {
        try_files $uri /index.php =404;
        fastcgi_pass php-upstream;
        fastcgi_index index.php;
        fastcgi_buffers 16 16k;
        fastcgi_buffer_size 32k;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.ht {
        deny all;
    }

    location /.well-known/acme-challenge/ {
        root /var/www/letsencrypt/;
        log_not_found off;
    }

    error_log /var/log/nginx/laravel_error.log;
    access_log /var/log/nginx/laravel_access.log;
}

同時修改宿主機(就是window本地機子)的hosts

# C:\Windows\System32\drivers\etc\hosts

127.0.0.1   my-project.com

嘗試運行

到這步準備工做差很少完成了。

運行如下命令進行安裝及使用,由於是國外源拉取時間比較慢請耐心等待。

docker-compose up -d nginx mysql

安裝過程

完成後輸入docker ps參看容器運行狀況。一切正常!!!

容器運行狀況

嘗試訪問http://my-project.com看看效果。目前能正常訪問php文件。

訪問my-project.com

運行laravel

這裏就不得說workspace這個容器,它做爲工做區提供各種工具使用(包含:PHP CLI, Composer, Git, Linuxbrew, Node, V8JS, Gulp, SQLite, xDebug, Envoy, Deployer, Vim, Yarn等)。

那如何使用這些功能呢?

首先進入workspace容器

# /www/laradock
docker-compose exec workspace bash

composer換國內源

進到容器後默認就是項目目錄/var/www,因爲composer用的是國外源比較慢,這裏須要切換成國內源。

composer config -g repo.packagist composer https://packagist.phpcomposer.com

安裝laravel

這裏咱們須要在my-project目錄安裝laravel。

*注:須要提早把my-project裏的全部內容清空
composer create-project laravel/laravel my-project2 "5.2.*" && \
cd my-project && \
php artisan key:generate

配置並重啓nginx

安裝完成後,把laradock/nginx/sites/my-project.conf文件下的網站目錄地址稍微改一下

server {

    listen 80;
    listen [::]:80;

    server_name my-project.com;
    # 加上public目錄
    root /var/www/my-project/public;
    index index.php index.html index.htm;

    ...
}

重啓nginx容器

# /www/laradock
docker-compose restart nginx

正常訪問laravel

關於數據庫服務

# .env
DB_CONNECTION=mysql

# mysql的容器網絡已經解析至"mysql"域,因此這裏配置"mysql"域便能訪問
DB_HOST=mysql

# 默認3306,通常不須要改動,如要改動端口應該與laradock/.env中的MYSQL_PORT一致
DB_PORT=3306

# 數據庫
DB_DATABASE=default

# 用戶
DB_USERNAME=packy

# 密碼
DB_PASSWORD=123456-

一些問題:

Q:運行失敗,提示ERROR: for laradock_mysql_1 Cannot create container for service mysql: Drive sharing seems blocked by a firewall

A:先暫停你本機殺毒程序的防護進程。


Q:運行失敗,提示ERROR: for laradock_nginx_1 Cannot start service nginx: driver failed programming external connectivity on endpoint laradock_nginx_1 (6e4f4761d30f4cd80c44c6b0fddfbd4ef0324529099aace02bee6a6653ce453a): Error starting userland proxy: Bind for 0.0.0.0:443 failed: port is already allocated

A:建議你切換端口,我已嘗試改成1443能正常運行,目前只能以這種方式處理。


# .env
### NGINX

NGINX_HOST_HTTPS_PORT=1443

Q:爲什麼網站目錄必須以/var/www開頭?

A:網站訪問進入的是nginx容器,/var/www目錄就是容器內網站目錄存放的位置。因爲配置在建立容器時,會將本地目錄掛載至/var/www目錄,因此就能訪問到本地的代碼。這塊設置在laradock/.env中找到APPLICATION可自行設置。


Q:Windows下開啓了Hyper-v後安卓模擬器及VMware均不能用了?

A:對的,貌似是由於Hyper-v獨佔硬件虛擬化,使用其餘虛擬化技術(如:VMware, virtualbox)均不能使用(開啓可能藍屏),目前並無共存手段。這裏博主建議須要模擬安卓系統的能夠直接在Hyper-v上安裝,關於GUI渲染的性能方面據說還行。(博主並沒嘗試,考慮最近嘗試一波)

相關文章
相關標籤/搜索