使用docker LaraDock搭建PHP環境

8 月 26, 2019 | | 0 comments

雖然這篇叫Docker環境搭建,但是是用了一個別人寫好的配置文件,為什麼要用別人寫好的呢?因為第一節省了我們學習的成本,類似一鍵安裝環境的東西。二節省了我們的構造docker和測試docker的時間。三也省略了我們在去寫額外的服務器配置。 這裡我選用LaraDock,因為它的容器多,不僅僅用來作web服務器。 LaraDock官網 以下,所說的文件夾和目錄是同一個意思,只不過不同的操作系統叫法不一樣而已。 ## 1. 安裝前的準備工作 – GIT – Docker 這兩個各自的官網上都有,這就不多介紹了。安裝也比較方便,沒什麼難點 ## 2. Docker鏡像源更改 這裡我們要更改下Docker源,不然會一直提示連接不了服務器,即便連接上也會下載巨慢。 這裡我選擇DaoCloud 1. 首先註冊DaoCloud號,只有註冊以後,才能用它的加速服務,免費的。所以我們要感謝DaoCloud的免費。 2. 訪問網址http://www.daocloud.io/mirror#accelerator-doc,上面有根據系統如何更改鏡像源,不復雜,很簡單就完成了(PS:這個網址必須在登錄的情況下才能訪問到,免費的服務,為了以後大家都用著舒心就支持下,註冊下) (PS:如果你碰到提示ERROR: Service \\’mysql\\’ failed to build: Get https://registry-1.docker.io/v2/: dial tcp: lookup registry-1.docker.io on 192.168. 65.1:53: too many redirects 這個錯誤提示就是沒有連接上鏡像的服務器,多試幾次就好了) ## 3. 安裝LaraDock 這里以新項目為例,如果是在已有的項目的情況下,請參考LaraDock官方文檔 ` git clone https://github.com/Laradock/laradock.git 這裡會下載一些docker配置文件,git下來後有個laradock目錄,裡面有很多容器,到時候需要什麼容器就加載什麼容器就可以了,非常方便。 ## 4. 修改docker鏡像配置文件 1. 進入剛剛git下來的laradock目錄 2. 拷貝配置文件,並命名為.env cp env-example .env ## 5. 修改配置文件 修改剛剛複制的配置文件,最上面有行Application的配置,是指你項目的位置所在,這裡指的是你的項目要放在哪個文件夾下,把APPLICATION=../改為APPLICATION =../project-z/,當然這個後期也是可以更改的 雖然我把項目放在了project-z目錄下,其實nginx真正訪問到的位置為 project-z/public/ ### Application Path # Point to your application code, will be available at /var/www. APPLICATION=../project-z/ 這個目錄的意思是project-z文件夾的父目錄,是和project-z文件夾在同一級的project-z目錄如果目錄不存在的話一般生成容器的時候會自動創建,如果生成的時候沒創建或者生成容器的時候提示找不到目錄的話,就新建好這個文件夾,因為linxu裡會有權限的問題。 ## 6. 生成容器並啟動服務器 以後如果啟動服務器的話,就執行這條命令就行了。注意,第一次執行這個命令會先從網上服務器裡下載docker鏡像,然後在用鏡像生成容器,有了容器以後,下次啟動就直接啟動容器了。第一次執行因為要下載鏡像,隨便一個鏡像都很大,所以,如果不更改Docker源的話,基本上就無望了。好多人也都是在這步放棄的,即便你更改了Docker源有時候也會下載失敗,多執行幾次這條命令就,直到執行成功。 docker-compose up -d nginx mysql (-d,表示後台啟動。workspace 和 php-fpm 將運行在大部分實例中, 所以不需要在 up 命令中加上它們。) 安裝完成,並且啟動以後的效果,應該類似這樣的 Starting laradock_mysql_1 ... Starting laradock_mysql_1 Recreating laradock_applications_1 ... Recreating laradock_applications_1 ... done Recreating laradock_workspace_1 ... Recreating laradock_workspace_1 ... done Recreating laradock_php-fpm_1 ... Recreating laradock_php-fpm_1 ... done Recreating laradock_nginx_1 ... Recreating laradock_nginx_1 ... done 會發現啟動的時候有些顯示的是done的,這些不用管,我琢磨著應該是重複啟動相同的容器,然後端口被佔用所造成的失敗。 ## 7. 查看啟動效果 在本地的瀏覽器上輸入http://localhost/,會發現提示404,這是因為我們雖然創建了project-z,但是並沒有在裡面新建文件,在裡面放入一個新建的index.php文件。放入index.php文件後重新訪問,發現還是提示404,其實,這是因為ngixn默認配置是在public目錄下的。在project-z文件夾裡面新建一個public目錄,然後再在裡面放入index.php發現就能訪問到了。 ## 8. 完成 到這裡其實已經完成了,因為已經能訪問到項目了,以後再次啟動服務器的時候只需要運行docker-compose up -d nginx mysql就能直接啟動服務了 ## 9. 安裝laravel項目 1. 首先進入到項目容器裡面 docker-compose exec --user=laradock workspace bash 執行完這條命令後,會發現你的用戶已經變更了,說明你已經進入到容器裡面了 2. 安裝laravel項目 composer create-project laravel/laravel coolapp (PS:為什麼要在容器里安裝,而不直接在本地直接安裝呢?這個我琢磨著應該是權限的問題,因為linxu和mac會有用戶權限和文件夾權限這一說法) 3. 按照安裝laravel的要求,給一些目錄設置寫權限 ## 8. 更改項目為laravel目錄 1. 輸入exit,退出容器 2. 輸入docker-compose stop關閉所有容器。 3. 然後更改.env文件。由原來的../project-z/目錄改為../project-z/coolapp/。 (PS:注意,這裡默認就是進入的publi目錄,所以不需要額外的在指定public目錄了) 4. 啟動服務docker-compose up -d nginx mysql 5. 在瀏覽器地址欄上輸入http://localhost/,查看效果 ## 9. 更改laravel的數據庫連接 進入laravel項目目錄下,更改coolapp目錄裡的.env的laravel配置文件為DB_HOST=mysql 那麼問題來了,mysql的用戶名密碼以及數據庫的名字是什麼?這個可以查看laradock目錄下的.env配置文件,然後在文件裡搜索mysql關鍵字,你就會看到mysql的一些配置,數據庫,密碼,用戶名等等。 ## 其它問題 1. 下載鏡像的時候有的提示需要key之類的,意思是你需要登錄你的docker,去到Docker官網上註冊個號,然後在你本機的Docker服務上登錄上你的號就可以了。 2. 以上步驟是單項目下的服務器配置。即,只針對一個域名下的配置,多域名的請參考Laradock官方文檔的多項目配置。 3. 啟動服務正常,訪問一直是’404 Not Found’,進入nginx容器裡,查看nginx配置,發現裡面多了一個public目錄,所以需要在指定的項目目錄下在新建一個public目錄。 4. 執行docker-compose up -d nginx mysql,會提示經常提示服務器錯誤,因為即便更換了Docker源,但是因為不穩定,所以還是經常下載失敗。多執行幾次這條命令 5. 生成鏡像的時候,有可能生成鏡像的時候失敗過,然後再次執行docker-compose up -d nginx mysql無法構建當前鏡像。查看鏡像發現有生成為none的鏡像,刪除掉即可 6. 鏡像有時候刪除不掉,是因為還有依賴它生成的容器沒有關閉,所以先停止所有容器,然後在刪除鏡像。 ## 注意事項 1. 各個端口一定不能被佔用,不然服務會啟動失敗 2. 切換Docker源,不然下載鏡像的時候會非常慢 3. 項目默認位置是在你設置目錄的public目錄下面的 4. 服務器的配置都能在.env裡找到,如果找不到,進入你的服務器容器裡,然後直接查看配置 5. 其它容器組合直接可以看laradock目錄下有啥文件夾,就有啥服務。 6. docker默認是掛載的方式(即類似於共享目錄的方式),把你本地的目錄掛載到容器裡的,所以docker裡有配置掛載目錄的選項,如果找不到目錄,可以到docker服務器裡查看有沒有把項目的目錄掛載上去。 ## 基本docker命令 關閉所有容器(停止所有服務) docker-compose stop 刪除所有容器 docker-compose down 刪除所有鏡像 docker rmi $(docker images -q) 後台啟動容器(以後台的方式啟動服務) docker-compose up -d {容器名稱} 查看所有容器 docker ps 查看所有鏡像 docer images 查看容器IP > 需要先使用命令docker ps查看出容器的IP docker inspect [容器ID] 遠程連接mysql並執行mysql命令行 > mysql的用戶名和密碼可以在.env裡找 docker-compose exec mysql mysql -u [用户名] -p[密码] 遠程連接redis並進入redis命令行模式 > 這條命令是默認端口為6379,如果你更改了端口請在後面加上 -p [端口号] docker-compose exec redis redis-cli -h redis 原文鏈接:[Denniss blog](http://ukagaka.github.io/php/2017/08/05/LaraDock.html)