1. 程式人生 > >docker築基篇-02-映象管理

docker築基篇-02-映象管理

1 映象再探

docker映象是由FileSystem疊加而成的。
和傳統的linux一樣,最底層是bootfs;之上是rootfs。

和linux不同的是,docker裡的rootfs永遠都是隻讀狀態的。之所以你看起來像是修改了它(給它擴充套件新功能),是因為docker的聯合載入技術(一次同時載入多個檔案系統,並將各層檔案系統的功能組合)。
有了聯合載入技術,最終的檔案系統就有了所有已經載入了的檔案系統的功能。是不是感覺有點像面向物件的繼承呢?

在實際使用中,一個docker映象往往都是由另一個docker映象擴充套件而來的。被擴充套件的那個映象就稱之為父映象。最原始的那個父映象被稱為base image(基礎映象)。

看看這個經典的圖吧:

image-layer

最上面那一層是可讀寫的。在容器第一次啟動的時候,該層是空的。
當我們修改某個檔案時,被修改的檔案會從讀寫層下面的只讀層複製到讀寫層。這樣一來檔案的只讀版本還保留著,我們修改的只是一個副本,並將這個副本保留在了最上面的讀寫層,同時只讀版本被讀寫層的檔案隱藏了。

而這個正是docker的另一牛逼哄哄的特性寫時複製
通過這種機制,每個只讀層都是永遠不會發生變化的了。當每次新建或擴充套件一個容器時,都會在容器棧的最頂層增加一個可寫層。在可寫層發生的變更隱藏掉底層的部分之後,各層在組合功能,從而擴充套件容器。

總感覺這東西真是和麵向物件設計原則中的開閉原則不謀而合啊!!!
對修改關閉(除了第一層的可寫層都是隻讀的),對擴充套件開放(在最頂層修改,擴充套件容器)。

2 基礎命令

2.1 檢視映象

docker images
    -a, --all=true|false
        顯示所有映象。預設情況下,那些中間層的映象不會被顯示.The default is false.
    --digests=true|false
        Show image digests. The default is false.
    --no-trunc=true|false
        不會截斷輸出. The default is false.
    -f, --filter=[]
        帶條件地列出映象

映象保存於倉庫中,這裡說的倉庫有點類似於git的倉庫。
一個倉庫可以儲存多個映象,通過 TAG 來區分。
倉庫存在於Registry中,預設情況下,Registry是DockerHub。

[root@h1 ~]# docker images
REPOSITORY                    TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
csphere/centos                7.1                 e3a35d3b1588        46 hours ago        591.4 MB
hub.c.163.com/library/nginx   latest              b1d6e5f8fe92        5 days ago          181.4 MB
daocloud.io/centos            6                   eb24acd8692d        5 weeks ago         194.6 MB
centos                        latest              9baab0af79c4        5 weeks ago         196.7 MB
centos                        6.8                 80e46367f846        6 weeks ago         194.5 MB
centos                        centos7.1.1503      47a77536ad4c        6 weeks ago         212.1 MB
hello-world                   latest              f0cb9bdcaa69        3 months ago        1.848 kB
<none>                        <none>              151b45d87d28        23 months ago       859.5 MB
[root@h1 ~]#

[root@h1 ~]# docker images centos
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
centos              latest              9baab0af79c4        5 weeks ago         196.7 MB
centos              6.8                 80e46367f846        6 weeks ago         194.5 MB
centos              centos7.1.1503      47a77536ad4c        6 weeks ago         212.1 MB

2.2 拉取映象

docker pull 命令其實就是下載映象用的。預設情況下是從DockerHub下載。

當我們使用run命令來從一個映象啟動容器時,如果映象不在本地,docker就會從DockerHub去pull該映象對應的最新版本,即TAG為latest的版本。

docker pull
    -a, --all-tags=true|false
         Download all tagged images in the repository. The default is false.  
[[email protected] ~]# docker pull fedora
latest: Pulling from fedora
daf0c008c194: Pull complete 
daf0c008c194: Pulling fs layer 
Digest: sha256:3346e6e34f51fc00844fe87fd2cf3afe43d7e2f360fabedb56a7c81791958df1
Status: Downloaded newer image for fedora:latest

