Docker的镜像管理

1,817 阅读4分钟

Docker的镜像管理命令

搜索镜像

 格式:docker search 关键字(镜像名称或仓库名)
 docker search nginx        #搜索nginx的镜像
 docker search clearlinux   #搜索指定仓库clearlinux中的镜像

image.png

image.png

image.png

获取镜像(下载镜像)

 格式:docker pull 镜像名称[:标签]
 #如果下载镜像时不指定标签,则默认会下载仓库中最新版本的镜像,即选择标签为 latest 的镜像。
 
 docker pull nginx   #下载nginx镜像

image.png

image.png

查看当前已下载镜像

镜像下载后存放在 /var/lib/docker

image.png

查看下载到本地的所有镜像 docker images

字段注释
REPOSITORY镜像属于的仓库
TAG镜像的标签信息,标记同一个仓库中的不同镜像
IMAGE ID镜像的唯一ID 号,唯一标识一个镜像
CREATED镜像创建时间
VIRTUAL SIZE镜像大小

image.png

image.png

image.png

image.png

镜像快速下载

由于官方的镜像源在国外,所以下载速度慢。所以通过从国内的镜像源获取实现加速。

image.png

阿里云网页地址:阿里云登录页 (aliyun.com)

  1. 点击左上角三条杠,选择容器镜像服务 image.png image.png

  2. 点击镜像加速器,按要求配置镜像加速器 image.png image.png

  3. 在/etc/docker下,按指示操作 image.png image.png image.png

  4. docker info查看 image.png

查看镜像的详细信息( 获取容器/镜像的元数据 )

格式:docker inspect 镜像ID号/容器ID  
根据镜像的唯一标识 ID 号,获取镜像详细信息

image.png

内容解析

image.png

image.png

镜像层解释

镜像层数量可能会很多,所有镜像层会联合在一起组成一个统一的文件系统。如果不同层中有一个相同路径的文件,比如/a,上层的/a会覆盖下层的/a,也就是说用户只能访问到上层中的文件/a。在容器层中,用户看到的是一个叠加之后的文件系统。

文件操作说明
添加问价在容器中创建文件时,新文件被添加到容器层中
读取文件在容器中读取某个文件时,docker会从上往下依次在各个镜像层中查找此文件
修改文件在容器中修改已存在的文件时,docker会从上往下依次在各镜像层中查找此文件。一旦找到,立即将其复制到容器层,然后修改
删除文件在容器中删除文件时,docker也会从上往下依次在镜像层中查找此文件,找到后,会在容器层中记录此删除操作,(只是记录删除操作)
  • 容器层记录对镜像的修改,所有镜像层都只是只读的,一会对容器修改,所有镜像可以被多个容器共享

为本地的镜像添加新的标签

添加标签后,镜像的ID号并不会改变。

 格式docker tag 名称:[标签] [仓库名/]名称:[新标签]

 示例:
 docker tag nginx:latest mynginx:1.23       #为nginx镜像添加web标签
 docker tag nginx:latest 仓库名/mynginx:1.23   #为镜像添加库标识,方便上传到官方仓库,因为上传镜像时必须指定仓库
 docker images | grep nginx

image.png

删除镜像

注意:如果该镜像已经被容器使用,正确的做法是先删除依赖该镜像的所有容器,再去删除镜像。

 格式
docker rmi 镜像名:标签   #删除指定标签
docker rmi 镜像ID -f     #删除指定镜像 

image.png

  • 当一个镜像有多个镜像名时,删除一个等于删除该镜像标签 image.png

  • 当一个镜像有多个镜像名时,根据镜像ID能全删除(必须使用强制删除) image.png

批量删除镜像

 docker images        #查看本地所有镜像
 docker images -q     #查看本地有哪些镜像,只显示镜像ID
 docker rmi $(docker images -q) -f    #批量删除本地所有镜像

image.png

导出镜像

将镜像保存成为本地文件,实际是将镜像打包成一个tar包。

 格式:docker save -o 存储文件名 存储的镜像
 docker save -o mynginx.tar nginx:latest     #打包镜像命名为mynginx.tar存在当前目录下
 ls -lh

image.png

载入镜像

 格式:
 docker load < 导出的文件
 或者
 docker load -i 导出的文件

image.png

image.png

image.png

上传镜像

默认上传到 docker Hub 官方公共仓库,需要注册使用公共仓库的账号,hub.docker.com 。默认上传到公有仓库,其他人可以下载仓库中的镜像。如果想设置成私有仓库(仅自己可见),不允许其他人下载,需要付费。

可以使用 docker login 命令来输入用户名、密码和邮箱来完成注册和登录。docker logout 命令进行登出。

在上传镜像之前,还需要先对本地镜像添加新的标签,在镜像名称前加上仓库名,然后再使用 docker push 命令进行上传。

 docker tag nginx:1.14 jie675010376/mynginx:jj  #添加新的标签,在镜像名称前加上仓库名,jie9020536为仓库名称

 docker login            #登录公共仓库
  Username:  #账号
  password:  #密码
  
 docker push jie675010376/mynginx:jj   #向上推送

image.png

image.png

image.png

image.png

image.png

之后通过docker pull jie675010376/mynginx:jj,就能获取该镜像

总结

docker 是什么?
是go语言开发的开源的容器引擎
是在容器里运行应用的工具,可以看作是一种轻量级的“虚拟机”
可以实现容器应用的一次封装,到处运行

docker容器    和             虚拟机  区别
共享宿主机内核                拥有独立的操作系统内核
启动速度快,秒级              分钟级
性能接近原生,几乎无损耗       通过hypervisor对主机进行访问,会多占用一些资,性能源弱于容器,最多损耗50% 
单机容量成百上千个             几十个
namespace资源隔离,cgroup资源限制   完全隔离

namespace:UTS(主机名,域名)    IPC(信息量,消息队列和共享内存)    PID(进程编号)     NOUNT(挂载点)     NETWORK(网络设备,网络栈,端口)      USER(用户)
cgroup :容器能够使用的资源的上限


物理机    裸金属
虚拟机   VMware     Workstation(个人级)     VMware  Sphere+ESXL(企业级)    KVM(基于Linux内核)    OpenStack(基于KVM)    公有云/专有云/混合云
容器   docker   podman   rocker   containerd
容器编排   K8S    docker swarm

docker核心概念:
镜像:创建容器的基础,就是一个可执行的压缩包,是一个只读模板,包含运行应用程序所需要的所有资源
容器:基于镜像创建的运行实例,容器间相互隔离
仓库:用于集中存放镜像的地方,可分为公有仓库和私有仓库

docker 管理镜像的命令

命令含义
docker search <仓库/镜像名>搜索镜像
docker pull <仓库/镜像名>下载镜像
docker images查看本地的所有镜像
docker images -q只显示本地所有镜像的ID号
docker inspect <镜像ID/容器ID>查看镜像的详细信息( 获取镜像/容器的元数据 )
docker tag 名称:[标签] [仓库名/]名称:[新标签]为本地的镜像添加新的标签
docker rmi < 镜像名称:标签>删除镜像的某个标签
docker rmi <镜像ID> -f删除指定镜像
docker rmi $(docker images -q)删除本地所有镜像
docker save -o 镜像文件.tar 镜像名称:标签存出镜像:将镜像保存为本地文件
docker load -i[或<] 镜像文件载入镜像:将镜像文件导入到镜像库中
docker login登录公共仓库docker hub
docker push 仓库名/镜像名:标签上传镜像(将镜像上传到官方仓库)
docker logout登出docker hub