1. 程式人生 > >從開發到部署——docker淺體驗

從開發到部署——docker淺體驗

聽說docker很diao?我們來調戲一下它吧~

到底什麼是docker呢?

如果github做的是程式碼管理的工作,那麼docker做的就是環境管理的工作。

Docker是一種虛擬化技術,下面是docker和虛擬機器的的差別(右邊是docker)

 

對比虛擬機器與Docker

“Docker守護程序可以直接與主作業系統進行通訊,為各個Docker容器分配資源;它還可以將容器與主作業系統隔離,並將各個容器互相隔離。虛擬機器啟動需要數分鐘,而Docker容器可以在數毫秒內啟動。由於沒有臃腫的從作業系統,Docker可以節省大量的磁碟空間以及其他系統資源”(百度的)

好的好的,道理我都懂,但是他能幫我解決什麼問題呢?

使用前:每次拿到新的linux伺服器就是配置環境,安裝依賴,程式碼部署,就很煩!

使用後:不管什麼linux伺服器,sudo docker pull your-image搞定一切,一勞永逸!

哇那不就很棒棒啊?

接下來就是帶大家走一遍流程啦,教大家怎麼基於一個已有的lamp映象建立一個自己的映象並且釋出

前期準備:

1.作業系統:window 10

3.一個實驗專案(這邊用一個之前寫的辣雞mvc)https://github.com/kingkun233/KinPHP

4.一個ubuntu虛擬機器(用作伺服器)

開始之前要講三樣東西

1.映象

2.容器

3.倉庫

這三樣是我們在使用容器是最常接觸到的東東;

上面這張圖是三者之間的關係,看不懂不要緊,打個比方,用面向物件來理解的話,映象就是類,容器就是物件,倉庫就類似於github,這裡是dockerhub。這樣應該好理解很多吧!通過下面的實踐相信會加深你們的理解。

第一步:

在docker官網註冊帳號

 

第二步:

下載docker並且安裝

 

安裝成功後會有這兩個圖示

 

開啟下面那個出現下圖就說明安裝成功了

 

第三步:

拉取別人已經做好的lamp環境,這裡推薦tutum做的lamp映象

 

檢視你本地有哪些映象

 

第五步:根據映象建立容器

 

檢視正在執行的容器

 

第六步:在瀏覽器測試

在終端的開始的地方會有ip地址(這個針對window開發用的,ubuntu的話就直接回環測試)

 

如果出現如下介面說明容器正常執行啦~~

 

唉?怎麼把專案程式碼放到容器裡面啊?其實也很簡單

 

在建立容器的時候加上 -v /c/Users/Kingkun/project/KinPHP:/app/KinPHP,其中冒號前面的是本地地址,後者是容器裡面的地址,這樣就把原生代碼目錄和容器目錄掛載在一起了。(注意,在window下只能掛c盤不能掛d盤)

掛載之後我們來測試一下

 

唉?有個sql報錯?原來是容器裡的mysql剛剛新鮮出爐,還沒有密碼。

第七步:進入容器給mysql設定密碼

用exec命令就可以調出終端啦~

 

Tutum/lamp映象的linux用的是ubuntu14.04,但是已經把使用者預設設為root了,所以命令都不用加sudo了~

預設mysql的root賬戶的不用密碼登入的

進入mysql:

 

修改mysql的root密碼

 

這樣就修改好了

下面是我專案的資料庫連線設定

 

再來看看

 

提示沒有kinPHP資料庫,說明已經連線上了,只是現在的mysql so fresh,沒有資料庫,好我們就給他加一個

 

再看

 

successed

第八步:安裝phpmyadmin

常規的apt-get update走一下

apt-get install phpmyadmin

ln -s /usr/shared/phpmyadmin /var/www/html(軟連線去網站根目錄)

看一下

 

successed

第九步:釋出映象(包含phpmyadmin的映象)

先登入docker賬戶

 

根據容器構建映象

 

看到commit是不是想到什麼啊

沒錯,和github非常像

然後釋出到dockerhub倉庫

 

在dockerhub上面看看

 

successed

第10步:在服務端拉取自己的映象進行測試

這裡用虛擬機器做伺服器

 

檢視ip地址

 

Ubuntu上安裝docker也是很簡單,apt-get update&&apt-get install docker.io

首先拉取我們已經做好的映象

 

然後把github上的專案拉下來

 

根據映象建立容器並且和clone下來的專案目錄進行掛載

 

用本地瀏覽器測試

 

phpmyadmin也有了,這是在tutum/lamp沒有的,也就是說我們配置的環境上傳成功了

再來看看專案KinPHP是否能執行

 

黑人問號.jpg?發現我們mysql的root是沒有密碼的,可是我們剛剛不是在本地已經配置了嗎?百度到的答案如下

 

還是舉個面向物件的例子,文章上面說過,映象就像是一個類,你可以為這個類新增一屬性(例如phpmyadmin),但是這個屬性的值是不會新增到類裡面的!由於伺服器端的容器是一個“新的物件”,所以mysql現在是全新的,我們設定root密碼和新增資料庫的操作都沒掉了(個人理解,歡迎指正)。那有沒有解決的方法呢?問題總是能解決的。

方法一:再次設定密碼和新增資料庫;

方法二:如上面回答,與本地目錄進行掛載;

方法三:寫shell(這個的話感興趣的可以去看一下dockerfile,是除了commit之外另外一種非常靈活的構建映象的方法,這裡就不細說);

我用的是第一種方法,因為懶。。。

好的,當我再次配置好了mysql密碼和建立好資料庫之後再看看

 

這樣我們就走了一遍用docker從本地開發到遠端部署的過程了

思考:我們是不是真的需要docker?

Docker真的能提高我們的工作效率嗎?我覺得要看情況,如果是一個小專案的話,用docker的必要並不大,畢竟學習成本就放在這裡;不過如果是大型專案(以後會不斷擴充套件功能和強調效能),docker就很棒棒了。至於更加深入的東西就要你們自己探索啦,畢竟我看了兩三天而已,溜了溜了