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地址的機器上下載映象