1. 程式人生 > >Docker 映象、容器、倉庫的概念及基本操作

Docker 映象、容器、倉庫的概念及基本操作

Docker 映象、容器、倉庫的概念

Docker映象

Docker映象(Image)類似於虛擬機器的映象,可以將他理解為一個面向Docker引擎的只讀模板,包含了檔案系統。

例如:一個映象可以完全包含了Ubuntu作業系統環境,可以把它稱作一個Ubuntu映象。映象也可以安裝了Apache應用程式(或其他軟體),可以把它稱為一個Apache映象。

映象是建立Docker容器的基礎,通過版本管理和增量的檔案系統,Docker提供了一套十分簡單的機制來建立和更新現有的映象。使用者可以從網上下載一個已經做好的應用映象,並通過命令直接使用。總之,應用執行是需要環境的,而映象就是來提供這種環境。

Docker容器

Docker容器(Container)類似於一個輕量級的沙箱子(因為Docker是基於Linux核心的虛擬技術,所以消耗資源十分少),Docker利用容器來執行和隔離應用。

容器是從映象建立的應用執行例項,可以將其啟動、開始、停止、刪除,而這些容器都是相互隔離、互不可見的。

可以吧每個容器看作一個簡易版的Linux系統環境(包括了root使用者許可權、程序空間、使用者空間和網路空間),以及與執行在其中的應用程式打包而成的應用盒子。

映象自身是隻讀的。容器從映象啟動的時候,Docker會在映象的最上層建立一個可寫層,映象本身將保持不變。就像用ISO裝系統之後,ISO並沒有什麼變化一樣。

Docker倉庫

Docker倉庫(Repository)類似與程式碼倉庫,是Docker集中存放映象檔案的場所。

有時候會看到有資料將Docker倉庫和註冊伺服器(Registry)混為一談,並不嚴格區分。實際上,註冊伺服器是存放倉庫的地方,其上往往存放著多個倉庫。每個倉庫集中存放某一類映象,往往包括多個映象檔案,通過不同的標籤(tag)來進行區分。例如存放Ubuntu作業系統映象的倉庫,稱為Ubuntu倉庫,其中可能包括14.04,12.04等不同版本的映象。

根據儲存的映象公開分享與否,Docker倉庫分為公開倉庫(Public)和私有倉庫(Private)兩種形式。

目前,最大的公開倉庫是Docker Hub,存放了數量龐大的映象供使用者下載。國內的公開倉庫包括Docker Pool等,可以提供穩定的國內訪問。如果使用者不希望公開分享自己的映象檔案,Docker也支援使用者在本地網路內建立一個只能自己訪問的私有倉庫。

當用戶建立了自己的映象之後就可以使用push將它上傳到指定的公有或則私有倉庫。這樣使用者下次在另一臺機器上使用該映象時,只需將其從倉庫pull下來就可以了。

下面一篇文章介紹了有關上述概念的基本命令

Docker關於映象、容器、倉庫的基本命令

映象

1.獲取映象

$ docker pull dl.dockerpool.com:5000/ubuntu:14.04

dl.dockerpool.com為註冊伺服器,5000為埠號,ubuntu為倉庫名稱,14.04是映象也是版本號

2.檢視映象資訊

列出本地主機已有的所有映象

$ docker images 

更改變遷資訊

$ docker tag dl.dockerpool.com:5000/ubuntu:latest ubuntu:latest

000為映象ID,顯示這個映象的詳細資訊

$ docker inspect 000

3.搜尋映象

$ docker search mysql (輸出資訊包括映象名字、描述、星級、是否為官方建立、是否自動建立)

4.刪除映象

$ docker rmi dl.dockerpool.com:5000/ubuntu:latest

注:當有該映象建立的容器存在時,映象檔案預設是無法刪除的,所以刪除映象前最好是刪除所有依賴該映象的容器,請不要用強制刪除。

5.建立映象

有三種方法:

  • 基於已有映象的容器建立
$ docker commit -m “add new image”-a "" 000(容器ID) test(新建image name)
  • 基於本地模板匯入
$ cat ubuntu-14.04-x86_64-minimal.tar.gz | Docker import - ubuntu:14.04
  • 基於dockerfile建立

6.存出鏡像

$ docker save -o ubuntu_14.04.tar ubuntu:14.04

7.載入映象

$ docker load --input ubuntu_14.04.tar

或者

docker load < ubuntu_14.04.tar

8.上傳映象

$ docker push user/test:latest

user使用者需要在dockerHub網站註冊

容器

容器是映象的一個執行例項,但它帶有額外的可寫層

1.建立容器

$ docker create -it ubuntu:12.04

2.建立並啟動容器

$ docker run -it ubuntu:12.04 /bin/bash

3.守護態執行

$ docker run -d ubuntu:12.04

4.檢視容器資訊

$ docker ps [-a -q]

檢視終止狀態

5.獲取容器的輸出資訊

$ docker logs cet 

cet是容器ID前三個字元

6.終止容器

$ docker stop cet

7.啟動容器

$ docker start cet

8.重啟容器

$ docker restart cet

9.進入容器

  • attach命令
$ docker attach nostalgic(nostalgic是docker的name)

缺點:所有視窗同步顯示

  • exec命令
- docker exec -it 243... /bin/bash (243...為docker ID)
  • nsenter命令
  • 1.找PID
$ PID=$(docker-pid 243..)
  • 2.通過PID連結容器
$ nsenter --target $PID --mount --uts --ipc --net --pid

10.刪除容器

$ docker rm [-f -l -v] cet

-f 強行終止並刪除

-l 刪除容器的連結,保留容器

-v 刪除掛載的資料卷

11.匯出容器

$ docker export cet >test.tar

12.匯入容器(將容器快照匯入到本地映象庫)

$ cat test.tar | docker import - test/ubuntu:v1.0

重新指定標籤為ubuntu的映象名稱,v1.0的版本號

docker load 也可以匯入映象儲存檔案到本地映象庫,他比import方式的好處是:import匯入映象快照檔案將丟失所有的歷史記錄和元資料資訊。

注:通過匯出容器和匯入容器可以實現容器遷移(拷貝檔案)

倉庫

倉庫是集中存放映象的地方,一個註冊伺服器上有很多倉庫,一個倉庫中有很多映象。

1. 登入

$ docker login

2. 基本操作

查詢、上傳、下載

3. 自動建立

4. 檢視映象

5. 更新映象標籤

$ docker tag dl.dockerpool.com:5000/ubuntu:12.04 ubuntu:12.04

將前面的映象更改為ubuntu:12.04

6. 建立私有倉庫

$ docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registryregistry

自動下載並啟動registry容器,建立本地的私有倉庫服務,預設倉庫船艦的容器在/tmp/registry,可以通過-v引數來存放到指定路徑上

7.管理私有倉庫映象

假設私有倉庫地址為10.0.2.2,埠為5000,

$ docker tag ubuntu:14.04 10.0.2.2:5000/test

更改標籤名

$ docker push 10.0.2.2:5000/test

push映象,會自動push到10.0.2.2地址的機器上

$ curl http://10.0.2.2:5000/v1/search

檢視倉庫10.0.2.2:5000中是否含有test映象

docker pull 10.0.2.2:5000/test

在任何一臺能訪問到10.0.2.2地址的機器上下載映象