新手也能用docker搭建PHP環(huán)境

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

  1. 首先注冊(cè)DaoCloud號(hào)昔善,只有注冊(cè)以后,才能用它的加速服務(wù)畔乙,免費(fèi)的耀鸦。所以我們要感謝DaoCloud的免費(fèi)。
  2. 訪問(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鏡像配置文件

  1. 進(jìn)入剛剛git下來(lái)的laradock目錄
  2. 拷貝配置文件净宵,并命名為.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)目

  1. 首先進(jìn)入到項(xiàng)目容器里面
docker-compose exec --user=laradock workspace bash

執(zhí)行完這條命令后,會(huì)發(fā)現(xiàn)你的用戶已經(jīng)變更了,說(shuō)明你已經(jīng)進(jìn)入到容器里面了

  1. 安裝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ō)法)

  1. 按照安裝laravel的要求啤斗,給一些目錄設(shè)置寫權(quán)限

8. 更改項(xiàng)目為laravel目錄

  1. 輸入exit表箭,退出容器
  2. 輸入docker-compose stop關(guān)閉所有容器。
  3. 然后更改.env文件钮莲。由原來(lái)的../project-z/目錄改為../project-z/coolapp/免钻。(PS:注意,這里默認(rèn)就是進(jìn)入的publi目錄崔拥,所以不需要額外的在指定public目錄了)
  4. 啟動(dòng)服務(wù)docker-compose up -d nginx mysql
  5. 在瀏覽器地址欄上輸入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)題

  1. 下載鏡像的時(shí)候有的提示需要key之類的,意思是你需要登錄你的docker步鉴,去到Docker官網(wǎng)上注冊(cè)個(gè)號(hào),然后在你本機(jī)的Docker服務(wù)上登錄上你的號(hào)就可以了璃哟。
  2. 以上步驟是單項(xiàng)目下的服務(wù)器配置氛琢。即,只針對(duì)一個(gè)域名下的配置随闪,多域名的請(qǐng)參考Laradock官方文檔的多項(xiàng)目配置阳似。
  3. 啟動(dòng)服務(wù)正常,訪問(wèn)一直是'404 Not Found',進(jìn)入nginx容器里铐伴,查看nginx配置撮奏,發(fā)現(xiàn)里面多了一個(gè)public目錄,所以需要在指定的項(xiàng)目目錄下在新建一個(gè)public目錄当宴。
  4. 執(zhí)行docker-compose up -d nginx mysql,會(huì)提示經(jīng)常提示服務(wù)器錯(cuò)誤畜吊,因?yàn)榧幢愀鼡Q了Docker源,但是因?yàn)椴环€(wěn)定户矢,所以還是經(jīng)常下載失敗玲献。多執(zhí)行幾次這條命令
  5. 生成鏡像的時(shí)候,有可能生成鏡像的時(shí)候失敗過(guò),然后再次執(zhí)行docker-compose up -d nginx mysql無(wú)法構(gòu)建當(dāng)前鏡像捌年。查看鏡像發(fā)現(xiàn)有生成為none的鏡像瓢娜,刪除掉即可
  6. 鏡像有時(shí)候刪除不掉,是因?yàn)檫€有依賴它生成的容器沒(méi)有關(guān)閉礼预,所以先停止所有容器眠砾,然后在刪除鏡像。

注意事項(xiàng)

  1. 各個(gè)端口一定不能被占用托酸,不然服務(wù)會(huì)啟動(dòng)失敗
  2. 切換Docker源褒颈,不然下載鏡像的時(shí)候會(huì)非常慢
  3. 項(xiàng)目默認(rèn)位置是在你設(shè)置目錄的public目錄下面的
  4. 服務(wù)器的配置都能在.env里找到,如果找不到获高,進(jìn)入你的服務(wù)器容器里哈肖,然后直接查看配置
  5. 其它容器組合直接可以看laradock目錄下有啥文件夾,就有啥服務(wù)念秧。
  6. docker默認(rèn)是掛載的方式(即類似于共享目錄的方式)淤井,把你本地的目錄掛載到容器里的,所以docker里有配置掛載目錄的選項(xiàng)摊趾,如果找不到目錄币狠,可以到docker服務(wù)器里查看有沒(méi)有把項(xiàng)目的目錄掛載上去。

