雖然這篇叫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

原文鏈接:Dennis`s blog

您也可能喜歡這些文章