zoukankan      html  css  js  c++  java
  • Docker镜像

    Docker镜像

    镜像和容器

    • 通常使用 docker container run 和 docker service create 命令从某个镜像启动一个或多个容器。
    • 一旦容器从镜像启动后,二者之间就变成了互相依赖的关系,并且在镜像上启动的容器全部停止之前,镜像无法被删除。尝试删除镜像而不停止或摧毁使用它的容器,会导致出错。
    • 镜像中不包含内核[容器共享所在Docker主机的内核][容器仅包含必要的操作系统(通常只有操作系统文件和文件系统镜像)]
    • Docker官方镜像Alpine Linux大约只有4MB
    • Ubuntu官方Docker镜像大约有110MB

    拉取镜像

    • 通过 docker image pull 下载镜像
    • 镜像从远程镜像仓库服务的仓库中下载
    • 默认情况下,镜像会从Docker Hub的仓库中拉取
    • docker image pull apline:lastest 命令会从Docker Hub的apline仓库中拉取标签为lastest的镜像
    • Linux Docker 主机本地镜像仓库通常位于 /var/lib/docker/
    • 查看Docker主机的本地仓库中是否包含镜像 docker image ls
    sudo docker image ls
    REPOSITORY                                           TAG                 IMAGE ID            CREATED             SIZE
    test                                                 biby                770e57d63685        44 hours ago        73.1MB
    <none>                                               <none>              22e658fe9fb5        2 days ago          5.57MB
    ubuntu                                               latest              adafef2e596e        4 months ago        73.9MB
    alpine                                               3.8                 c8bccc0af957        9 months ago        4.41MB
    

    镜像仓库服务

    • Docker镜像存储在镜像仓库服务(Image Registy)中
    • Docker客户端的镜像仓库服务是可配置的,默认使用Docker Hub
    • 镜像仓库服务包含多个镜像仓库(Image Repository)。同样,一个镜像仓库中可以包含多个镜像。
    • 下图展示了包含3个镜像仓库的镜像仓库服务,其中每个镜像仓库都包含一个或多个仓库

    镜像命名和标签

    • 只需要给出镜像的名称和标签,就能在官方仓库中定位一个镜像(采用":"分隔)
    • 从官方仓库拉取镜像,docker image pull
      命令格式 docker image pull :
    //拉取Apline镜像
    docker image pull apline:latest
    //拉取ubuntu镜像
    docker image pull ubuntu:latest
    //从官方仓库拉取不同的镜像
    # 从官方Mongo库拉取标签为3.3.11的镜像
    docker image pull mongo:3.3.11
    # 从官方Redis库拉取标签为latest的镜像
    docker image pull redis:latest
    # 从馆藏Apline库拉取标签为latest的镜像
    docker image pull apline
    
    • 如果没有在仓库名称后指定具体的镜像标签,则Docker会默认拉取标签为latest的镜像
    • 从非官方仓库拉取镜像,需要再仓库名称前面加上Docker Hub的用户名或者组织名称
    //从 biby-dev 仓库中拉取test镜像,镜像的拥有者是Docker Hub账号biby
    docker image pull biby/ biby-dev:test
    
    • 如果希望从第三方镜像仓库服务获取镜像,则需要在镜像仓库名称前加上第三方镜像仓库服务的DNS名称
    • 为镜像打多个标签
      • 一个镜像可以根据用户需要设置多个标签
      • 标签是存放在镜像元数据中的任意数字或字符串

    镜像命令

    docker image pull

    • -a参数拉取仓库中的全部镜像
    docker image pull -a 
    

    docker image ls

    • Docker提供 --filter 参数来过滤镜像列表内容,过滤器参数如下
      • dangling: true-仅返回悬虚镜像 false-非悬虚镜像
      • before: 需要镜像名称或者ID作为参数,返回在之前被创建的全部镜像
      • since: 需要镜像名称或者ID作为参数,返回在指定镜像之后被创建的全部镜像
      • label: 根据标注(label)的名称或值,对镜像进行过滤。
      • reference[使用reference完成过滤并显示标签为 latest 的示例]
    docker image ls --filter=reference=":latest"
    
    • --format 通过Go模板对输出内容进行格式化
    //返回Docker主机上镜像大小属性
    sudo docker image ls --format "{{.Size}}"
    73.1MB
    6.35MB
    5.57MB
    5.57MB
    73.9MB
    4.41MB
    153MB
    
    • 返回全部镜像,只显示仓库、标签和大小信息
    sudo docker image ls --format "{{.Repository}}:{{.Tag}}:{{.Size}}"
    test:biby:73.1MB
    <none>:<none>:6.35MB
    <none>:<none>:5.57MB
    alpine:latest:5.57MB
    ubuntu:latest:73.9MB
    alpine:3.8:4.41MB
    
    • 没有标签的镜像被称为悬虚镜像,在列表中展示为:
      通常出现这种情况,是因为构建了一个新镜像,然后为该镜像打了一个已经存在的标签
      当出现这种请款,Docker会构建新镜像,移除旧镜像上的标签,然后将该标签标在新镜像上
    • 返回dangling(悬虚)镜像
    sudo docker image ls --filter dangling=true
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    <none>              <none>              d55505601cd9        2 days ago          52MB
    <none>              <none>              c06479ecec24        2 days ago          52MB
    <none>              <none>              b490b1827703        2 days ago          6.35MB
    <none>              <none>              675517fdd918        2 days ago          5.57MB
    <none>              <none>              22e658fe9fb5        2 days ago          5.57MB
    <none>              <none>              3bd1999bbd5a        2 days ago          153MB
    

    docker image build

    用于构建镜像
    

    docker image rm [镜像ID]

    • 删除镜像
    • 从Docker主机中删除镜像[rm是remove的缩写]
    • 如果被删除的镜像上存在运行状态的容器,那么删除操作不会被允许。
    • 删除Docker主机上所有镜像
      docker image rm [当前系统全部镜像ID]
    docker image rm $(docker image ls -q) -f
    

    docker image prune

    用于移除全部悬虚镜像
    
    • -a 添加-a参数,额外移除没有被使用的镜像(没有被任何容器使用的镜像)
    • 通过CLI方式搜索Docker Hub
    • docker search命令允许通过CLI方式搜索Docker Hub
    • 可以通过NAME字段的内容进行匹配,并且基于返回内容中任意列的值进行过滤
    • 简单模式下,该命令会搜索所有“NAME”字段中包含特定字符的仓库
    //查找所有“NAME”包含“biby”的仓库
    sudo docker searchbiby
    NAME                DESCRIPTION         STARS               OFFICIAL            AUTOMATED
    
    • "NAME"字段是仓库名称,包含了Docker ID,或者非官方仓库的组织名称
    //列出所有仓库名称中包含“apline”的镜像
    sudo docker search alpine
    NAME                                   DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
    alpine                                 A minimal Docker image based on Alpine Linux…   6911                [OK]
    mhart/alpine-node                      Minimal Node.js built on Alpine Linux           475
    anapsix/alpine-java                    Oracle Java 8 (and 7) with GLIBC 2.28 over A…   454
    
    • 通过参数过滤控制返回内容仅显示官方镜像 --filter "is-official=true"
    sudo docker search alpine --filter "is-official=true"
    NAME                DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
    alpine              A minimal Docker image based on Alpine Linux…   6911                [OK]
    
    • 仅显示自动创建的仓库
    sudo docker search alpine --filter "is-automated=true"
    NAME                                   DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
    anapsix/alpine-java                    Oracle Java 8 (and 7) with GLIBC 2.28 over A…   454                                     [OK]
    frolvlad/alpine-glibc                  Alpine Docker image with glibc (~12MB)          249
    
    • docker search 默认只返回25行结果,可以通过制定 -limit 参数增加返回内容的行数,最多为100行。

    镜像和分层

    • Docker镜像由一些松耦合的只读镜像层组成
    • Docker负责堆叠这些镜像层,并且将它们表示为单个统一的对象
    • 查看镜像分层
    docker image inspect ubuntu:latest
    

    • 查看镜像构建历史记录
    docker history
    
    • 所有Docker镜像都起始于一个基础镜像层,当进行修改或增加新内容时,就会在当前镜像层之上,创建新的镜像层。
    • eg,假如基于 Ubuntu Linux 16.04 创建一个新的镜像,这就是新镜像的第一层;如果在该镜像中添加 Python 包,就会在基础镜像层之上创建第二个镜像层;如果继续添加一个安全补丁,就会创建第三个镜像层。
    • 在添加额外的镜像层的同时,镜像始终保持是当前所有镜像的组合。下图中举了一个简单的例子,每个镜像层包含 3 个文件,而镜像包含了来自两个镜像层的 6 个文件。

    共享镜像层

    • 镜像分层
    • 镜像共享层
    • 写时复制(CoW)
    • 内容寻址存储模型
      *查看镜像摘要
    docker image ls --digests
    
    • 镜像散列值(摘要)
      内容散列
    • 多层架构的镜像
  • 相关阅读:
    layui 动态设置radio选中
    C# ling 查询 in 用法
    sql 去除小数点后面无效的0
    VUE 全局变量申明和取值
    SQL 逗号分隔将一行拆成多行
    devexpress 延长试用期 licenses.licx
    BugkuCTF-WEB4
    一招破解网页复制+网页上如何实现禁止复制粘贴
    JS的函数
    JS的数组
  • 原文地址:https://www.cnblogs.com/biby/p/14006576.html
Copyright © 2011-2022 走看看