[[email protected] ~]# docker images
REPOSITORY                    TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
csphere/centos                7.1                 e3a35d3b1588        46 hours ago        591.4 MB
hub.c.163.com/library/nginx   latest              b1d6e5f8fe92        5 days ago          181.4 MB
daocloud.io/centos            6                   eb24acd8692d        5 weeks ago         194.6 MB
centos                        latest              9baab0af79c4        5 weeks ago         196.7 MB
centos                        6.8                 80e46367f846        6 weeks ago         194.5 MB
centos                        centos7.1.1503      47a77536ad4c        6 weeks ago         212.1 MB
fedora                        latest              daf0c008c194        8 weeks ago         204.4 MB
hello-world                   latest              f0cb9bdcaa69        3 months ago        1.848 kB
<none>                        <none>              151b45d87d28        23 months ago       859.5 MB
[[email protected] ~]#

# 指定TAG
[[email protected] ~]# docker pull fedora:20
20: Pulling from fedora
a45be3b30145: Downloading [======>……
…………………………
…………………………

2.3 搜尋映象

這裡指的搜尋不是本地搜尋,而是在遠端的DockerHub上搜索。比如:

[[email protected] ~]# docker search nginx
NAME                      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
nginx                     Official build of Nginx.                        4345      [OK]       
jwilder/nginx-proxy       Automated Nginx reverse proxy for docker c...   827                  [OK]
richarvey/nginx-php-fpm   Container running Nginx + PHP-FPM capable ...   286                  [OK]
million12/nginx-php       Nginx + PHP-FPM 5.5, 5.6, 7.0 (NG), CentOS...   76                   [OK]
# ...............
[[email protected] ~]#

以上搜索結果的標題含義:

  • NAME:映象所在倉庫名,可以用它來pull映象
  • DESCRIPTION:映象描述
  • STARS:使用者評價
  • OFFICIAL:是否是官方的
  • AUTOMATED:是否是使用自動構建流程建立的

2.4 刪除映象

docker rmi:刪除指定映象


# 刪除fedora最新版的映象
[[email protected] ~]# docker rmi -f fedora:latest
Untagged: fedora:latest
Deleted: daf0c008c194f2bae4f4bf36327d9166bc1dfa9fbbadb2ad585c1f11037fd787

相關推薦

docker-02-映象管理

映象再探 基礎命令 1 檢視映象 2 拉取映象 3 搜尋映象 4 刪除映象 1 映象再探 docker映象是由FileSystem疊加而成的。 和傳統的linux一樣,最底層是bootfs;之上是rootfs。 和linux不同的是,d

docker-03-使用docker-commit構建自己的映象

docker構建映象,至少有兩種方法: docker commit 命令 Dockerfile 本篇文章介紹如何使用docker commit命令來構建自己的映象。並推送到DockerHub。 1 準備 登入到Dockerhub,如下所

docker-04-使用Dockerfile構建自己的映象

上一篇文章介紹了使用docker commit命令來構建自己的映象。 本篇文章將使用Dockerfile實現上篇文章中的需求。 1 構建自己的映象 此處我們打算,給一個centos:6.8容器安裝nginx伺服器。 並將其狀態保留,以便不用每次

spark-01-Eclipse開發Spark HelloWorld

1 前言 Spark這麼火,越來越多的小夥伴開始搞大資料。 通過多方查閱資料,這個單機版的Spark的HelloWorld終於跑出來了。 此HelloWorld非彼HelloWorld,並不是打印出HelloWorld那麼簡單,而是

Java執行緒池的瞭解使用—

## 前言 Java中的執行緒池是一個很重要的概念,它的應用場景十分廣泛,可以被廣泛的用於高併發的處理場景。J.U.C提供的執行緒池:ThreadPoolExecutor類,可以幫助我們管理執行緒並方便地並行執行任務。因此瞭解併合理使用執行緒池非常重要。 本文對執行緒池採用 3W 的策略結合原始碼進行思考

Docker基礎2:映象管理

1、映象簡介 簡單說,Docker映象是一個不包含Linux核心而又精簡的Linux作業系統。        映象不是一個單一的檔案,而是有多層構成。我們可以通過docker history <ID/NAME> 檢視映象中各層內容及大小,每

Docker第五-Docker映象推送公共倉庫

文章目錄 映象推送步驟 總結 這裡介紹本地映象如何推送到docker官方倉庫。 映象推送步驟 註冊倉庫 登入docker官網倉庫(https://hub.docker.com),註冊一個賬號,記住賬號和密碼 首先,本地要有一個映象,映象

Docker第四-Dockerfile製作Docker映象

文章目錄 製作簡單Mysql映象 Dockerfile命令說明 總結 這一篇主要介紹Dockerfile命令的使用說明及如何使用Dockerfile製作簡單映象 製作簡單Mysql映象 建立目錄 mkdir /tmp/mysql

3.Docker映象管理

本章所講內容 About Docker Images Docker Registry 映象製作 Docker Hub映象管理 aliyun平臺映象管理 上傳映象到私有“Registry” About Docker Images Dcoker映象含有啟動容器所需要的檔

Docker 映象管理

認識Docker映象   建立映象時需要制定使用哪個映象。它會先從本地查詢有沒有這個映象,如果不存在,就去官方Docker Hub倉庫查詢並下載到本機然後基於該映象建立容器。 每個映象有一個唯一的ID,也可以使用映象的名字和版本號兩部分組合唯一表示。如果省略版本號,預設使用最新版本(latest)   

Docker本地映象管理命令

一、Docker映象操作——列出映象 語法:docker images [OPTIONS] [REPOSITORY[:TAG]] 引數說明: OPTIONS說明: -a :列出本地所有的映象(含中間映像層,預設情況下,過濾掉中間映像層); --digests :顯示映象的摘要資訊; -f

Docker容器技術之映象管理基礎(三)

上一篇文章連結:Docker容器技術基礎用法(二) 目錄   一、回顧 1.1docker容器的狀態 1.2docker容器管理時常用的命令 1.3docker的架構形式 二、About Docker Images 2.1 關於docker映象的作用

Docker $ 第五Docker 資料管理

一.Docker資料卷簡介 1.在Docker內部及容器之間對資料的管理有兩種方式,一種是資料卷,另一種是掛載主機目錄。 (1)資料卷(Volumes):提供一個或多個容器使用的特殊目錄,它的特性有 在容器之間可共享,可重用 對資料卷的修改立即生效

004.Docker映象管理

一 映象基本操作 映象是一個包含程式執行必要依賴環境和程式碼的只讀檔案,其本質是磁碟上一系列檔案的集合。它採用分層的檔案系統,將每一次改變以讀寫層的形式增加到原來的只讀檔案上。映象是容器執行的基石。 1.1 搜尋映象 1 [email protected]:~# docke

(二)Docker映象管理

文章目錄 1 製作一個簡單映象 2 Docker網路 2.1 暴露埠,相當於DNAT 2.2 聯盟式容器 1 製作一個簡單映象 # 先啟動一個容器,增加一些檔案,然後基於此做成一個映象 [[email

DOCKER-1-2-映象管理

1.進入到redis容器進行終端互動操作,檢視根目錄,發現是有一個完整的檔案系統的。檢視nginx容器也是類似的情況。這裡說下從外部獲取映象的各種標識。比如從quay.io上pull獲取flannel映象。registry是quay.io,埠沒有指明,預設是443(通過https訪問埠),names

Docker容器進階--建立映象、資料管理、網路、儲存型別

一、Docker映象建立方法--基於已有映象、基於本地模板; 基於已有映象: 1.準備映象: 2.準備容器: 3.將容器建立成為docker映象檔案: 基於本地模板: 1.下載本地作業系統模板: https://download.open

Docker介紹,安裝docker映象管理,通過容器建立映象,使用模板建立映象

Docker介紹 官網 www.docker.com github https://github.com/docker/docker.github.io 開源的容器引擎,可以讓開發者打包應用以及依賴的庫,然後釋出到任何流行的linux發行版上,移植很方便 由g

docker入門之映象管理基礎

docker映象管理基礎 首發:arppinging 一、映象概述 1.1 聯合掛載 在之前的文章我們提到過,容器是基於映象啟動的,映象的儲存驅動是overlay2 overlayFS將單個Linux主機上的兩個目錄合成一個目錄,這些目錄稱為層,統一過程被稱為聯合掛載。 下圖是一個docker映象

docker映象管理倉庫搭建加密認證及負載均衡倉庫的搭建

1.映象管理: Docker 倉庫: Docker 官方已經把倉庫封裝為映象,直接通過啟動容器就可以部署完成倉庫: # docker run -d --name registry -p 5000:5000 -v /opt/registry:/var/l