欧美三级国产三级日韩三级_亚洲熟妇丰满大屁股熟妇_欧美亚洲成人一区二区三区_国产精品久久久久久模特

實(shí)踐在windows下用docker進(jìn)行web開(kāi)發(fā) - 新聞資訊 - 云南小程序開(kāi)發(fā)|云南軟件開(kāi)發(fā)|云南網(wǎng)站建設(shè)-昆明葵宇信息科技有限公司

159-8711-8523

云南網(wǎng)建設(shè)/小程序開(kāi)發(fā)/軟件開(kāi)發(fā)

知識(shí)

不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價(jià)值,我們?cè)谧非笃湟曈X(jué)表現(xiàn)的同時(shí),更側(cè)重于功能的便捷,營(yíng)銷(xiāo)的便利,運(yùn)營(yíng)的高效,讓網(wǎng)站成為營(yíng)銷(xiāo)工具,讓軟件能切實(shí)提升企業(yè)內(nèi)部管理水平和效率。優(yōu)秀的程序?yàn)楹笃谏?jí)提供便捷的支持!

您當(dāng)前位置>首頁(yè) » 新聞資訊 » 網(wǎng)站建設(shè) >

實(shí)踐在windows下用docker進(jìn)行web開(kāi)發(fā)

發(fā)表時(shí)間:2015-5-20

發(fā)布人:葵宇科技

瀏覽次數(shù):58

關(guān)于如何在windows下安裝docker,詳見(jiàn)http://blog.csdn.net/ownfire/article/details/45847939

本文著重闡述如何將docker實(shí)用起來(lái)


大家在協(xié)同開(kāi)發(fā)過(guò)程中,通常會(huì)遇到各人開(kāi)發(fā)環(huán)境不同,導(dǎo)致本地部署開(kāi)發(fā)環(huán)境浪費(fèi)時(shí)間、擴(kuò)展庫(kù)有差異、甚至系統(tǒng)不同等問(wèn)題,docker就是為了解決這些問(wèn)題、快速開(kāi)發(fā)環(huán)境、讓開(kāi)發(fā)人員迅速進(jìn)入開(kāi)發(fā)狀態(tài)而生的


Docker是一個(gè)基于Go語(yǔ)言的開(kāi)源應(yīng)用容器引擎,可以自動(dòng)化地部署應(yīng)用到可移植的的容器中,這些容器獨(dú)立于硬件、語(yǔ)言、框架、打包系統(tǒng)。

一個(gè)標(biāo)準(zhǔn)的Docker容器包含一個(gè)軟件組件及其所有的依賴——二進(jìn)制文件,庫(kù),配置文件,腳本等等。

Docker擴(kuò)展了LXC(Linux Container),使用高層的API,提供輕量虛擬化解決方案來(lái)實(shí)現(xiàn)進(jìn)程間隔離。可以運(yùn)行在任何支持cgroups(control groups)跟AUFS的64位Linux內(nèi)核上。


LXC是docker的核心技術(shù),借助于namespace的隔離機(jī)制和cgroup限額功能,提供了一套統(tǒng)一的API和工具來(lái)建立和管理container。(類(lèi)Hypervisor)
Linux Namespace (ns)
Control Groups (cgroups)

LXC 旨在提供一個(gè)共享kernel的OS級(jí)虛擬化方法,在執(zhí)行時(shí)不用重復(fù)加載kernel, 且container的kernel與host共享,因此可以大大加快container的啟動(dòng)過(guò)程,并顯著減少內(nèi)存消耗。

在LXC的基礎(chǔ)上, Docker額外提供的Feature包括
1、標(biāo)準(zhǔn)統(tǒng)一的打包部署運(yùn)行方案
2、歷史版本控制
3、Image的重用
4、Image共享發(fā)布等。



下面是本文重點(diǎn),安裝好docker后如何快速進(jìn)入開(kāi)發(fā)狀態(tài),僅針對(duì)web開(kāi)發(fā):

開(kāi)始講述之前,要再次認(rèn)識(shí)到docker只是一個(gè)在虛擬機(jī)中運(yùn)行的系統(tǒng)底層,是連接上層宿主windows和下層開(kāi)發(fā)環(huán)境容器,container(即開(kāi)發(fā)環(huán)境容器)類(lèi)似于子系統(tǒng),是在docker虛擬機(jī)中像應(yīng)用程序一樣運(yùn)行的隔離環(huán)境,和宿主系統(tǒng)的一切交互都要通過(guò)處于中間層的docker,并且默認(rèn)都是關(guān)閉的,可以理解為好多個(gè)沙盒

web開(kāi)發(fā)涉及到web服務(wù)器和項(xiàng)目代碼和數(shù)據(jù)庫(kù),我們一項(xiàng)一項(xiàng)來(lái)解決

