Docker镜像管理
- Docker 镜像含有启动容器所需要的文件系统及所需要的内容,因此镜像主要用于创建并启动 docker 容器。
- Docker 镜像里面是一层层文件系统,叫做 Union FS(联合文件系统),联合文件系统,可以将几层目录挂载到一起,形成一个虚拟文件系统,虚拟文件系统的目录结构就像普通 linux 的目录结构一样,docker 通过这些文件再加上宿主机的内核提供了一个 linux 的虚拟环境,每一层文件系统设置三种权限,只读(readonly)、读写(readwrite)、写出(whiteout-able),但是 docker 镜像中每一层文件系统都是只读的,构建镜像的时候,从一个最基本的操作系统开始,每个构建的操作都相当于做一层的修改,增加了一层文件系统,一层层往上叠加,上层的修改会覆盖底层该位置的可见性,这也很容易理解,就像上层把底层遮住了一样,当使用镜像的时候,我们只会看到一个完全的整体,不知道里面有几层也不需要知道里面有几层,结构如下:
[外链图片转存中...(img-DpgXYltO-1634096404703)]
-
一个典型的 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。
[外链图片转存中...(img-i7JBgtPt-1634096404704)]
- 容器、镜像、父镜像
[外链图片转存中...(img-deGHwmVn-1634096404705)]
- docker 命令是最常使用的 docker 客户端命令,其后面可以加不同的参数以实现相应的功能,常用的命令如下:
搜索镜像
- 在官方的 docker 仓库中搜指定名称的 docker 镜像,也会很多镜像。
- root@bj-magedu-v-study-14:~# docker search centos:7.2.1511 #带指定版本
[外链图片转存中...(img-bDe1gavD-1634096404706)]
- root@bj-magedu-v-study-14:~# docker search centos #不带版本号默认为 latest
[外链图片转存中...(img-VEW8wGHY-1634096404707)]
下载镜像
-
从 docker 仓库将镜像下载到本地命令格式如下:
-
root@bj-magedu-v-study-14:~# docker pull #仓库服务器:端口/项目名称/镜像名称:tag(版本)号
- docker pull apline
- docker pull nginx
- docker pull hello-world
- docker pull centos
-
下载中
[外链图片转存中...(img-lVW0zSlA-1634096404708)]
- 下载完成
[外链图片转存中...(img-x9rHejO9-1634096404709)]
查看本地镜像
- 下载完成的镜像比下载中的镜像大,因为下载完成后会解压
- docekr images
[外链图片转存中...(img-DpY46FN5-1634096404710)]
REPOSITORY #镜像所属的仓库名称
TAG #镜像版本号(标识符,默认为 latest(最新的)
IMAGE ID #镜像唯一 ID 标示
CREATED #镜像创建时间
VIRTUAL SIZE #镜像的大小
镜像导出
- 可以将镜像从本地导出为一个压缩文件,然后复制到其他服务器进行导入使用。
- 导出方法一(写到一个文件,替代标准输出)
- docker save centos -o /opt/centos.tar.gz
[外链图片转存中...(img-q3vzm7Kg-1634096404711)]
- 导出方法二(直接重定向到指定的文件)
- docker save centos > /opt/centos.tar.gz
[外链图片转存中...(img-4F909mUL-1634096404712)]
- 查看镜像内容
[外链图片转存中...(img-0iNwQib1-1634096404713)]
//分层了方便文件的共用,即相同的文件可以共用。
[{"Config":"配置文件.json","RepoTags":["docker.io/centos:latest"],"Layers":["分层1/layer.tar","分层2/layer.tar","分层3/layer.tar"]}]
镜像导入
- 将镜像导入到docker
- docker load < /opt/centos.tar.gz
root@bj-magedu-v-study-14:/opt# scp /opt/centos.tar.gz 192.168.26.27:/opt/
The authenticity of host '192.168.26.27 (192.168.26.27)' can't be established.
ECDSA key fingerprint is SHA256:xSXdC1BVgcAq9ArJQnRXjD2XBMYnnhFFCca3GMXMC14.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.26.27' (ECDSA) to the list of known hosts.
root@192.168.26.27's password:
centos.tar.gz 100% 234MB 109.5MB/s 00:02
root@bj-magedu-v-study-14:/opt#
------------------------------------
[root@centos7 ~]# docker load < /opt/centos.tar.gz
0683de282177: Loading layer [==================================================>] 244.9MB/244.9MB
Loaded image: centos:latest
- 图示
[外链图片转存中...(img-aloMIJ37-1634096404714)]
- 验证镜像(192.168.26.27)
- docker images
[外链图片转存中...(img-I7JQJPT4-1634096404715)]
删除镜像
- docker rmi centos
[外链图片转存中...(img-L7PNpipA-1634096404715)]
总结:企业使用镜像及常见操作
- 搜索
- 下载
- 导出
- 导入
- 删除
命令总结:
- 查看本地镜像
docker images
- 导出本地镜像
docker save centos -o /opt/centos.tar.gz
docker save centos > /opt/centos.tar.gz
- 导入本地镜像
docker load -i /opt/centos.tar.gz
docker load < /opt/centos.tar.gz
- 删除镜像(删除指定ID镜像,通过镜像启动容器的时候镜像不能被删除,除非将容器全部关闭)
docker rmi 镜像ID/镜像名称
- 删除容器
docker rm 容器ID/容器名称 #删除容器
docker rm 容器ID/容器名 -f #强制删除正在运行的容器