1. 程式人生 > >Dockerd的核心概念,鏡像操作

Dockerd的核心概念,鏡像操作

快捷 原生 返回 false 主機 是否 安裝 docker倉庫 生命

簡介

在實際使用Docker的過程中,遇到一些問題,但是總沒有系統的博文可以詳細的介紹Docker,所以個人寫一個由淺入深的系統學習Docker過程。
這裏首先介紹Docker的三大核心概念:鏡像(Image),容器(Container),倉庫(Repository),其實你理解了著三個核心概念,也就能順利的理解Dokcer的整個生命周期了。

Docker 鏡像

????Docker鏡像(Image)類似於虛擬機鏡像,可以理解為一個面向Dokcer引擎的只讀模板,包含了文件系統。
????比如:一個鏡像可以包含一個完整了Centos操作系統,可以把它稱為Centos鏡像。當然,鏡像也可以只安裝了Mysql應用程序(或用戶需要的其他軟件),就可以稱為Mysql鏡像。

????鏡像是創建Docker容器的基礎,它可以通過版本管理和增量的文件系統,如Docker Hub。

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 ID

    docker 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的核心概念,鏡像操作