小編作為一個小白,在搭建lamp這個集成開發(fā)環(huán)境上卡了有4/5天,遇到了不少坑,有時候令人絕望,有時候又讓人興奮。作為小白,學(xué)得不深,在這里把這段時間踩過的坑以及學(xué)習(xí)經(jīng)驗跟大家分享,希望對大家的學(xué)習(xí)幫助。

什么?不知道docker!emmm.....在這里我先不介紹了,以后有機(jī)會我還整理下學(xué)習(xí)資料給大家哈,今晚的文章是一篇實操教程。
下載docker
你可以在官網(wǎng)上下載或者其他大牛整理的下載鏈接都可以,往后我也會寫一篇入門級的文章來介紹下載docker的?!?a target="_blank">https://www.docker.com/】

下載LAMP鏡像
docker pull tutum/lamp(需要等待一段時間),但如果你是國外服務(wù)器,你的下載速度將會是國內(nèi)的十幾倍。
啟動 lamp 容器
docker run -d -p 8080:80 -p 3306:3306 tutum/lamp
docker ps記住容器id(例:123)
訪問:

啟動這個容器的目的是為了測試鏡像安裝是否成功。
部署自己的php應(yīng)用
mkdir php
cd php/
touch Dockerfile
vim Dockerfile
Dockerfile內(nèi)容為:
FROM tutum/lamp:latest
RUN rm -fr /app && git clone https://github.com/xxxxxxxx.git /app
#這里替換 https://github.com/xxxxxxxxx.git 地址為你自己的項目地址
EXPOSE 80 3306
CMD ["/run.sh"]
docker build -t dockerpool/my-lamp-app .
啟動容器
docker stop (容器id:123)
docker rm (容器id:123)
docker run -d -p 80:80 -p 3306:3306 dockerpool/my-lamp-app
測試訪問
curl http://localhost
這一步是為了看下你的項目是否成功clone下來
當(dāng)你進(jìn)行到這里的時候,你就要開始在容器上的mysql上創(chuàng)建數(shù)據(jù)庫還有配置與你項目相關(guān)的apache2.conf文件。這時候你或許會疑惑,容器是‘虛擬化’的,我看不到文件目錄,改怎么進(jìn)行mysql和apache2的配置呢?沒錯,容器你無法在本地像訪問服務(wù)器一樣,你在服務(wù)器上是看到的“虛擬化”的。這里推薦一個工具NSENTER,它可以進(jìn)入容器,進(jìn)去后給你的感覺就好像你在服務(wù)器上又打開另一個‘服務(wù)器’。當(dāng)然也有其他的工具,也可以達(dá)到同樣的效果。
下載nsenter
你要把nsenter安裝到你的主機(jī)(服務(wù)器)上,安裝命令如下:
$ wget https://www.kernel.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24.tar.gz
$ tar -xzvf util-linux-2.24.tar.gz
$ cd util-linux-2.24/
$ ./configure --without-ncurses
$ make nsenter
$ sudo cp nsenter /usr/local/bin
nsenter可以訪問另一個進(jìn)程的名稱空間。所以為了連接到某個容器我們還需要獲取該容器的第一個進(jìn)程的PID??梢允褂胐ocker inspect命令來拿到該PID。
docker inspect 10d555333(CONTAINER ID 容器ID)

找到State.Pid(例如:30584),然后執(zhí)行下面命令:
nsenter --target 26269--mount --uts --ipc --net --pid

然后,你就可以進(jìn)入容器啦!
PS:參考
https://blog.csdn.net/u010397369/article/details/41045251
將本地數(shù)據(jù)庫同步到容器上
容器上mysql默認(rèn)的登錄用戶為root,密碼為空。
mysql -uroot
這時候你容器上的mysql只能容器內(nèi)訪問,也就是localhost,外網(wǎng)是無法訪問的。解決辦法如下:
[圖片上傳中...(image.png-347418-1522675699365-0)]
select host,user from mysql.user;
update mysql.user set host='%' where user='root' and host='localhost';
select host,user from mysql.user; (查看是否修改成功)

因為我已經(jīng)修改過了,所以顯示為“%”,沒修改過的為localhost
然后建議你把mysql的密碼也改了吧,訪問你連接數(shù)據(jù)庫的工具,無法訪問無密碼的數(shù)據(jù)庫。
操作如下:
SET PASSWORD FOR ['root'@'localhost'](mailto:'root'@'localhost') = PASSWORD('newpass');
接下來就是見證奇跡的時候了,你本地電腦,我用的工具的Navicat來連接mysql數(shù)據(jù)庫。

你按照要求輸入就好了,密碼就是你剛改的密碼,然后你就可以看到容器上數(shù)據(jù)庫啦。
PS:參考
https://blog.csdn.net/current_person/article/details/52682062
http://www.cnblogs.com/wangs/p/3346767.html
apache2的配置
這個是我采坑時間最長的,在我絕望的時候,多謝舍友小李和宇哥拉了我一把。
主要是我的項目的用thinkphp框架寫的,在url重寫上,apach2配置需要修改一部分內(nèi)容。

我理解的也不是很深刻,后續(xù)還得多學(xué)習(xí),我主要修改的地方有:
/etc/apache2/apache2.conf文件

/etc/apache2/sites-enabled/000-default.conf

藍(lán)框里的內(nèi)容去掉。
(我覺得我這部分說的不透徹,但這個操作是成功的,有興趣的同學(xué),可以去apache的官網(wǎng)上看配置文件)