docker 镜像管理命令
Docker 镜像含有启动容器所需要的文件系统及所需要的内容,因此镜像主要用于创建并启动 docker 容器。
Docker 镜像含里面是一层层文件系统,叫做 Union FS(联合文件系统),联合文件系统,可以将几层目录挂载到一起,形成一个虚拟文件系统,虚拟文件系统的目录结构就像普通 linux 的目录结构一样,docker 通过这些文件再加上宿主机的内核提供了一个 linux 的虚拟环境,每一层文件系统我们叫做一层 layer,联合文件系统可以对每一层文件系统设置三种权限,只读(readonly)、读写(readwrite)和写出(whiteout-able),但是 docker 镜像中每一层文件系统都是只读的,构建镜像的时候,从一个最基本的操作系统开始,每个构建的操作都相当于做一层的修改,增加了一层文件系统,一层层往上叠加,上层的修改会覆盖底层该位置的可见性,这也很容易理解,就像上层把底层遮住了一样,当使用镜像的时候,我们只会看到一个完全的整体,不知道里面有几层也不需要知道里面有几层,结构如下:
一个典型的 Linux 文件系统由 bootfs 和 rootfs 两部分组成,bootfs(boot file system) 主要包含 bootloader 和 kernel,bootloader 主要用于引导加载 kernel,当 kernel 被加载到内存中后 bootfs 会被 umount 掉,rootfs (root file system) 包含的就是典型 Linux 系统中的/dev,/proc,/bin,/etc 等标准目录和文件,下图就是 docker image 中最基础的两层结构,不同的 linux 发行版(如 ubuntu 和 CentOS ) 在 rootfs 这一层会有所区别。
但是对于 docker 镜像通常都比较小,官方提供的 centos 基础镜像在 200MB 左右,一些其他版本的镜像甚至只有几 MB,docker 镜像直接调用宿主机的内核,镜像中只提供 rootfs,也就是只需要包括最基本的命令、工具和程序库就可以了,比如alpine 镜像,在 5M左右。下图就是有两个不同的镜像在一个宿主机内核上实现不同的rootfs。
容器、镜像父镜像:
docker 命令是最常使用的 docker 客户端命令,其后面可以加不同的参数以实现响应的功能,常用的命令如下:
1、搜索镜像
在官方的docker 仓库中搜索指定名称的docker镜像,也会有很多三方个人上传的镜像。
OFFICIAL 表示个人的镜像 ,stars 表示收藏数,也可以在 https://hub.docker.com/ 中搜索
docker search centos #不带版本号默认latest
root@z2:~# docker search centos
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
centos The official build of CentOS. 5992 [OK]
ansible/centos7-ansible Ansible on Centos7 128 [OK]
jdeathe/centos-ssh OpenSSH / Supervisor / EPEL/IUS/SCL Repos - … 114 [OK]
consol/centos-xfce-vnc Centos container with "headless" VNC session… 114 [OK]
centos/mysql-57-centos7 MySQL 5.7 SQL database server 75
imagine10255/centos6-lnmp-php56 centos6-lnmp-php56 58 [OK]
tutum/centos Simple CentOS docker image with SSH access 46
centos/postgresql-96-centos7 PostgreSQL is an advanced Object-Relational … 44
kinogmt/centos-ssh CentOS with SSH 29 [OK]
pivotaldata/centos-gpdb-dev CentOS image for GPDB development. Tag names… 11
2. 下载镜像
格式: docker pull 仓库服务器:端口/项目名称/镜像名称:tag(版本)号
如果不加端口 默认是: latest
docker pull centos:centos7.8.2003 带指定版本号
docker pull centos 不带指定版本号
查看镜像版本,看tag
3 、查看本地镜像:
oot@z2:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos centos7.8.2003 afb6fca791e0 7 days ago 203MB
centos 8.1.1911 470671670cac 3 months ago 237MB
centos latest 470671670cac 3 months ago 237MB
- REPOSITORY #镜像所属的仓库名称
- TAG #镜像版本号(标识符),默认为 latest
- IMAGE ID #镜像唯一 ID 标示
- CREATED #镜像创建时间
- VIRTUAL SIZE #镜像的大小
4 、镜像导出:
可以将镜像从本地导出问为一个压缩文件,然后复制到其他服务器进行导入使用。
导出方法 1: 使用 -o
docker save centos:centos7.8.2003 -o /opt/centos1.tar.gz
导出方法 2: 使用 >
docker save centos:8.1.1911 > /opt/centos2.tar.gz
5 、镜像导入
在另一台机器导入
方法 1: 使用 -i
root@z1:~# docker load -i centos1.tar.gz
fb82b029bea0: Loading layer [==================================================>] 211.1MB/211.1MB
Loaded image: centos:centos7.8.2003
方法 2: 使用 <
shroot@z1:~# docker load < centos2.tar.gz
0683de282177: Loading layer [==================================================>] 244.9MB/244.9MB
Loaded image: centos:8.1.1911
发现tag 、imageID 没变
root@z1:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos centos7.8.2003 afb6fca791e0 7 days ago 203MB
centos 8.1.1911 470671670cac 3 months ago 237MB
6、删除镜像
docker rmi 镜像 ID/镜像名称
#删除指定 ID 的镜像,通过镜像启动容器的时候镜像不能被删除,除非将容器全部关闭 Remove one or more images
docker rm 容器 ID/容器名称
#删除容器 Remove one or more containers
docker rm 容器 ID/容器名 -f
#强制删除正在运行的容器
root@z1:~# docker rmi centos:centos7.8.2003
Untagged: centos:centos7.8.2003
Deleted: sha256:afb6fca791e071c66276202f8efca5ce3d3dc4fb218bcddff1bc565d981ddd1e
Deleted: sha256:fb82b029bea0a2a3b6a62a9c1e47e57fae2a82f629b2d1a346da4fc8fb53a0b6
root@z1:~# docker rmi 470671670cac
Untagged: centos:8.1.1911
Deleted: sha256:470671670cac686c7cf0081e0b37da2e9f4f768ddc5f6a26102ccd1c6954c1ee
Deleted: sha256:0683de2821778aa9546bf3d3e6944df779daba1582631b7ea3517bb36f9e4007
root@z1:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE