Docker(Ⅲ)-docker镜像管理

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 #强制删除正在运行的容器
点赞

发表回复

电子邮件地址不会被公开。必填项已用 * 标注