摘要:在前一篇文章學(xué)習(xí)與和應(yīng)用一初步認(rèn)識中,我們初步介紹了解決了什么問題,容器化技術(shù)與傳統(tǒng)的虛擬化方式的區(qū)別,以及簡要介紹了的幾大核心概念鏡像容器和倉庫。針對上述問題,提供了的,通過使用指令配置的方式來創(chuàng)建鏡像。
在前一篇文章 Docker學(xué)習(xí)與和應(yīng)用(一)_初步認(rèn)識中,我們初步介紹了Docker解決了什么問題,Docker容器化技術(shù)與傳統(tǒng)的虛擬化方式的區(qū)別,以及簡要介紹了Docker的幾大核心概念:鏡像、容器和倉庫。本文主要介紹Docker的使用,包括:
使用Docker管理鏡像、容器和倉庫
使用Dockerfile創(chuàng)建自定義鏡像
容器的數(shù)據(jù)管理
Docker的安裝和基礎(chǔ)命令Docker是建立在Linux內(nèi)核基礎(chǔ)上的,在目前的主流Linux系統(tǒng)中,都已經(jīng)原生支持了Docker且使用體驗也最好,當(dāng)然,在Windows平臺和MacOS系統(tǒng)中也支持Docker,只是需要使用類似Boot2Docker等虛擬化工具來提供Linux支持。關(guān)于在各種平臺上安裝Docker的方法參考官網(wǎng)的Docker Docs,這里不再贅述。
Docker提供了很多命令來管理鏡像、容器和倉庫。包括:
從Docker Hub倉庫中查找search、上傳push、下載pull鏡像。
查看本地已有鏡像、容器信息的images、inspect和ps命令。
刪除本地鏡像和容器的rmi和rm命令。
基于已有容器創(chuàng)建鏡像的commit命令和基于Dockerfile創(chuàng)建鏡像build命令。
運(yùn)行、進(jìn)入容器的run、exec和attach命令。
鏡像的保存和導(dǎo)入命令save和load,容器的導(dǎo)出導(dǎo)入命令export和import
具體命令的使用方法使用命令docker --help查看所有命令列表,使用docker COMMAND --help查看具體命令的信息。下面是我用一張圖總結(jié)的Docker的基礎(chǔ)命令,供大家參考。
關(guān)于Docker的使用,可以跟著官網(wǎng)提供的示例運(yùn)行學(xué)習(xí) Hello world in a container,另外所有的命令可以查閱官網(wǎng)The Docker commands
使用Dockerfile創(chuàng)建鏡像創(chuàng)建自定義鏡像的方法有兩種:
從一個鏡像啟動容器后,對容器進(jìn)行操作更新,然后使用docker commit命令將對鏡像的操作提交。
使用Dockerfile的方式創(chuàng)建自定義的鏡像。
使用docker commit命令的方式構(gòu)建自定義鏡像(參考Creating our own images),簡單但是不夠方便,此外,由于創(chuàng)建鏡像的過程不夠透明,不利于將鏡像共享給他人使用、同時還不利于團(tuán)隊審閱鏡像的創(chuàng)建過程。
針對上述問題,docker提供了的Dockerfile,通過使用指令配置的方式來創(chuàng)建鏡像。Dockerfile是由一行行的命令指令組成,通過指令來闡述鏡像的創(chuàng)建過程。從這個角度來看,Dockerfile類似于Makefile等工具,用來自動化構(gòu)建鏡像。
Dockerfile大體由四部分組成:
指明基礎(chǔ)鏡像指令FROM
維護(hù)者信息指令MAINTAINER
鏡像操作指令RUN、EVN、ADD和WORKDIR等
容器啟動時的執(zhí)行指令CMD、ENTRYPOINT和USER等
這些指令的使用方法可以參考Docker Tutorial:使用 Dockerfile 實現(xiàn)自動化和官方Docker Doc:Dockerfile reference。使用Dockerfile創(chuàng)建自定義鏡像很簡單,但是要編寫一個高質(zhì)量的Dockerfile并不容易,除了查閱官方文檔以外,可以參考Docker Hub中社區(qū)提供的大量Dockerfile范例。
Docker容器的數(shù)據(jù)管理在使用Docker的過程中,必然會涉及到容器的數(shù)據(jù)管理操作,例如查看容器內(nèi)應(yīng)用生成或更新的數(shù)據(jù),容器內(nèi)數(shù)據(jù)的備份/恢復(fù),容器之間進(jìn)行數(shù)據(jù)共享等操作。Docker中數(shù)據(jù)管理等方式主要有兩種:
數(shù)據(jù)卷(Data volumes)
數(shù)據(jù)卷容器(Data volume containers)
數(shù)據(jù)卷和數(shù)據(jù)卷容器數(shù)據(jù)卷是一個供容器使用的特殊目錄,用來存放持久化或共享數(shù)據(jù)的地方,而數(shù)據(jù)卷容器其實就是一個普通容器,只是這個容器專門提供數(shù)據(jù)卷給其它容器掛載使用,因此,數(shù)據(jù)卷和數(shù)據(jù)卷容器之間有著密切的聯(lián)系,并不是兩個完全不相關(guān)的概念。
當(dāng)使用docker run或者docker create命令時,使用-v就可以在容器內(nèi)創(chuàng)建一個數(shù)據(jù)卷,默認(rèn)情況下,Docker Engine會在宿主機(jī)上的/var/lib/docker/volumes/目錄下創(chuàng)建一個特殊目錄,供容器掛載使用,而掛載了這個數(shù)據(jù)卷的容器便可以稱為數(shù)據(jù)卷容器。我們將這種方式,稱為在容器里創(chuàng)建一個數(shù)據(jù)卷,此外,我們還可以指定掛載一個宿主機(jī)的本地目錄到容器中作為數(shù)據(jù)卷。
如上圖所示,volume container1分別掛載了容器內(nèi)創(chuàng)建的數(shù)據(jù)卷/vol1以及指定掛載了一個宿主機(jī)中的本地目錄作為數(shù)據(jù)卷/vol2。而volume container2則只掛載了數(shù)據(jù)卷/vol2。通過這樣,當(dāng)我們修改Docker默認(rèn)數(shù)據(jù)目錄以及修改掛載的本地宿主機(jī)目錄時,數(shù)據(jù)卷容器中掛載的數(shù)據(jù)卷/vol1和數(shù)據(jù)卷vol2中的數(shù)據(jù)也都會進(jìn)行變更,反之亦然。
除了上述創(chuàng)建數(shù)據(jù)卷的方式外,我們還可以使用--volume-from的方式,指定數(shù)據(jù)卷容器,從而掛載其中的數(shù)據(jù)卷。還是上圖中,containerA和containerB在使用docker run創(chuàng)建容器時,通過--volume-from選項指定直接使用volume container2中的數(shù)據(jù)卷/vol2。
數(shù)據(jù)卷的特性通過前面所述,我們理解了什么是數(shù)據(jù)卷和數(shù)據(jù)卷容器,接下來,簡要總結(jié)數(shù)據(jù)卷的特性:
當(dāng)我們在創(chuàng)建容器時,數(shù)據(jù)卷就會自動初始化。
數(shù)據(jù)卷可以在容器之間共享和復(fù)用。
對數(shù)據(jù)卷的數(shù)據(jù)的更新,不會影響到鏡像。
對數(shù)據(jù)卷的修改會立刻生效。
數(shù)據(jù)卷中的數(shù)據(jù)會一直存在,直到刪除最后一個掛載該數(shù)據(jù)卷的容器被刪除時,還需要顯示指定刪除關(guān)聯(lián)的數(shù)據(jù)卷。
通過Docker提供的數(shù)據(jù)卷和數(shù)據(jù)卷容器的特性和機(jī)制,我們可以對容器內(nèi)的數(shù)據(jù)進(jìn)行共享、備份和恢復(fù),增加了容器的容災(zāi)能力。即使容器在運(yùn)行過程中發(fā)生故障也不用擔(dān)心,只需要快速重新創(chuàng)建容器,掛載數(shù)據(jù)卷即可。當(dāng)然,在實際生產(chǎn)環(huán)境中,還是需要配合支持諸如RAID、DRBD、以及ceph和HDFS等分布式存儲技術(shù)來的達(dá)到數(shù)據(jù)的安全性和高可用性。
參考&引用Docker Tutorial:必備的15條命令
Docker Tutorial:另外15條命令
Docker Doc:Best practices for writing Dockerfiles
Docker Doc:Data volumes & Data volume containers
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/26623.html
摘要:分別進(jìn)行配置和測試。也就是說對于開發(fā)和部署來說,使用可以更快速的交付和部署應(yīng)用環(huán)境。更便捷的應(yīng)用更新管理。使用鏡像創(chuàng)建并啟動一個容器。執(zhí)行用戶指定的應(yīng)用程序。執(zhí)行完畢后,容器被終止。 Docker是為應(yīng)用的開發(fā)和部署提供的一站式容器解決方案,它能幫助開發(fā)者高效快速的構(gòu)建應(yīng)用,實現(xiàn)Build,Ship and Run Any App, Anywhere,從而達(dá)到一次構(gòu)建,到處運(yùn)行的目的。...
摘要:和區(qū)別讓用戶可以進(jìn)入查看輸出等等操作,但是并不會另外啟動一個進(jìn)程如果你用來退出,同時這個信號會默認(rèn)情況會啟動另外一個進(jìn)程來進(jìn)入,這里的操作是在這個進(jìn)程下的。 走在通往docker的大道上——docker基礎(chǔ)知識匯總 最后編輯時間:2017年03月09日 1.Docker是什么 Docker是一種新的容器化技術(shù),為應(yīng)用開發(fā)和部署提供一站式容器解決方案,能幫助開發(fā)者高效快速的構(gòu)建應(yīng)用,實...
摘要:如果查到的不是版的內(nèi)核,可以用來升級然后更新啟動加載器來加載新內(nèi)核完成安裝后,重啟宿主機(jī)來啟用新的內(nèi)核重啟之后,可以用確認(rèn)是否運(yùn)行了新版本內(nèi)核。如果是較低版本的系統(tǒng),需要先更新內(nèi)核。然后重復(fù)上面的步驟即可。 本人的學(xué)習(xí)筆記,主要是對《我的第一本Docker書》、《Docker —— 從入門到實踐》的學(xué)習(xí)記錄,并結(jié)合其他各種資源的學(xué)習(xí)。這次記錄了4種常見系統(tǒng)的Docker安裝方法,這些系...
摘要:此刻的后手指依舊飛速地敲打鍵盤,絲毫沒有要停不下來意思。閱讀本期技術(shù)周刊,你不光能弄明白什么是,使用的意義何在,還將被傳授秘籍,以達(dá)的境界。周刊篩選的每篇內(nèi)容,是作者的獨到見解,踩坑總結(jié)和經(jīng)驗分享。 showImg(https://segmentfault.com/img/bVC5qJ?w=900&h=385); 啪嗒啪嗒,啪嗒啪嗒,聽到后排動感十足的清脆鍵盤響,我就能猜到公司程序員定...
閱讀 2447·2021-10-14 09:42
閱讀 1137·2021-09-22 15:09
閱讀 3545·2021-09-09 09:33
閱讀 3025·2021-09-07 09:59
閱讀 3638·2021-09-03 10:34
閱讀 3532·2021-07-26 22:01
閱讀 2822·2019-08-30 13:06
閱讀 1202·2019-08-30 10:48