基本docker命令

  1. 關(guān)閉所有容器(停止所有服務(wù))
docker-compose stop
  1. 刪除所有容器
docker-compose down
  1. 刪除所有鏡像
docker rmi $(docker images -q)
  1. 后臺(tái)啟動(dòng)容器(以后臺(tái)的方式啟動(dòng)服務(wù))
docker-compose up -d {容器名稱}
  1. 查看所有容器
docker ps
  1. 查看所有鏡像
docer images

原文鏈接:Dennis`s blog
參考鏈接:
基于 LaraDock 在 Docker 中快速構(gòu)建 Laravel 應(yīng)用系列教程 —— 搭建開(kāi)發(fā)環(huán)境
laradock文檔
開(kāi)始使用Docker for Mac

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末砾层,一起剝皮案震驚了整個(gè)濱河市漩绵,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌肛炮,老刑警劉巖止吐,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異侨糟,居然都是意外死亡碍扔,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門秕重,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)不同,“玉大人,你說(shuō)我怎么就攤上這事溶耘《眨” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵凳兵,是天一觀的道長(zhǎng)百新。 經(jīng)常有香客問(wèn)我,道長(zhǎng)庐扫,這世上最難降的妖魔是什么吟孙? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任澜倦,我火速辦了婚禮,結(jié)果婚禮上杰妓,老公的妹妹穿的比我還像新娘藻治。我一直安慰自己,他們只是感情好巷挥,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布桩卵。 她就那樣靜靜地躺著,像睡著了一般倍宾。 火紅的嫁衣襯著肌膚如雪雏节。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,144評(píng)論 1 285
  • 那天高职,我揣著相機(jī)與錄音钩乍,去河邊找鬼。 笑死怔锌,一個(gè)胖子當(dāng)著我的面吹牛寥粹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播埃元,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼涝涤,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了岛杀?” 一聲冷哼從身側(cè)響起阔拳,我...
    開(kāi)封第一講書(shū)人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎类嗤,沒(méi)想到半個(gè)月后糊肠,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡遗锣,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年货裹,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片黄伊。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖派殷,靈堂內(nèi)的尸體忽然破棺而出还最,到底是詐尸還是另有隱情,我是刑警寧澤毡惜,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布拓轻,位于F島的核電站,受9級(jí)特大地震影響经伙,放射性物質(zhì)發(fā)生泄漏扶叉。R本人自食惡果不足惜勿锅,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望枣氧。 院中可真熱鬧溢十,春花似錦、人聲如沸达吞。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)酪劫。三九已至吞鸭,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間覆糟,已是汗流浹背刻剥。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留滩字,地道東北人造虏。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像踢械,于是被迫代替她去往敵國(guó)和親酗电。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理内列,服務(wù)發(fā)現(xiàn)撵术,斷路器,智...
    卡卡羅2017閱讀 134,601評(píng)論 18 139
  • Docker — 云時(shí)代的程序分發(fā)方式 要說(shuō)最近一年云計(jì)算業(yè)界有什么大事件话瞧?Google Compute Engi...
    ahohoho閱讀 15,508評(píng)論 15 147
  • 0. 前言 docker是什么嫩与?docker是用GO語(yǔ)言開(kāi)發(fā)的應(yīng)用容器引擎,基于容器化交排,沙箱機(jī)制的應(yīng)用部署技術(shù)划滋。可...
    sessionboy閱讀 3,840評(píng)論 2 49
  • 轉(zhuǎn)載自 http://blog.opskumu.com/docker.html 一埃篓、Docker 簡(jiǎn)介 Docke...
    極客圈閱讀 10,473評(píng)論 0 120
  • 概念 HTML 表單用于搜集不同類型的用戶輸入处坪。 HTML 表單元素 ** 元素**最重要的表單元素是 元...
    Chy18閱讀 191評(píng)論 0 0