簡介
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服務器容器
nginx
,apache
..依賴於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';
注意以下幾點:
-
. 表示對所有數據庫的所有表都具有權限;
-
% 表示不限制連接的主機 IP,為了安全起見,這里可以把 % 改為 php。注意,這里的 php 其實相當於一個域名,Docker 的內置 DNS 會將其解析為 PHP 容器的地址;
-
修改 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