用 Docker 取代 Laravel Homestead 開發環境

docker

新手第一次接觸 Laravel,我都會推薦使用 Homestead 來解決開發環境的困擾,但是我發現 Homestead 對於第一次接觸 Virtualbox 及指令的初學者,設定還是比較複雜,造成很多新手光是在這邊就卡關了,有沒有什麼辦法可以解決這煩人又複雜的 Homestead 設定,剛好今天在 Github 上看到 laraedit-docker 專案,此專案是把 Homestead 轉換成用 Docker 來跑,這樣只要您的環境有支援 Docker,就可以快速設定好環境含 MySQL, Redis …等

建立 Laravel 專案

透過 Composer 指令建立 Laravel 專案

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

先假設 blog 目錄路徑為 ~/git/blog,此路徑底下會用到

使用 Docker

首先從 Docker hub 下載 laraedit-docker 映像檔

$ docker pull laraedit/laraedit

完成下載後,就可以直接啟動專案

$ docker run -d --name laravel -p 8082:80 -p 3307:3306 -v ~/git/blog:/var/www/html/app laraedit/laraedit

參數說明

--name: 啟動後服務名稱
-p: 啟動外面的 port 對應到 container 內部 port
-v: 目錄掛載

laraedit 預設將 80, 443, 3306, 6379 port 開出來,所以如果外部要直接存取,請使用 -p 參數來設定。

登入 Docker Shell

要透過 ssh 連入 Docker 請透過底下指令

$ docker exec -it laravel /bin/bash

其中 laravel 就是最上面 --name 設定,執行指令後,你就會進入 Shell 模式,可以進行 DB 操作記錄,執行 DB Migration 等…

進入 MySQL Console

上面我們將 3307 port 對應到 docker 內部 3306 port,所以可以透過 mysql 指令直接連上 MySQL 服務

$ mysql -u homestead -h 192.168.99.100 -P 3307 -p

預設帳號為 homestead 密碼為 secret

$ mysql -u homestead -h 192.168.99.100 -P 3307 -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 5.7.11 MySQL Community Server (GPL)

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| homestead          |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.01 sec)

mysql>

大致上用 Docker 就取代了 Homestead,所以大家快點把 Docker 安裝到自己的電腦。

  • 陳阿仔

    用這方法 restart docker ~ 會不會mysql 資料 不見 ~@@

  • 陳阿仔

    用這方法 restart docker ~ 會不會mysql 資料 不見 ~@@

  • 陳阿仔

    用這方法 restart docker ~ 會不會mysql 資料 不見 ~@@

  • 陳阿仔

    用這方法 restart docker ~ 會不會mysql 資料 不見 ~@@

  • 陳阿仔

    用這方法 restart docker ~ 會不會mysql 資料 不見 ~@@

  • appleboy48

    不會啊,除非你把該 docker container 砍掉喔。基本上你把 docker 關掉,資料都還會存在,重新開啟 docker 後,在下 docker start laravel 就可以了,其中 laravel 是你取的 container 名稱

  • 陳阿仔

    了解 謝啦 😀

  • Hubuki Yu

    請問 mysql -u homestead -h 192.168.99.100 -P 3307 -p 中 192.168.99.100這個ip是什麼的ip呢?
    因為我連不上,會出現錯誤訊息 “ERROR 2003 (HY000): Can’t connect to MySQL server on ‘192.168.99.100’ (111)”
    謝謝

  • appleboy48

    192.168.99.100 是你的 docker host ip。

  • Hubuki Yu

    原來如此!
    要怎麼看那個docker 的 host ip呢?
    感恩~

  • Devin Yang

    歡迎試試D-Laravel.
    https://github.com/DevinY/dlaravel

  • Pingback: 用 Docker 取代 Laravel Homestead – Chris學習筆記()