實驗環境
CentOS 7.5
安裝並啟動docker
yum install -y docker
systemctl start docker
鏡像
安裝鏡像
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
注:對於Docker鏡像來說,如果不顯式地指定TAG,則默認會選擇 latest標簽,即下載倉庫中最新版本的鏡像。
- 從Docker Hub的CentOS倉庫下載一個最新的CentOS操作系統的鏡像。
[root@kvm ~]# docker pull centos
Using default tag: latest
Trying to pull repository docker.io/library/centos ...
latest: Pulling from docker.io/library/centos
a02a4930cb5d: Pull complete
Digest: sha256:184e5f35598e333bfa7de10d8fb1cebb5ee4df5bc0f970bf2b1e7c7345136426
Status: Downloaded newer image for docker.io/centos:latest docker pull centos
Using default tag: latest
Trying to pull repository docker.io/library/centos ...
latest: Pulling from docker.io/library/centos
a02a4930cb5d: Pull complete
Digest: sha256:184e5f35598e333bfa7de10d8fb1cebb5ee4df5bc0f970bf2b1e7c7345136426
Status: Downloaded newer image for docker.io/centos:latest docker pull centos
Using default tag: latest
Trying to pull repository docker.io/library/centos ...
latest: Pulling from docker.io/library/centos
a02a4930cb5d: Pull complete
Digest: sha256:184e5f35598e333bfa7de10d8fb1cebb5ee4df5bc0f970bf2b1e7c7345136426
Status: Downloaded newer image for docker.io/centos:latest
注:該命令實際上下載的就是centos:latest鏡像,目前最新的7.6.1810版本的鏡像。
- 從Docker Hub的CentOS倉庫下載一個指定版本的CentOS操作系統的鏡像。
[root@kvm ~]# docker pull centos:7.3.1611
Trying to pull repository docker.io/library/centos ...
7.3.1611: Pulling from docker.io/library/centos
b8e0383d5f94: Pull complete
Digest: sha256:6fe8d484f2897e2ea75f496bfb6792b539baf3e56880fce3b9b6505d76e266dd
Status: Downloaded newer image for docker.io/centos:7.3.1611
查看鏡像信息
列出本地主機上已有的鏡像
[root@kvm ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/centos latest 1e1148e4cc2c 7 weeks ago 202 MB
docker.io/centos 7.3.1611 1e20acd39495 3 months ago 192 MB
- 各字段釋義
- REPOSITORY:來自於哪個倉庫,比如centos倉庫;
- TAG:鏡像的標簽信息,比如7.3.1611;
- IMAGE ID:鏡像的ID號(唯一);
- CREATED:創建時間;
- SIZE:鏡像大小。
創建鏡像
創建鏡像的方法主要有三種:基於已有鏡像的容器創建、基於本地模板導入、基於Dockerfile創建;這里着重介紹前兩種。
基於已有鏡像的容器創建
- 該方法實現創建的命令行格式
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
[root@kvm ~]# docker commit --help
Usage: docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
Create a new image from a container's changes
Options:
-a, --author string 作者信息
-c, --change list 提交的時候執行Dockerfile指令 (default [])
--help 幫助信息
-m, --message string 提交信息
-p, --pause 提交期間暫停容器運行
- 實際操作創建一個新鏡像
- 啟動一個鏡像,然后做修改后退出
[root@kvm ~]# docker run -t -i docker.io/centos:7.3.1611 /bin/bash
[root@90d3b762f848 /]# touch test.txt
[root@90d3b762f848 /]# exit
注:記住容器 ID為90d3b762f848。
* 此時的該容器與原centos:7.3.1611鏡像相比,已經發生改變,可執行docker commit命令來提交一個新的鏡像;提交時可以使用ID或名稱來指定容器。
[root@kvm ~]# docker commit -m "add a file named test.txt" -a "docker new" 90d3b762f848 www.wholj.com:7.3
sha256:3a51b6661c9f9c31ec8239405535cc57f782972f6eedf8452e2d8f4bce0bc2d6
[root@kvm ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
www.wholj.com 7.3 3a51b6661c9f 7 seconds ago 192 MB
docker.io/centos latest 1e1148e4cc2c 7 weeks ago 202 MB
docker.io/centos 7.3.1611 1e20acd39495 3 months ago 192 MB
鏡像ID為3a51b6661c9f的鏡像即為剛新增的。
基於本地模板導入
- 該方法實現創建的命令行格式
[root@kvm /home/tools/ISO]# docker import --help
Usage: docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
Import the contents from a tarball to create a filesystem image
Options:
-c, --change list Apply Dockerfile instruction to the created image (default [])
--help 幫助信息
-m, --message string 為此導入鏡像設置提交信息
- 實際操作創建一個新鏡像
[root@kvm /home/tools/ISO]# cat centos-7-x86_64-minimal.tar.gz | docker import - www.wholj.com:7.5
sha256:4950a54ede5a5c0da704c6f74e6bcc43d440e83260b0752a926325035435a7dc
[root@kvm /home/tools/ISO]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
www.wholj.com 7.5 4950a54ede5a 10 seconds ago 435 MB
www.wholj.com 7.3 3a51b6661c9f 2 days ago 192 MB
docker.io/centos latest 1e1148e4cc2c 7 weeks ago 202 MB
docker.io/centos 7.3.1611 1e20acd39495 3 months ago 192 MB
鏡像ID為4950a54ede5a的鏡像即為剛新增的。
導出(save)和載入(load)鏡像
導出鏡像
將本地已有的鏡像文件導出后可分享給其他人使用。
- 導出鏡像的命令行格式用法
docker save [OPTIONS] IMAGE [IMAGE...]
[root@kvm ~]# docker save --help
Usage: docker save [OPTIONS] IMAGE [IMAGE...]
Save one or more images to a tar archive (streamed to STDOUT by default)
Options:
--help 幫助信息
-o, --output string 從標准輸出導出鏡像到指定的文件中
- 導出本地的docker.io/centos:latest鏡像為文件centos_7.6.tar
[root@kvm ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
www.wholj.com 7.3 3a51b6661c9f About an hour ago 192 MB
docker.io/centos latest 1e1148e4cc2c 7 weeks ago 202 MB
docker.io/centos 7.3.1611 1e20acd39495 3 months ago 192 MB
[root@kvm ~]# ll
total 8
-rw-------. 1 root root 2090 Nov 30 11:33 anaconda-ks.cfg
-rw-------. 1 root root 1955 Nov 30 11:33 original-ks.cfg
[root@kvm ~]# docker save -o centos_7.6.tar docker.io/centos:latest
[root@kvm ~]# ll
total 205272
-rw-------. 1 root root 2090 Nov 30 11:33 anaconda-ks.cfg
-rw------- 1 root root 210186752 Jan 25 17:17 centos_7.6.tar
-rw-------. 1 root root 1955 Nov 30 11:33 original-ks.cfg
[root@kvm ~]#
載入鏡像
將別人分享給自己的鏡像導入到本地鏡像庫。
- 載入鏡像的命令行格式用法
docker load [OPTIONS]
[root@kvm ~]# docker load --help
Usage: docker load [OPTIONS]
Load an image from a tar archive or STDIN
Options:
--help 幫助信息
-i, --input string 從指定tar文件讀入鏡像內容
-q, --quiet Suppress the load output
- 從指定文件導入鏡像文件到本地鏡像庫
[root@kvm ~]# docker load -i ./centos_7.6.tar
Loaded image: docker.io/centos:latest
或者:
[root@kvm ~]# docker load < ./centos_7.6.tar
Loaded image: docker.io/centos:latest
注:上述命令將導入鏡像及其相關的元數據信息(包括標簽等)。導入成功后,可以使用docker images命令進行查看,與原鏡像一致。