Dockerd的核心概念,鏡像操作
簡介
在實際使用Docker的過程中,遇到一些問題,但是總沒有系統的博文可以詳細的介紹Docker,所以個人寫一個由淺入深的系統學習Docker過程。
這裏首先介紹Docker的三大核心概念:鏡像(Image),容器(Container),倉庫(Repository),其實你理解了著三個核心概念,也就能順利的理解Dokcer的整個生命周期了。
Docker 鏡像
????Docker鏡像(Image)類似於虛擬機鏡像,可以理解為一個面向Dokcer引擎的只讀模板,包含了文件系統。
????比如:一個鏡像可以包含一個完整了Centos操作系統,可以把它稱為Centos鏡像。當然,鏡像也可以只安裝了Mysql應用程序(或用戶需要的其他軟件),就可以稱為Mysql鏡像。
Docker 容器
????Docker容器(container)類似於輕量級的沙箱,Docker利用容器來運行和隔離應用。容器是從鏡像創建的應用運行實例,可以將其啟動、開始、停止、刪除,但是所有的容器是相互隔離的,互不可見的,這就提供了一個實體機可以安裝多個容器,且很輕量級相對於虛擬機。鏡像本身是只讀的,容器從鏡像啟動的時候,Docker會在鏡像的最上層創建一個可寫層,鏡像本身保持不變。
Docker倉庫
????Docker倉庫(Repository)類似於代碼庫,是Dokcer集中存放鏡像的場所。實際上,註冊服務器是存放倉庫的地方,其上往往存放著很多倉庫。每個倉庫集中存放某一類鏡像,往往包括多個鏡像文件,通過不同的標簽(tag)來進行區分。
????根據存儲的鏡像公開分享與否,Docker倉庫可以分為公開倉庫(Public)和私有倉庫(Private)兩種形式。目前,最大的公開倉庫是Docker Hub,存放 了數量龐大的鏡像供用戶下載,國內的公開鏡像包括Docker Pool,可以提供穩定的國內訪問,與GitHub類似。
安裝Docker
????Docker支持主流的操作系統平臺使用,包括Ubuntu、Centos、Window以及MacOS系統等。當然,肯定在Linux系列平臺是原生支持的,體驗最好。Centos下具體的安裝請看上一篇博文# Centos搭建Docker環境,後續講述的Docker環境以Centos雲主機.。
獲取鏡像
????這裏講述如何使用pull命令從Docker Hub倉庫下載鏡像到本地,如何查看本地已有的鏡像文件信息;已經如何push本地鏡像到Docker Hub倉庫。註冊Docker Hub請訪問DockerHub。
????鏡像是Docker運行容器的前提,docker pull 命令從網絡上下載鏡像。格式為:
docker pull NAME[:TAG] //不指定TAG,默認會選擇latest標簽,即最新版本的鏡像
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)其實是AUFS中重要的概念(代表一種聯合文件系統),是實現增量保存和更新的重要基礎。
查看鏡像
[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
以上信息的個字段意思:
- 來自於那個倉庫,比如docker.io/mysql倉庫
- 鏡像的標簽信息,比如latest
- 鏡像的ID號(唯一)
- 創建時間
鏡像大小
這裏的鏡像的ID信息十分重要,它唯一標識了鏡像。
docker tag 命令為本地鏡像添加新的標簽:如docker tag docker.io/mysql mysql:1.0
如果細心的你會發現其實它們的ID事一樣的,都是:f008d8ff927d,其實這裏它們都指向同一個鏡像文件就,相當起了一個別名,和window系統的快捷方式類似。
獲取鏡像的詳細信息docker inspect IDdocker inspect ID
搜索鏡像
使用docker search 命令可以遠程搜索遠程倉庫中共享的鏡像,默認搜索Docker Hub官方的鏡像。
docker search imageName //可以指定一下參數 -- automated=false 僅顯示自動創建的鏡像 --no-trunc=false 輸出信息不截斷顯示 -s,--stars=0指定僅顯示評價為指定星級以上的鏡像
下面是搜索radis緩存
可以看到返回了很多包含關鍵字的鏡像,其中有鏡像名字、描述、星級、是否官方創建,是否自動創建,默認排序是按照星級排序。刪除鏡像
使用docker rmi 命令可以刪除鏡像,命令格式docker rmi IMAGE,這裏可以是標簽或ID
docker rmi id
當鏡像只剩下一個標簽的時候要小心,使用docker rmi會刪除對應鏡像,會刪除所有層
待續。。
Dockerd的核心概念,鏡像操作