docker入門之映象
docker映象類似於虛擬機器映象,可以將它理解為一個只讀的模板。例如,一個映象可以包含一個基本的作業系統,裡面安裝了tomcat(或者其它軟體),我們把它稱為tomcat映象。映象是建立docker容器的基礎。通過版本管理和增量的檔案系統,docker提供了十分簡單的機制來建立和更新的現有的映象,也可以從映象倉庫裡pull映象,就像git pull程式碼一樣。
獲取映象
映象是容器執行的前提條件,官方Docker Hub 映象倉庫提供了10W+個映象提供大家開放下載。我們可以直接使用docker pull
命令格式:
docker pull name:tag
name為映象名稱,tag為映象的標籤(通常用來表示版本資訊)獲取一個Ubuntu 14.04系統映象可以使用
docker pull ubuntu:14.04
[[email protected] ~]# docker pull ubuntu:14.04
如果不指定tag,則預設會選擇latest標籤,下載倉庫中最新版本的映象。
嚴格地講倉庫名稱還要新增映象地址(即registry,註冊伺服器)為字首,我們使用的是官方Docker Hub,所以字首可以省略,完整命令為docker pull docker.io/library/ubuntu:14.04
如果下載非官方的映象,倉庫名稱前要指定完整的倉庫地址。例如我們從網易的映象源下載ubuntu 14.04 正確命令為
docker pull hub.c.163.com/ubuntu:latest
pull子命令支援的選項主要包括-a, --all-tags=true|false
是否獲取從那個庫中的所有映象,預設為false,具體的選項可以通過 docker pull --help
命令檢視。有了映象後,我們就可以以這個映象為基礎啟動一個容器來執行。以上面的 ubuntu:14.04 為例,如果我們打算啟動裡面的 bash 並且進行互動式操作的話,可以執行下面的命令。
[[email protected] ~]# docker run -it --rm ubuntu:14.04 bash
[email protected]:/# cat /etc/os-release
NAME="Ubuntu"
VERSION="14.04.5 LTS, Trusty Tahr"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 14.04.5 LTS"
VERSION_ID="14.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
[email protected]:/# exit
exit
[[email protected] ~]#
docker run 就是執行容器的命令,我們這裡簡要的說明一下上面用到的引數。
-it
:這是兩個引數,一個是 -i
:互動式操作,一個是 -t
終端。我們這裡打算進入 bash 執行一些命令並檢視返回結果,因此我們需要互動式終端。--rm
:這個引數是說容器退出後隨之將其刪除。預設情況下,為了排障需求,退出的容器並不會立即刪除,除非手動 docker rm
我們這裡只是隨便執行個命令,看看結果,不需要排障和保留結果,因此使用 --rm
可以避免浪費空間。
ubuntu:14.04:這是指用 ubuntu:14.04 映象為基礎來啟動容器。
bash:放在映象名後的命令,這裡我們希望有個互動式 Shell,因此用的是 bash。
進入容器後,我們可以在 Shell 下操作,執行任何所需的命令。這裡,我們執行了 cat /etc/os-release
,這是 Linux 常用的檢視當前系統版本的命令,從返回的結果可以看到容器內是 Ubuntu 14.04.5 LTS 系統。最後我們通過 exit
退出了這個容器。
檢視映象資訊
使用docker images
命令可以檢視本地已存在映象
[[email protected] ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/ubuntu 14.04 ccc7a11d65b1 4 weeks ago 120.1 MB
docker.io/ubuntu latest ccc7a11d65b1 4 weeks ago 120.1 MB
在列出的資訊中有5個欄位,分別是映象來自哪個倉庫、標籤、映象ID、建立時間。
docker images -a
列出所有映象檔案docker images -q
僅列出映象IDdocker images -f dangling=true
列出沒有別使用的映象
使用docker tag
命令新增映象標籤
[[email protected] ~]# docker tag ubuntu:14.04 ubuntu:14
然後使用docker images
檢視映象,多了一個擁有ubuntu:14標籤的映象
[[email protected] ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/ubuntu 14 ccc7a11d65b1 4 weeks ago 120.1 MB
docker.io/ubuntu 14.04 ccc7a11d65b1 4 weeks ago 120.1 MB
docker.io/ubuntu latest ccc7a11d65b1 4 weeks ago 120.1 MB
使用docker inspect
命令檢視映象詳細資訊。包括製作者、適應架構、各層的數字摘要等。資訊比較多就不放出來了
使用docker history name:tag
檢視映象歷史
比如檢視ubuntu:latest
映象的建立過程
[[email protected] wso2am]# docker history ubuntu:latest
IMAGE CREATED CREATED BY SIZE COMMENT
ccc7a11d65b1 5 weeks ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0 B
<missing> 5 weeks ago /bin/sh -c mkdir -p /run/systemd && echo 'doc 7 B
<missing> 5 weeks ago /bin/sh -c sed -i 's/^#\s*\(deb.*universe\)$/ 2.759 kB
<missing> 5 weeks ago /bin/sh -c rm -rf /var/lib/apt/lists/* 0 B
<missing> 5 weeks ago /bin/sh -c set -xe && echo '#!/bin/sh' > /u 745 B
<missing> 5 weeks ago /bin/sh -c #(nop) ADD file:39d3593ea220e686d5 120.1 MB
過長的命令被截斷了,可以使用--no-trunc
選項輸出完整命令
搜尋映象
使用docker search
命令可以搜尋映象庫裡中共享的映象,預設搜尋官方倉庫的映象。比如我們搜尋nginx映象
[[email protected] wso2am]# docker search -s 40 nginx
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
docker.io docker.io/nginx Official build of Nginx. 6865 [OK]
docker.io docker.io/jwilder/nginx-proxy Automated Nginx reverse proxy for docker c... 1124 [OK]
docker.io docker.io/richarvey/nginx-php-fpm Container running Nginx + PHP-FPM capable ... 439 [OK]
docker.io docker.io/jrcs/letsencrypt-nginx-proxy-companion LetsEncrypt container to use with nginx as... 223 [OK]
docker.io docker.io/kong Open-source Microservice & API Management ... 112 [OK]
docker.io docker.io/webdevops/php-nginx Nginx with PHP-FPM 90 [OK]
docker.io docker.io/kitematic/hello-world-nginx A light-weight nginx container that demons... 85
輸出結果將按照星級評級進行排訓,-s
引數表示星級40以上的nginx映象,支援的引數還有
--automated=true|false
僅顯示自動建立的映象,預設為否--no-trunc=true|false
輸出資訊不截斷提示,預設為否
刪除映象
使用標籤刪除映象,命令docker rmi
可以刪除映象
例如我們刪除ubuntu:14映象
[[email protected] ~]# docker rmi ubuntu:14
Untagged: ubuntu:14
如果該映象有多個標籤的話刪除的只是標籤並不會刪除映象。如果只有一個標籤的話docker rmi
命令會徹底刪除映象。
使用id刪除映象
使用命令docker rmi ID
命令可以刪除映象
當有該映象建立的容器存在時,映象是無法刪除的。如果要強行刪除的話可以使用
docker rmi -f ID
建立映象
建立映象的方法主要有三種:基於已有映象的容器建立,基於本地模板匯入,基於dockerfile建立
基於已有映象的容器建立
該方法主要是用docker commit
命令建立映象,主要引數為
- -a,–auther="" 作者資訊
- -m, --message="" 提交資訊
首先我們啟動一個nginx映象,然後進入容器,建立一個test檔案,退出。
[[email protected] ~]# docker run -d -p 80:80 nginx
00fb093d0ec2044f6a5d62fe2aa64c487e427456bd53cb6dc8b6462be4e25167
[[email protected] ~]# docker exec -it 00fb093d0 bash
[email protected]:/# touch test
[email protected]:/# exit
[[email protected] ~]#
這時容器已發生了改變,使用docker commit
命令建立一個新的映象
[[email protected] ~]# docker commit -a rgl -m "add a new file" 00fb093d0ec2 test:0.1
sha256:bcaa64525c2bde4e1329f7b28bc2c98b2947f83a5cb0efff6e9d968a85618930
建立成功的話會返回新映象的id。
存出和載入映象
如果要存出鏡像到本地檔案,可以使用docker save
命令
[[email protected] ~]# docker save -o nginx.tar nginx:latest
這樣就可以通過複製該映象檔案分享給其他人
如果要把映象檔案載入到本地映象庫,使用命令docker load
。
[[email protected] ~]# docker load --input nginx.tar
Loaded image: nginx:latest
或者
[[email protected] ~]# docker load < nginx.tar
Loaded image: nginx:latest
上傳映象
使用docker push
命令上傳映象到倉庫,預設上傳到Docker官方倉庫(需要登入)。例如我們自制的nginx:1.10.0映象上傳,首先我們要新增新的標籤user/nginx:1.10.0 ,然後用docker push
上傳映象,user改成你的使用者名稱。
[[email protected] ~]# docker push user/nginx:1.10.0
The push refers to a repository [docker.io/user/nginx]
110566462efa: Mounted from library/nginx
305e2b6ef454: Mounted from library/nginx
1.10.0: digest: sha256:d8565c25b654da69bc9b837a0dee713c988f0276e90564aa8fd12ebf4c2ff11e size: 948