本文假定docker虛擬機(jī)啟動(dòng)后的綁定ip為192.168.59.103


1、web服務(wù)器


一、安裝nginx并設(shè)置端口映射

一開(kāi)始docker安裝好并且啟動(dòng)container后,container內(nèi)的服務(wù)端口(例如nginx啟動(dòng)后監(jiān)聽(tīng)的80端口)是不對(duì)外暴露的,在宿主windows下用瀏覽器訪問(wèn)docker虛擬機(jī)ip是訪問(wèn)不到container內(nèi)的80端口的

必須做端口映射操作,只要在container啟動(dòng)時(shí),docker run命令帶上端口映射參數(shù)就可以了:

docker run -it -p 22222:33333 fe65a2781dae /bin/bash

解釋:

-it參數(shù)在啟動(dòng)container為tty形式時(shí)必帶,否則無(wú)法做命令行交互

-p 22222:33333 關(guān)鍵參數(shù),指定docker虛擬機(jī)的22222端口,映射為container的33333端口,即對(duì)192.168.59.103:22222的訪問(wèn),統(tǒng)統(tǒng)訪問(wèn)到container的33333端口。如果要映射80端口,設(shè)置-p 80:80就好

fe65a2781dae 指定docker要運(yùn)行的imageid,也可以是REPOSITORY:TAG形式

/bin/bash docker啟動(dòng)container后要運(yùn)行的命令,一般啟動(dòng)命令行交互就用這個(gè)就好了


所以要把nginx調(diào)通,要做以下步驟:

1、docker run -it -p 80:80 fe65a2781dae /bin/bash

2、container內(nèi)運(yùn)行nginx

3、宿主windows瀏覽器訪問(wèn)192.168.59.103

4、Welcome to nginx!


二、配置nginx在容器啟動(dòng)時(shí)自動(dòng)啟動(dòng)

最簡(jiǎn)單的方法:

vi /etc/bashrc

添加一行類(lèi)似

/usr/sbin/nginx -c /etc/nginx/nginx.conf

保存并推出

docker commit 保存容器修改,下次再啟動(dòng)容器時(shí),自動(dòng)就把nginx啟動(dòng)起來(lái)了,要添加其他自啟動(dòng)程序同樣操作

docker commit 如何使用,不在本文范圍,請(qǐng)自行百度


其他還有通過(guò)Dockerfile的方法,還有一種通過(guò)linux進(jìn)程管理工具supervisor的方法,詳見(jiàn):

http://segmentfault.com/a/1190000000755980

上文關(guān)于supervisor的部分,轉(zhuǎn)載了另一篇文章,在此也直接把鏈接列出來(lái)方便查看:

http://air.googol.im/2014/03/28/supervisor-with-docker-to-manage-processes.html


2、項(xiàng)目代碼

docker只是一個(gè)開(kāi)發(fā)環(huán)境的容器,一般不用來(lái)做代碼持久化的容器,如果這樣做,很容易丟代碼,因?yàn)閐ocker并不主動(dòng)保存在container內(nèi)的修改除非你手動(dòng)操作

最好的解決辦法就是,有一個(gè)共享文件夾,從宿主windows共享至container內(nèi),作為項(xiàng)目代碼根目錄

過(guò)程大致如下:


一、建立virtualbox和docker虛擬機(jī)的共享

可以參考http://jingyan.baidu.com/article/2fb0ba40541a5900f2ec5f07.html

打開(kāi)virtualbox并且選擇到boot2docker-vm虛擬機(jī),右鍵點(diǎn)設(shè)置

  1. 點(diǎn)擊共享文件夾設(shè)置框,右上角的添加按鈕

    http://f.hiphotos.baidu.com/exp/w=480/sign=107cd686ad51f3dec3b2b86ca4eff0ec/241f95cad1c8a786447d54426509c93d70cf5022.jpg
  2. 選擇之前本機(jī)設(shè)置的共享文件夾,此時(shí)一定不可以勾選自動(dòng)掛載

    http://c.hiphotos.baidu.com/exp/w=480/sign=3badb02c4dc2d562f208d1e5d71090f3/18d8bc3eb13533fa001e8d62aad3fd1f40345bd5.jpg

  3. 設(shè)置好共享名后,進(jìn)入docker虛擬機(jī)系統(tǒng),打開(kāi)終端,先執(zhí)行命令,在掛載點(diǎn)目錄添加“bdshare”目錄,接著執(zhí)行"mount -t vboxsf BaiduShare /mnt/bdshare/",就能完成共享文件夾的設(shè)置。請(qǐng)記住mount命令一定要帶上參數(shù)-t vboxsf,BaiduShare就是共享文件夾名稱,/mnt/bdshare/就是要在docker虛擬機(jī)中掛載的絕對(duì)路徑

  4. docker虛擬機(jī)系統(tǒng)默認(rèn)使用docker用戶,可能會(huì)遇到Permission denied錯(cuò)誤,即權(quán)限不足,需要切換到root賬戶操作,只要輸入“sudo su”命令即可,無(wú)需密碼

