簡介
在實(shí)際使用Docker的過程中,遇到一些問題劈猿,但是總沒有系統(tǒng)的博文可以詳細(xì)的介紹Docker,所以個(gè)人寫一個(gè)由淺入深的系統(tǒng)學(xué)習(xí)Docker過程。
這里首先介紹Docker的三大核心概念:鏡像(Image),容器(Container),倉庫(Repository)签钩,其實(shí)你理解了著三個(gè)核心概念,也就能順利的理解Dokcer的整個(gè)生命周期了坏快。
Docker 鏡像
????Docker鏡像(Image)類似于虛擬機(jī)鏡像铅檩,可以理解為一個(gè)面向Dokcer引擎的只讀模板,包含了文件系統(tǒng)莽鸿。
????比如:一個(gè)鏡像可以包含一個(gè)完整了Centos操作系統(tǒng)昧旨,可以把它稱為Centos鏡像。當(dāng)然祥得,鏡像也可以只安裝了Mysql應(yīng)用程序(或用戶需要的其他軟件)兔沃,就可以稱為Mysql鏡像。
????鏡像是創(chuàng)建Docker容器的基礎(chǔ)级及,它可以通過版本管理和增量的文件系統(tǒng)乒疏,如Docker Hub。
Docker 容器
????Docker容器(container)類似于輕量級的沙箱饮焦,Docker利用容器來運(yùn)行和隔離應(yīng)用怕吴。容器是從鏡像創(chuàng)建的應(yīng)用運(yùn)行實(shí)例,可以將其啟動(dòng)县踢、開始转绷、停止、刪除硼啤,但是所有的容器是相互隔離的议经,互不可見的,這就提供了一個(gè)實(shí)體機(jī)可以安裝多個(gè)容器丙曙,且很輕量級相對于虛擬機(jī)爸业。鏡像本身是只讀的,容器從鏡像啟動(dòng)的時(shí)候亏镰,Docker會在鏡像的最上層創(chuàng)建一個(gè)可寫層扯旷,鏡像本身保持不變。
Docker倉庫
????Docker倉庫(Repository)類似于代碼庫索抓,是Dokcer集中存放鏡像的場所钧忽。實(shí)際上毯炮,注冊服務(wù)器是存放倉庫的地方,其上往往存放著很多倉庫耸黑。每個(gè)倉庫集中存放某一類鏡像桃煎,往往包括多個(gè)鏡像文件,通過不同的標(biāo)簽(tag)來進(jìn)行區(qū)分大刊。
????根據(jù)存儲的鏡像公開分享與否为迈,Docker倉庫可以分為公開倉庫(Public)和私有倉庫(Private)兩種形式。目前缺菌,最大的公開倉庫是Docker Hub,存放 了數(shù)量龐大的鏡像供用戶下載葫辐,國內(nèi)的公開鏡像包括Docker Pool,可以提供穩(wěn)定的國內(nèi)訪問,與GitHub類似伴郁。
安裝Docker
????Docker支持主流的操作系統(tǒng)平臺使用耿战,包括Ubuntu、Centos焊傅、Window以及MacOS系統(tǒng)等剂陡。當(dāng)然,肯定在Linux系列平臺是原生支持的狐胎,體驗(yàn)最好鸭栖。Centos下具體的安裝請看上一篇博文# Centos搭建Docker環(huán)境,后續(xù)講述的Docker環(huán)境以Centos云主機(jī).。
獲取鏡像
????這里講述如何使用pull命令從Docker Hub倉庫下載鏡像到本地顽爹,如何查看本地已有的鏡像文件信息纤泵;已經(jīng)如何push本地鏡像到Docker Hub倉庫。注冊Docker Hub請?jiān)L問DockerHub镜粤。
????鏡像是Docker運(yùn)行容器的前提捏题,docker pull 命令從網(wǎng)絡(luò)上下載鏡像。格式為:
docker pull NAME[:TAG] //不指定TAG,默認(rèn)會選擇latest標(biāo)簽肉渴,即最新版本的鏡像
docker pull mysql:latest 等同于 docker pull mysql
[root@VM_149_72_centos ~]# docker pull mysql //下載
Using default tag: latest
Trying to pull repository docker.io/library/mysql ...
sha256:7cdb08f30a54d109ddded59525937592cb6852ff635a546626a8960d9ec34c30: Pulling from docker.io/library/mysql
f49cf87b52c1: Pull complete
78032de49d65: Pull complete
837546b20bc4: Pull complete
9b8316af6cc6: Pull complete
1056cf29b9f1: Pull complete
86f3913b029a: Pull complete
f98eea8321ca: Pull complete
3a8e3ebdeaf5: Extracting [==================================================>] 79.74 MB/79.74 MB
4be06ac1c51e: Download complete
920c7ffb7747: Download complete
在下載過程中可以看到公荧,鏡像文件一般有若干層組成,行首f49cf87b52c1這樣的字符串代表了各層的ID同规。層(Layer)其實(shí)是AUFS中重要的概念(代表一種聯(lián)合文件系統(tǒng))循狰,是實(shí)現(xiàn)增量保存和更新的重要基礎(chǔ)。
查看鏡像
[root@VM_149_72_centos etc]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/mysql latest f008d8ff927d 4 days ago 408.5 MB
docker.io/hello-world latest f2a91732366c 8 weeks ago 1.848 kB
以上信息的個(gè)字段意思:
- 來自于那個(gè)倉庫券勺,比如docker.io/mysql倉庫
- 鏡像的標(biāo)簽信息绪钥,比如latest
- 鏡像的ID號(唯一)
- 創(chuàng)建時(shí)間
- 鏡像大小
這里的鏡像的ID信息十分重要,它唯一標(biāo)識了鏡像关炼。
docker tag 命令為本地鏡像添加新的標(biāo)簽:如
docker tag docker.io/mysql mysql:1.0
如果細(xì)心的你會發(fā)現(xiàn)其實(shí)它們的ID事一樣的程腹,都是:f008d8ff927d,其實(shí)這里它們都指向同一個(gè)鏡像文件就儒拂,相當(dāng)起了一個(gè)別名寸潦,和window系統(tǒng)的快捷方式類似色鸳。
獲取鏡像的詳細(xì)信息docker inspect ID
docker inspect ID
搜索鏡像
使用docker search 命令可以遠(yuǎn)程搜索遠(yuǎn)程倉庫中共享的鏡像,默認(rèn)搜索Docker Hub官方的鏡像见转。
docker search imageName
//可以指定一下參數(shù)
-- automated=false 僅顯示自動(dòng)創(chuàng)建的鏡像
--no-trunc=false 輸出信息不截?cái)囡@示
-s,--stars=0指定僅顯示評價(jià)為指定星級以上的鏡像
下面是搜索radis緩存
可以看到返回了很多包含關(guān)鍵字的鏡像命雀,其中有鏡像名字、描述斩箫、星級吏砂、是否官方創(chuàng)建,是否自動(dòng)創(chuàng)建乘客,默認(rèn)排序是按照星級排序赊抖。
刪除鏡像
使用docker rmi 命令可以刪除鏡像,命令格式docker rmi IMAGE,這里可以是標(biāo)簽或ID
docker rmi id
當(dāng)鏡像只剩下一個(gè)標(biāo)簽的時(shí)候要小心寨典,使用docker rmi會刪除對應(yīng)鏡像,會刪除所有層