Docker-用LaraDock搭建PHP環境


簡介

LaraDock 致力於簡化創建開發環境過程,能夠幫助我們在 Docker 上快速搭建 PHP 開發環境。 它預裝了 Docker 鏡像,為我們提供了一站式的開發環境,而不需要再去在本地機器安裝 PHP、Nginx、MySQL 以及其他很多開發過程中需要的軟件。

特點:

  • 在 PHP 版本:7.0,5.6.5.5...之中可以簡單切換。
  • 可選擇你最喜歡的數據庫引擎,比如:MySQL, Postgres, MariaDB...
  • 可運行自己的軟件組合,比如:Memcached, HHVM, Beanstalkd...
  • 所有軟件運行在不同的容器之中,比如:PHP-FPM, NGINX, PHP-CLI...
  • 通過簡單的編寫 Dockerfile 容易定制任何容器。
  • 所有鏡像繼承自一個官方基礎鏡像(Trusted base Images)
  • 可預配置Laravel的Nginx環境
  • 容易應用容器中的配置 配置文件(Dockerfile)
  • 最新的 Docker Compose 版本(docker-compose)
  • 所有的都是可視化和可編輯的
  • 快速的鏡像構建
  • 每周都會有更新...

相關資料:

LaraDock 官網:http://laradock.io

LaraDock Github:https://github.com/LaraDock/laradock 國內下載速度有些慢,可以使用Gitee:https://gitee.com/mirrors/Laradock

Docker掃盲:

安裝

請確保已安裝Docker,LaraDock 鏡像的原理先不介紹,直接進入安裝步驟。

1. 建立工作目錄

新建 webroot 目錄,laradock 和項目的代碼都將放在該目錄下(也可以直接使用以前的 web 根目錄):

$ mkdir webroot && cd webroot

2. 克隆 LaraDock 代碼

進入 webroot 目錄,執行以下命令:

$ git clone https://github.com/Laradock/laradock.git
// 或 git clone https://gitee.com/mirrors/Laradock.git

3. 生成 LaraDock 配置文件

進入 laradock 目錄,執行以下命令:

$ cp env-example .env

如需配置 Nginx 端口、Mysql 密碼等,均在 .env 文件中設置即可。

# 本機項目存放的目錄,默認是和laradock同級,視個人情況修改
APP_CODE_PATH_HOST=../

# 容器中存放項目的目錄,是會和本機項目的目錄建立起軟鏈接
APP_CODE_PATH_CONTAINER=/var/www

# 存放數據的目錄
DATA_PATH_HOST=~/.laradock/data

4. 開啟容器

更改完自己的項目配置后,運行docker-compose構建容器。
在 laradock 目錄下執行以下命令,可以選擇自己需要啟動的容器:

$ docker-compose up -d nginx mysql redis

由於Laradock中的軟件源並沒有為國內做優化,都是默認在國外的。所以構造速度視網絡情況,如果比較慢可以只構建基本的nginx和mysql,它們會自動構建php-fpm 和 workspace這兩個兩個容器,后續需要什么服務等要用到時候再去構建。如果特別的慢可以去找下Laradock國內修改版的。

默認情況下,創建的容器具有當前目錄名稱作為后綴(例如laradock_workspace_1

注:所有Web服務器容器nginxapache..依賴於php-fpm,這意味着如果您運行其中任何一個,它們將自動php-fpm為您啟動容器,因此無需在 up 命令中明確指定它。

創建項目(這里我們用Laravel為例)

構建完成后,在laradock同級目錄下創建一個laravel的項目叫myproject

$ composer create-project --prefer-dist laravel/laravel myproject

如果composer安裝速度太慢請更換composer源為國內鏡像。

laravel install :

composer install
cp .env.example .env
php artisan key:generate
chmod -R 777 storage
chmod -R 777 bootstrap/cache
// DB的配置根據之前的配置修改,多個 Docker 容器間的關系類似於依賴網絡進行連接的主機

現在打開http://localhost 項目返回404,需要配置nginx。

進去laradock下的nginx/sites下復制出laravel.conf來更改配置:

$ cd laradock/nginx/sites
$ cp laravel.conf.example laravel.conf
$ vim laravel.conf

將域名和路徑改下:

.
.
server_name myproject.test;
root /var/www/myproject/public;
.
.

修改完后重啟laradock_nginx,也就是重啟nginx

$ docker restart laradock_nginx_1

重啟成功后,編輯hosts

$ sudo vim /etc/hosts

新增需要解析的網站,將0.0.0.0和之前設定的域名關聯

.
.
0.0.0.0 myproject.test
.
.

修改完后瀏覽器打開http://myproject.test就可以訪問了

補充

數據庫配置

基本配置

然后進入數據庫容器:

docker exec -it $database_container_name bash

根據 docker-compose.yml 中的設置,通過 root 進入數據庫服務:

mysql -udefault -psecret

由於多個 Docker 容器間的關系類似於依賴網絡進行連接的主機,要想通過 PHP 容器中的腳本訪問 MySQL 容器的數據庫服務,需要具有遠程連接的數據庫用戶,執行以下命令進行創建:

GRANT ALL PRIVILEGES ON *.* TO username@'%' IDENTIFIED BY 'password';

注意以下幾點:

  1. . 表示對所有數據庫的所有表都具有權限;

  2. % 表示不限制連接的主機 IP,為了安全起見,這里可以把 % 改為 php。注意,這里的 php 其實相當於一個域名,Docker 的內置 DNS 會將其解析為 PHP 容器的地址;

  3. 修改 username 和 password 為自定義的用戶名和密碼。

遠程連接

若想要在本地(非 Docker 宿主機)連接到數據庫容器,需要利用端口映射,將數據庫 Docker 的 3306 端口映射到主機的某個端口(如:12345),然后在本地通過訪問服務器的 $server_ip:12345 並附帶具有遠程訪問權限的用戶名和密碼進行遠程連接(注意 % 的問題)。

在本文所用的 docker-compose.yml 中已經默認打開了 3306:3306 的端口映射,大家可以根據需要進行設置。

創建數據庫

通過以下方式創建一個數據庫並設置字符集:

CREATE DATABASE `database_name` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin

執行 SQL 文件

我們可以把本地的數據庫導出為 .sql 文件,然后在上傳到數據庫容器中並執行,首先在本地將 SQL 文件上傳到宿主服務器:

scp xxx.sql root@your_server_ip:/

然后在宿主服務器中將該文件轉移到數據庫容器中的共享數據卷中,執行:

mv /xxx.sql path/to/docker-compose.yml/database

最后進入數據庫容器並進入 MySQL 數據庫服務,執行:

source /path/to/xxx.sql

參考資料:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM