最近接觸了一下docker和措,容器這個(gè)概念一直有聽到過应又,但不知道具體是做什么的问畅,于是就花了點(diǎn)時(shí)間看了一下,發(fā)現(xiàn)這東西還是很實(shí)用的爆存。
可以把docker比喻成是windows的系統(tǒng)ghost蛉顽,只要有了docker,我們可以在liunx系統(tǒng)(目前docker只支持linux)中搭建好項(xiàng)目的開發(fā)環(huán)境先较,然后上傳到類似github的docker hub 上携冤,這樣就可以在生產(chǎn)環(huán)境中直接復(fù)制開發(fā)環(huán)境的鏡像,省去了復(fù)雜的系統(tǒng)環(huán)境配置過程闲勺。這個(gè)相信大家一定都深有體會(huì)曾棕,項(xiàng)目上線前常常為了搭建系統(tǒng)環(huán)境出現(xiàn)各種各樣的錯(cuò)誤而花費(fèi)大量的時(shí)間。
那怎么樣使用docker菜循,我使用了一下之后發(fā)現(xiàn)使用docker是相當(dāng)簡單的翘地,如果你用過github,那么發(fā)現(xiàn)很多操作都是類似的癌幕。
那我們就具體來看一下docker是怎么使用的
首先我們先要在物理機(jī)上或者云服務(wù)器上安裝docker衙耕,通過指令
apt-get install docker
裝完之后可以通過 docker -v
查看docker的版本
然后我們可以新建鏡像或者從docker hub上拉取官方鏡像或者別人自制的鏡像,這就和github中pull一個(gè)項(xiàng)目的操作一樣勺远,這里我們來拉取一個(gè)nodejs的鏡像
拉取鏡像通過docker pull
指令
我這里因?yàn)樵瓉硪呀?jīng)拉取過了橙喘,所以顯示鏡像已存在,默認(rèn)沒加版本的時(shí)候胶逢,會(huì)自動(dòng)拉取latest版本的鏡像厅瞎。
接著,我們可以通過docker images
指令來查看本地系統(tǒng)里已經(jīng)拉取過的鏡像列表
REPOSITORY - 鏡像名稱
TAG - 鏡像版本號(hào)
IMAGE ID - 鏡像的ID 唯一標(biāo)識(shí)一個(gè)鏡像文件
CREATED - 鏡像創(chuàng)建時(shí)間
VIRTUAL SIZE - 鏡像文件的大小
這里可以看到我的本地有5個(gè)鏡像文件初坠,這時(shí)我們就可以通過docker run
指令來運(yùn)行我們需要的docker環(huán)境和簸,我們這里先跑一個(gè)node的鏡像看看
docker的鏡像運(yùn)行有兩種模式,一種是交互式容器某筐,一種是守護(hù)式容器比搭,用過nodejs的forever模塊的話應(yīng)該就會(huì)比較好理解冠跷,交互式就是帶有交互指令界面的南誊,就像我們直接運(yùn)行node app.js
,而守護(hù)式的容器則就像forever蜜托,執(zhí)行完之后服務(wù)是在后臺(tái)執(zhí)行的抄囚。
我們先來執(zhí)行一下交互式的容器,通過docker run -it 鏡像名 /bin/bash
來執(zhí)行橄务。
這里就可以看到幔托,我開啟了一個(gè)node的容器,當(dāng)我在容器里執(zhí)行指令
node -v
的時(shí)候,我們就能看到node的版本重挑,這就說明我們現(xiàn)在已經(jīng)在node的容器環(huán)境里了嗓化。我們可以通過
Ctrl+D
指令來退出當(dāng)前容器接下來我們來開啟一個(gè)守護(hù)式容器,通過
docker run -d 鏡像名
來執(zhí)行谬哀。這里我們看到因?yàn)闆]有指定redis的版本號(hào)刺覆,所以docker會(huì)默認(rèn)去找本地latest版本的鏡像,如果本地沒有史煎,就會(huì)自動(dòng)從docker hub上拉取谦屑。當(dāng)我們指定了版本號(hào)為2.8.19的redis鏡像之后,因?yàn)楸镜匚抑耙呀?jīng)拉取過該鏡像篇梭,所以會(huì)返回一長串字符串氢橙,這時(shí)就說明該容器已經(jīng)在后臺(tái)跑起來了,我們可以通過
docker ps
指令來查看我們在運(yùn)行的容器恬偷。這里可以看到redis鏡像已經(jīng)在后臺(tái)運(yùn)行了,CONTAINER ID是容器對(duì)應(yīng)的ID悍手,之后對(duì)容器的一些操作可以通過容器ID來執(zhí)行。
比如我們想查看鏡像的具體信息袍患,可以通過
docker inspect 容器ID
來查看谓苟,會(huì)返回一個(gè)json格式的信息我們也可以通過
docker stop
指令來停止一個(gè)容器,通過docker rm
指令來刪除一個(gè)容器协怒,docker logs
指令來顯示容器里的標(biāo)準(zhǔn)輸出內(nèi)容涝焙。
那當(dāng)我們修改了容器里的內(nèi)容之后,如果我們希望將我們的最新的容器可以給別人共享使用孕暇,那么我們可以將容器提交到docker hub上仑撞。
首先我們需要執(zhí)行docker commit
指令來提交容器,然后通過docker push
指令將本地提交的容器推送到docker hub上妖滔,這個(gè)過程和github的提交過程是一致的隧哮。
docker commit
有兩個(gè)參數(shù) -m 版本信息 -a 指定作者
提交成功了之后我們就可以通過
docker push
指令來把我們的容器提交到docker hub上這樣就提交成功了,我們可以登錄docker hub看一下座舍,就能看到我剛剛提交的容器鏡像已經(jīng)成功了沮翔,這樣別人就可以在docker hub上共享我們的容器了。
當(dāng)然我們也可以通過
docker bulid
指令來創(chuàng)建一個(gè)空的鏡像曲秉,在這里我就不多介紹了采蚀,包括docker hub還可以和github做關(guān)聯(lián)最后給大家提供一點(diǎn)docker比較不錯(cuò)的學(xué)習(xí)資料鏈接
Docker 中文指南
http://www.widuu.com/chinese_docker/index.html
Docker Hub
https://hub.docker.com/
GhostCloud - 圖形化Docker管理工具
https://www.ghostcloud.cn/