zoukankan      html  css  js  c++  java
  • Docker系列教程01-使用Docker镜像

    docker系列导读

    一文带你读懂什么是docker

    Docker安装部署

    10张图带你深入理解Docker容器和镜像

    前言

    学习Docker,我们需要掌握它的三大核心概念:镜像容器仓库

    今天先带大家学习Docker镜像相关的基础知识。

    Docker镜像简介

    1、什么是镜像?

    Docker镜像是一个只读的模板。如果读者之前是VM管理员,则可以把Docker镜像理解为VM模板,如果您是一名研发人员,可以将镜像理解为(class)。

    简单说,Docker镜像是一个不包含系统内核而又精简的操作系统。

    例如:一个镜像可以包含一个基本的 ubuntu 操作系统环境,里面仅安装了 Nginx 应用程序。可以把它称为Nginx镜像。

    2、镜像从哪里来的?

    Docker Hub是由Docker公司负责维护的公共注册中心,包含大量的容器镜像,Docker工具默认从这个公共镜像库下载镜像。

    下载nginx镜像

    镜像管理命令

    我们先列出镜像相关的命令

    1、搜索镜像

    docker search 语法
    例如,搜索mysql相关的镜像,命令如下:
    

    2、下载镜像

    docker pull 语法

    通常情况下, 描述一个镜像需要包括“名称标签“信息。

    比如下载Ubuntu 18.04系统镜像,命令如下:

    若不指定标签,则默认会选择latest标签。测试如下:

    在这里特别强调下,不要被latest的字面意思“最新的”所误解了,它只是这个资源库的拥有者约定这样,没有附加作用,更不会自动更新。举个例子,我可以轻易把一个过时的镜像打上latest标签,实验如下:

    # docker images web_repo
    REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
    web_repo              1.0                 2e9f372f03a0        44 seconds ago      2.433 MB
    web_repo              latest              2e9f372f03a0        44 seconds ago      2.433 MB
    web_repo              0.9                 4986bf8c1536        2 weeks ago         2.433 MB
    # docker tag -f web_repo:0.9 web_repo:latest
    # docker images web_repo
    REPOSITORY          TAG                 IMAGE ID            CREATED              VIRTUAL SIZE
    web_repo              1.0                 2e9f372f03a0        About a minute ago   2.433 MB
    web_repo              0.9                 4986bf8c1536        2 weeks ago          2.433 MB
    web_repo              latest              4986bf8c1536        2 weeks ago          2.43
    

    这里带latest标签的镜像与0.9版本的镜像是一样的,都是两周前的版本,然而1.0的镜像是一分钟以前的。此时带有latest标签的镜像还是最新版本吗?

    3、查看镜像

    1)使用images 命令列出本地镜像列表

    解释列出的字段信息:

    • REPOSITORY

    说明镜像来自哪个仓库,比如 ubuntu 表示ubuntu 系列的基础镜像

    • TAG

      镜像的标签信息,人为标识镜像的不同版本

    • IMAGE ID

    镜像的ID,用来唯一标识镜像,如果两个镜像ID相同,表示它们指向同一个镜像,只是标签名称不同而已

    • CREATED

      镜像最后更新的时间

    • SIZE

      镜像大小

    2)使用inspect命令查看镜像详细信息

    只展示部分

    上图返回的是一个JSON格式,内容包括镜像制作者、适应架构、各层的数字摘要等。如果只要其中一项内容时,可使用-f指定,例如,获取镜像的创建时间:

    3)使用history命令查看镜像历史

    docker pull 下载镜像时也我们发现了镜像文件由多个层组成,可以使用history子命令列出各层的创建信息。例如,查看Ubuntu:18.04镜像的创建过程,命令如下:

    注意:由于CREATED BY部分命令过长,被自动截断了,可使用--no-trunc选项输出完整命令。

    4、为镜像添加标签

    docker tag 语法
    为ubuntu:latest镜像添加一个新标签:myubuntu:v1
    

    5、删除镜像

    docker rmi 语法

    1)使用标签删除镜像

    [root@qll251 ~]# docker rmi myubuntu:v1
    Untagged: myubuntu:v1
    

    当同一个镜像拥有多个标签时,docker rmi命令只是删除该镜像的一个标签副本,并不影响镜像文件。

    2)使用镜像ID删除镜像

     docker rmi 命令后跟镜像ID的前缀即可匹配删除
    

    如果出现以下情况:

    仔细观察,发现005d2078bdfa这个镜像id指向了两个repository,因此无法删除。

    此时我们可以依次删除该镜像对应的标签即可删除,或者使用-f参数强制删除,命令如下:

    3)清除镜像

    使用Docker一段时间后,系统中可能会遗留一些临时镜像文件,以及一些未被使用的镜像,可以通过docker image prune命令进行清理。

    docker image prune 语法

    例如, 如下命令会自动清理临时的遗留镜像文件层, 最后会提示释放的存储空间:

    [root@qll251 ~]# docker image prune -f
    Total reclaimed space: 1.6 GB
    

    6、存出和载入镜像

    1、存出镜像

    docker save 语法

    例如,导出ubuntu:18.04镜像为本地文件ubuntu:18.04.tar,代码如下:

    [root@qll251 ~]# docker save -o /data/ubuntu:18.04.tar ubuntu:18.04
    [root@qll251 ~]# ls /data
    ubuntu:18.04.tar
    
    

    - o参数:表示导出镜像到指定的文件中。

    2、载入镜像

    可使用docker load将导出的tar文件再次导入到本地镜像库。语法格式如下:

    docker laod 语法

    例如,将ubuntu:18.04.tar文件导入本地镜像库,代码如下:

    注意:使用docker load导入的镜像将保留所有的镜像历史记录和元数据信息。后续会我们会在容器章节中与docker load做对比。

    7、上传镜像

    使用docker push命令默认将镜像上传到Docker Hub官方仓库(需要登录)。命令格式如下:

    docker push 语法

    例如,将本地的myubuntu:v1镜像上传至官方仓库。代码如下:

    1、为 待上传的镜像打上标签
    [root@qll251 ~]# docker tag ubuntu:18.04 qinlulu/myubuntu:v1
    
    2、登录到Docker Hub(没有账号的需在官网注册)
    [root@qll251 ~]# docker login
    Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
    Username: qinlulu
    Password:
    WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
    Configure a credential helper to remove this warning. See
    https://docs.docker.com/engine/reference/commandline/login/#credentials-store
    
    Login Succeeded
    
    3、上传镜像
    [root@qll251 ~]# docker push qinlulu/myubuntu:v1
    The push refers to repository [docker.io/qinlulu/myubuntu]
    28ba7458d04b: Pushed
    838a37a24627: Pushed
    a6ebef4a95c3: Pushed
    b7f7d2967507: Pushed
    v1: digest: sha256:b58746c8a89938b8c9f5b77de3b8cf1fe78210c696ab03a1442e235eea65d84f size: 1152
    

    Docker Hub官网地址:

    https://hub.docker.com

    登录后,验证镜像已上传:

    本章命令小结

    1、搜索镜像

    docker search mysql

    2、下载镜像

    docker pull ubuntu:18.04

    3、列出本地镜像列表

    docker images

    4、查看镜像详细信息

    docker inspect ubuntu:18.04

    5、查看镜像历史信息

    docker history ubuntu:18.04

    6、为镜像添加标签

    docker tag ubuntu:latest myubuntu:v1

    7、删除镜像

    docker rmi myubuntu:v1

    8、清除临时镜像文件

    docker image prune -f

    9、存出镜像

    docker save -o ubuntu.tar ubuntu:18.04

    10、载入镜像

    docker load -i ubuntu.tar

    11、上传镜像

    docker push qinlulu/myubuntu:v1

    十年磨一剑
  • 相关阅读:
    ZKEACMS 的两种发布方式
    一步一步教你如何制件 ZKEACMS 的扩展组件/插件
    三张图片看懂ZKEACMS的设计思想
    ZKEACMS 模板组件扩展
    ZKEACMS 如何使用组件自定义样式/编辑样式
    关于简单的Excel多页签底层导出_电子底账导出为例(.net core)
    Javascript中,数学方法可以分成以下几类: constans(常数)、power functions(乘方函数)、trigonometic functions(三角函数)、rounding functions(舍入函数)、random numbers(随机数字)
    AutoCAD.Net/C#.Net QQ群:193522571 对字符串进行四则运算
    AutoCAD.Net/C#.Net QQ群:193522571 利用反射将父类中的属性传递到子类中,实测效率不高
    AutoCAD.Net/C#.Net QQ群:193522571 将DataTable集合 B加入到DataTable A中,应用于两个或以上的只有单行数据的无主键的datatable的合并 Merge
  • 原文地址:https://www.cnblogs.com/qinlulu/p/13204800.html
Copyright © 2011-2022 走看看