雖然這篇叫Docker環(huán)境搭建筹吐,但是是用了一個(gè)別人寫好的配置文件痘儡,為什么要用別人寫好的呢刊咳?因?yàn)榈谝还?jié)省了我們學(xué)習(xí)的成本彪见,類似一鍵安裝環(huán)境的東西。二節(jié)省了我們的構(gòu)造docker和測(cè)試docker的時(shí)間娱挨。三也省略了我們?cè)谌戭~外的服務(wù)器配置余指。
這里我選用LaraDock,因?yàn)樗娜萜鞫啵粌H僅用來(lái)作web服務(wù)器酵镜。LaraDock官網(wǎng)
以下碉碉,所說(shuō)的文件夾和目錄是同一個(gè)意思,只不過(guò)不同的操作系統(tǒng)叫法不一樣而已淮韭。
1. 安裝前的準(zhǔn)備工作
- GIT
- Docker
這兩個(gè)各自的官網(wǎng)上都有垢粮,這就不多介紹了。安裝也比較方便靠粪,沒(méi)什么難點(diǎn)
2. Docker鏡像源更改
這里我們要更改下Docker源蜡吧,不然會(huì)一直提示連接不了服務(wù)器,即便連接上也會(huì)下載巨慢占键。
這里我選擇DaoCloud
- 首先注冊(cè)DaoCloud號(hào)昔善,只有注冊(cè)以后,才能用它的加速服務(wù)畔乙,免費(fèi)的耀鸦。所以我們要感謝DaoCloud的免費(fèi)。
- 訪問(wèn)網(wǎng)址http://www.daocloud.io/mirror#accelerator-doc啸澡,上面有根據(jù)系統(tǒng)如何更改鏡像源,不復(fù)雜氮帐,很簡(jiǎn)單就完成了(PS:這個(gè)網(wǎng)址必須在登錄的情況下才能訪問(wèn)到嗅虏,免費(fèi)的服務(wù),為了以后大家都用著舒心就支持下上沐,注冊(cè)下)
(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
這個(gè)錯(cuò)誤提示就是沒(méi)有連接上鏡像的服務(wù)器皮服,多試幾次就好了)
3. 安裝LaraDock
這里以新項(xiàng)目為例,如果是在已有的項(xiàng)目的情況下参咙,請(qǐng)參考LaraDock官方文檔
git clone https://github.com/Laradock/laradock.git
這里會(huì)下載一些docker配置文件龄广,git下來(lái)后有個(gè)laradock目錄,里面有很多容器蕴侧,到時(shí)候需要什么容器就加載什么容器就可以了择同,非常方便。
4. 修改docker鏡像配置文件
- 進(jìn)入剛剛git下來(lái)的laradock目錄
- 拷貝配置文件净宵,并命名為.env
cp env-example .env
5. 修改配置文件
修改剛剛復(fù)制的配置文件敲才,最上面有行Application的配置,是指你項(xiàng)目的位置所在择葡,這里指的是你的項(xiàng)目要放在哪個(gè)文件夾下紧武,把APPLICATION=../
改為APPLICATION=../project-z/
,當(dāng)然這個(gè)后期也是可以更改的
雖然我把項(xiàng)目放在了project-z目錄下敏储,其實(shí)nginx真正訪問(wèn)到的位置為 project-z/public/
### Application Path
# Point to your application code, will be available at `/var/www`.
APPLICATION=../project-z/
這個(gè)目錄的意思是project-z文件夾的父目錄阻星,是和project-z文件夾在同一級(jí)的project-z目錄
如果目錄不存在的話一般生成容器的時(shí)候會(huì)自動(dòng)創(chuàng)建,如果生成的時(shí)候沒(méi)創(chuàng)建或者生成容器的時(shí)候提示找不到目錄的話已添,就新建好這個(gè)文件夾妥箕,因?yàn)閘inxu里會(huì)有權(quán)限的問(wèn)題滥酥。
6. 生成容器并啟動(dòng)服務(wù)器
以后如果啟動(dòng)服務(wù)器的話,就執(zhí)行這條命令就行了矾踱。注意恨狈,第一次執(zhí)行這個(gè)命令會(huì)先從網(wǎng)上服務(wù)器里下載docker鏡像,然后在用鏡像生成容器呛讲,有了容器以后禾怠,下次啟動(dòng)就直接啟動(dòng)容器了。
第一次執(zhí)行因?yàn)橐螺d鏡像贝搁,隨便一個(gè)鏡像都很大吗氏,所以,如果不更改Docker源的話雷逆,基本上就無(wú)望了弦讽。好多人也都是在這步放棄的,即便你更改了Docker源有時(shí)候也會(huì)下載失敗膀哲,多執(zhí)行幾次這條命令就往产,直到執(zhí)行成功。
docker-compose up -d nginx mysql
(-d,表示后臺(tái)啟動(dòng)某宪。workspace 和 php-fpm 將運(yùn)行在大部分實(shí)例中, 所以不需要在 up 命令中加上它們仿村。)
安裝完成,并且啟動(dòng)以后的效果兴喂,應(yīng)該類似這樣的
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
會(huì)發(fā)現(xiàn)啟動(dòng)的時(shí)候有些顯示的是done的蔼囊,這些不用管,我琢磨著應(yīng)該是重復(fù)啟動(dòng)相同的容器衣迷,然后端口被占用所造成的失敗畏鼓。
7. 查看啟動(dòng)效果
在本地的瀏覽器上輸入http://localhost/
,會(huì)發(fā)現(xiàn)提示404,這是因?yàn)槲覀冸m然創(chuàng)建了project-z壶谒,但是并沒(méi)有在里面新建文件云矫,在里面放入一個(gè)新建的index.php文件。
放入index.php文件后重新訪問(wèn)汗菜,發(fā)現(xiàn)還是提示404泼差,其實(shí),這是因?yàn)閚gixn默認(rèn)配置是在public目錄下的呵俏。在project-z文件夾里面新建一個(gè)public目錄堆缘,然后再在里面放入index.php發(fā)現(xiàn)就能訪問(wèn)到了。
8. 完成
到這里其實(shí)已經(jīng)完成了普碎,因?yàn)橐呀?jīng)能訪問(wèn)到項(xiàng)目了吼肥,以后再次啟動(dòng)服務(wù)器的時(shí)候只需要運(yùn)行docker-compose up -d nginx mysql
就能直接啟動(dòng)服務(wù)了
9. 安裝laravel項(xiàng)目
- 首先進(jìn)入到項(xiàng)目容器里面
docker-compose exec --user=laradock workspace bash
執(zhí)行完這條命令后,會(huì)發(fā)現(xiàn)你的用戶已經(jīng)變更了,說(shuō)明你已經(jīng)進(jìn)入到容器里面了
- 安裝laravel項(xiàng)目
composer create-project laravel/laravel coolapp
(PS:為什么要在容器里安裝缀皱,而不直接在本地直接安裝呢斗这?這個(gè)我琢磨著應(yīng)該是權(quán)限的問(wèn)題,因?yàn)閘inxu和mac會(huì)有用戶權(quán)限和文件夾權(quán)限這一說(shuō)法)
- 按照安裝laravel的要求啤斗,給一些目錄設(shè)置寫權(quán)限
8. 更改項(xiàng)目為laravel目錄
- 輸入
exit
表箭,退出容器 - 輸入
docker-compose stop
關(guān)閉所有容器。 - 然后更改
.env
文件钮莲。由原來(lái)的../project-z/
目錄改為../project-z/coolapp/
免钻。(PS:注意,這里默認(rèn)就是進(jìn)入的publi目錄崔拥,所以不需要額外的在指定public目錄了) - 啟動(dòng)服務(wù)
docker-compose up -d nginx mysql
- 在瀏覽器地址欄上輸入
http://localhost/
极舔,查看效果
9. 更改laravel的數(shù)據(jù)庫(kù)連接
進(jìn)入laravel項(xiàng)目目錄下,更改coolapp目錄里的.env
的laravel配置文件為DB_HOST=mysql
那么問(wèn)題來(lái)了链瓦,mysql的用戶名密碼以及數(shù)據(jù)庫(kù)的名字是什么拆魏?這個(gè)可以查看laradock目錄下的
.env
配置文件,然后在文件里搜索mysql關(guān)鍵字慈俯,你就會(huì)看到mysql的一些配置渤刃,數(shù)據(jù)庫(kù),密碼贴膘,用戶名等等溪掀。
其它問(wèn)題
- 下載鏡像的時(shí)候有的提示需要key之類的,意思是你需要登錄你的docker步鉴,去到Docker官網(wǎng)上注冊(cè)個(gè)號(hào),然后在你本機(jī)的Docker服務(wù)上登錄上你的號(hào)就可以了璃哟。
- 以上步驟是單項(xiàng)目下的服務(wù)器配置氛琢。即,只針對(duì)一個(gè)域名下的配置随闪,多域名的請(qǐng)參考Laradock官方文檔的多項(xiàng)目配置阳似。
- 啟動(dòng)服務(wù)正常,訪問(wèn)一直是'404 Not Found',進(jìn)入nginx容器里铐伴,查看nginx配置撮奏,發(fā)現(xiàn)里面多了一個(gè)public目錄,所以需要在指定的項(xiàng)目目錄下在新建一個(gè)public目錄当宴。
- 執(zhí)行
docker-compose up -d nginx mysql
,會(huì)提示經(jīng)常提示服務(wù)器錯(cuò)誤畜吊,因?yàn)榧幢愀鼡Q了Docker源,但是因?yàn)椴环€(wěn)定户矢,所以還是經(jīng)常下載失敗玲献。多執(zhí)行幾次這條命令 - 生成鏡像的時(shí)候,有可能生成鏡像的時(shí)候失敗過(guò),然后再次執(zhí)行
docker-compose up -d nginx mysql
無(wú)法構(gòu)建當(dāng)前鏡像捌年。查看鏡像發(fā)現(xiàn)有生成為none的鏡像瓢娜,刪除掉即可 - 鏡像有時(shí)候刪除不掉,是因?yàn)檫€有依賴它生成的容器沒(méi)有關(guān)閉礼预,所以先停止所有容器眠砾,然后在刪除鏡像。
注意事項(xiàng)
- 各個(gè)端口一定不能被占用托酸,不然服務(wù)會(huì)啟動(dòng)失敗
- 切換Docker源褒颈,不然下載鏡像的時(shí)候會(huì)非常慢
- 項(xiàng)目默認(rèn)位置是在你設(shè)置目錄的public目錄下面的
- 服務(wù)器的配置都能在.env里找到,如果找不到获高,進(jìn)入你的服務(wù)器容器里哈肖,然后直接查看配置
- 其它容器組合直接可以看laradock目錄下有啥文件夾,就有啥服務(wù)念秧。
- docker默認(rèn)是掛載的方式(即類似于共享目錄的方式)淤井,把你本地的目錄掛載到容器里的,所以docker里有配置掛載目錄的選項(xiàng)摊趾,如果找不到目錄币狠,可以到docker服務(wù)器里查看有沒(méi)有把項(xiàng)目的目錄掛載上去。
基本docker命令
- 關(guān)閉所有容器(停止所有服務(wù))
docker-compose stop
- 刪除所有容器
docker-compose down
- 刪除所有鏡像
docker rmi $(docker images -q)
- 后臺(tái)啟動(dòng)容器(以后臺(tái)的方式啟動(dòng)服務(wù))
docker-compose up -d {容器名稱}
- 查看所有容器
docker ps
- 查看所有鏡像
docer images
原文鏈接:Dennis`s blog
參考鏈接:
基于 LaraDock 在 Docker 中快速構(gòu)建 Laravel 應(yīng)用系列教程 —— 搭建開(kāi)發(fā)環(huán)境
laradock文檔
開(kāi)始使用Docker for Mac