二、docker容器掛載docker虛擬機(jī)的目錄

可以參考http://my.oschina.net/piorcn/blog/324202


docker可以支持把一個(gè)宿主機(jī)上的目錄掛載到鏡像里。

docker run -it -v /home/dock/Downloads:/usr/Downloads ubuntu64 /bin/bash

通過(guò)-v參數(shù),冒號(hào)前為宿主機(jī)目錄,必須為絕對(duì)路徑,冒號(hào)后為鏡像內(nèi)掛載的路徑。

現(xiàn)在鏡像內(nèi)就可以共享宿主機(jī)里的文件了。


此處要掛載上一步virtualbox和docker虛擬機(jī)共享的文件夾,就在docker啟動(dòng)container時(shí)加上參數(shù):

-v /mnt/bdshare/:/data

命令類(lèi)似:

docker run -it -p 80:80 -v /mnt/bdshare/:/bdshare fe65a2781dae /bin/bash


這樣就把宿主windows的K:\BaiduShare目錄,掛載到了container的/bdshare目錄



3、數(shù)據(jù)庫(kù)


同樣因?yàn)閐ocker只是一個(gè)容器,不具備主動(dòng)持久化的原因,所有會(huì)記錄狀態(tài)的數(shù)據(jù)(例如數(shù)據(jù)庫(kù))都無(wú)法被保存下來(lái)

解決的方法還是通過(guò)使用掛載的共享目錄,將所有需要持久化的數(shù)據(jù)保存目錄都放在共享目錄中即可,下次container啟動(dòng)的時(shí)候掛載上共享目錄,數(shù)據(jù)保持原樣


4、docker虛擬機(jī)和container的持久化

我們可能想對(duì)docker虛擬機(jī)本身做些配置,以便在虛擬機(jī)啟動(dòng)時(shí)自動(dòng)啟動(dòng)一些程序,比如自動(dòng)掛載共享目錄,正常的linux系統(tǒng)只要往/etc/fstab文件或者/etc/rc.local文件里寫(xiě)執(zhí)行語(yǔ)句,系統(tǒng)啟動(dòng)時(shí)就會(huì)自動(dòng)執(zhí)行

但是往docker虛擬機(jī)的自啟動(dòng)文件里寫(xiě)語(yǔ)句的話,下次啟動(dòng)就不見(jiàn)了,這是為什么呢,是因?yàn)?#xff1a;

docker虛擬機(jī)里面跑的是TinyCoreLinux,這個(gè)OS的rootfs是臨時(shí)性的(放在內(nèi)存的,實(shí)際上就是boot2docker.iso文件里面的一個(gè)rootfs),因此其根目錄/下的東西(包括/home)根本不會(huì)持久化,只有/mnt/sda1這個(gè)目錄下的才能持久化。如果你放在/home目錄下,只要VM一重啟,就會(huì)丟失的,/mnt/sda1則不會(huì),實(shí)際上就是那個(gè)~/.boot2docker-vm.vmdk文件掛載到了/mnt/sda1目錄下

docker里跑的container只是docker系統(tǒng)底層的上層隔離沙盒,container里持久化的一切內(nèi)容,最終都持久化到docker虛擬機(jī)里


這樣方法就清楚了,沒(méi)辦法針對(duì)docker虛擬機(jī)做自啟動(dòng)配置,但是可以寫(xiě)好自啟動(dòng)的sh腳本,放在/mnt/sda1這個(gè)目錄下,下次啟動(dòng)虛擬機(jī)時(shí),手動(dòng)切換到這個(gè)目錄下運(yùn)行sh腳本。目前沒(méi)有找到更好的方法, 如果有更好的方法,歡迎告訴我謝謝

而container的持久化,除了掛載宿主windows的共享目錄外,還有就是映射的目錄設(shè)置到虛擬機(jī)的/mnt/sda1目錄下,這兩種方法一個(gè)是持久化到宿主系統(tǒng)中,一個(gè)是持久化到虛擬機(jī)的虛擬磁盤(pán)中。兩種方法都可以,就看自己選擇了


舉例,我的/mnt/sda1/的sh腳本內(nèi)容是:

sudo mount -t vboxsf sync /mnt/sync/ #掛載宿主windows的共享目錄
docker run -it -p 80:80 -v /mnt/sync:/sync -v /mnt/sda1/data:/data centos:centos6 /bin/bash #映射共享目錄,和虛擬機(jī)磁盤(pán)

相關(guān)案例查看更多