一文詳解Docker輕量級(jí)虛擬化,鏡像和容器
什么是虛擬化技術(shù)?
對(duì)于一個(gè)服務(wù)器來(lái)說(shuō),大多數(shù)時(shí)候資源都是閑置狀態(tài),并沒(méi)有得到充分利用。所以,對(duì)于一些初創(chuàng)公司來(lái)說(shuō),還沒(méi)有穩(wěn)定業(yè)務(wù),就自建機(jī)房,配置大量服務(wù)器,還有高昂的運(yùn)維成本。
因此,現(xiàn)在大多數(shù)公司在初期都將業(yè)務(wù)放到云端,需要多少資源,就租用相應(yīng)規(guī)模的服務(wù)器。云服務(wù)提供商會(huì)將服務(wù)器劃分成多份,并且相互隔離,這就是虛擬化技術(shù)。
比如,剛畢業(yè)的學(xué)生,開(kāi)始工資不高,不僅無(wú)法買(mǎi)房,也租不起大的房子,很多選擇合租。房東將整個(gè)房子劃分成幾個(gè)單間,分別出租,這也類(lèi)似于虛擬化的原理。
什么是Docker?
Docker是一個(gè)開(kāi)源的容器引擎,它基于LXC容器技術(shù),使用Go語(yǔ)言開(kāi)發(fā)。
源代碼托管在Github上,并遵從Apache2.0協(xié)議。
Docker采用C/S架構(gòu),其可以輕松的為任何應(yīng)用創(chuàng)建一個(gè)輕量級(jí)的、可移植的、自給自足的容器。
簡(jiǎn)單來(lái)說(shuō):Docker就是一種快速解決生產(chǎn)問(wèn)題的一種技術(shù)手段。
Docker是容器的一種,而容器不僅僅是Docker。
早期的虛擬化比如VMWare虛擬機(jī),一個(gè)虛擬機(jī)可以同時(shí)運(yùn)行多個(gè)操作系統(tǒng)。但是,每個(gè)虛擬機(jī)都要虛擬化單獨(dú)的硬件資源,這樣,就會(huì)消耗更多的資源,主服務(wù)器可以虛擬化出的獨(dú)立空間就越小。
而容器技術(shù)最顯著的特點(diǎn)是所有容器都可以共有主服務(wù)器的硬件資源,這樣就使得容器更加輕量化,啟動(dòng)速度也更快。但是Docker只能支持Linux系統(tǒng),所有容器都共用一個(gè)Linux內(nèi)核。
容器:顧名思義,就是可以裝物品的東西。每個(gè)容器可以按照我們的需求裝物品,不同容器間相互隔離,攜帶方便。比如,一家人外出旅行,每個(gè)人都在自己的旅行包裝上自己需要的生活物品。
或者說(shuō)生活中很痛苦的事情就是電腦系統(tǒng)重裝,要重復(fù)配置各種軟件,但是只要提前制作一個(gè)系統(tǒng)盤(pán),把常用的軟件提前安裝好,重裝系統(tǒng)后自動(dòng)包括所有的軟件。
在云平臺(tái)上,容器裝載的物品就是不同應(yīng)用。比如,公司在A云平臺(tái)部署了自己的項(xiàng)目,現(xiàn)在發(fā)現(xiàn)B云平臺(tái)價(jià)格更加優(yōu)惠,性能也更好,直接將A云平臺(tái)容器打包切換到B云平臺(tái),而不需要重復(fù)配置環(huán)境,安裝軟件。
ubuntu安裝Docker
注冊(cè)Docker賬號(hào)
docker官網(wǎng):
doker加速器:在國(guó)內(nèi)使用docker的官方鏡像源,會(huì)因?yàn)榫W(wǎng)絡(luò)的原因,造成無(wú)法下載,或者一直處于超時(shí),所以我們使用 daocloud 的方法進(jìn)行加速配置。
查看國(guó)內(nèi)源:
Docker鏡像
Docker鏡像是一個(gè)只讀的文件,就類(lèi)似于我們安裝操作系統(tǒng)時(shí)候所需要的那個(gè)iso光盤(pán)鏡像,通過(guò)運(yùn)行這個(gè)鏡像來(lái)完成各種應(yīng)用的部署。
通過(guò) docker search ubuntu 查找鏡像:
如果獲取鏡像具體版本可以官網(wǎng)上搜索Ubuntu,點(diǎn)擊Tags,在后面搜索版本號(hào):
刪除鏡像:
鏡像資源改名操作:docker tag ubuntu:20.04 myubuntu:1.0
該操作會(huì)保留原有鏡像,不需要可以自行刪除。
壓縮鏡像,以后用到直接解壓:docker save -o ubuntu.tar ubuntu
導(dǎo)入ubuntu.tar壓縮包:docker load -i ubuntu.tar
查看指定鏡像歷史:docker image history ubuntu:20.04
容器命令
利用ubuntu20.04鏡像創(chuàng)建一個(gè)名為myrq的容器,并進(jìn)入容器,執(zhí)行/bin/bash:
exit退出容器:
利用鏡像ubuntu:20.04創(chuàng)建一個(gè)容器:docker create -it ubuntu:20.04
啟動(dòng)容器:docker start 容器
停止容器:docker stop 容器
重啟容器:docker restart 容器
列出本地所有容器:docker ps -a
創(chuàng)建并啟動(dòng)一個(gè)容器:docker run -itd ubuntu:20.04
進(jìn)入容器:docker attach 容器
掛起容器:先按Ctrl-p,再按Ctrl-q
在容器中執(zhí)行命令:docker exec 容器 命令
刪除容器(先關(guān)閉容器):docker rm 容器
將容器CONTAINER導(dǎo)出到本地文件xxx.tar中:docker export -o xxx.tar 容器
將本地文件xxx.tar導(dǎo)入成鏡像,并將鏡像命名為image_name:tag:docker import xxx.tar image_name:tag
通過(guò)容器生成的鏡像創(chuàng)建容器:run -it --name myrq4 ubuntu:1.0 /bin/bash
查看所有容器的統(tǒng)計(jì)信息,包括CPU、內(nèi)存、存儲(chǔ)、網(wǎng)絡(luò)等信息:docker stats
在本地和容器間復(fù)制文件:docker cp xxx CONTAINER:xxx 或 docker cp CONTAINER:xxx xxx
重命名容器:docker rename CONTAINER1 CONTAINER2
刪除所有已停止容器:docker container prune
批量刪除所有容器,先用命令列出所有容器id并賦值給變量a:
強(qiáng)制刪除所有容器: