Docker入门之二镜像

Docker大部分的操作都是围绕三大核心概念:镜像、容器、仓库。学Docker首先得了解这几个词。这几个词可能平时也会有涉及,但Docker中可能不是同样得概念。

一、三大核心概念

镜像:可能在安装软件操作系统的时候可能会用到镜像,Docker中的镜像也操作系统镜像文件类似,可以理解成是一个模板,这个有点类似手机app应用。

容器:容器就是用来装东西的,Docker中容器用来装什么呢,它用来装由镜像创建的应用运行实例。这个有点类似手机中的沙盒,每个手机app都用自己的运行环境,不受其他app的影响。

仓库:仓库也是用来存放东西的,它是一种静态的,存放的是镜像文件,而容器是一种动态的,运行的是镜像。这个有点类似app store,用户可以从仓库中下载app安装到手机中,手机中每个应用都是一个沙盒环境。

三大核心一篇博客是写不完的,一个一个的来,今天先学习下镜像image。首先在学习Docker时如果有的地方比如参数什么的不知道了,我们可以通过help来熟悉,比查其他的资料书快多了。如果我们不知道怎么用了,我们可以先通过docker --help来获取大的知识点,然后找到对应的小的知识点,然后再help,而且英文注释也不是很难。

二、镜像

Docker运行容器前需要本地存放有对应的镜像,如果镜像没有,会存默认的仓库下载,既然是默认仓库那肯定是公共的,当然也可以自定义自己私有的镜像仓库。

1.获取镜像

使用镜像首先得获取镜像,使用pull来拉取镜像文件到本地。使用它还是先看help。可以看到它得格式和一些参数说明。

docker pull --help

下图是使用pull来获取hello-world镜像。tag是取最新得。

2.查看镜像

使用docker images --help来查看格式和参数说明

下面截图中使用了-a、--digests、--no-trunc -q

 3.使用tag添加镜像标签 还是先help

这里我还是使用hello-world镜像,给它一个标签myhello-world,可以留意下它们两个的id,其实它们指向同一个镜像,只是给它起了个别名。

4.使用inspect查看详细信息,还是老套路,看help

通过inspect查看hello-world的信息

5.使用history查看镜像历史记录

第一步还是通过help查看格式和参数

下面使用history查看hello-world的记录

 6.镜像查找

可以使用search来查找镜像,还是help来查看格式和参数

下图是查找hello-world 镜像,这个查找stars>3的

7.删除镜像

还是先看help,使用rmi时,如果通过标签删除镜像时,如果该镜像只有一个标签,那在删除标签之后也会把该镜像也删除,如果有多个标签那只删除对应的标签,如果通过ID删除,如果该镜像创建的容器存在是镜像文件无法删除,其次会尝试删除所有指向该镜像的标签,然后删除该镜像文件本身。

  1. 使用标签删除镜像

    下面删除了myhello_world的镜像,然后查看镜像列表,发现只有hello-world了。

             

       2.使用镜像ID删除镜像

    下图可以看到,我想通过id删除镜像hello-world时,有一个错误,说不能删除,因为这个镜像在被容器8a2faee3dfa4使用,使用ps查看容器,还真有一个容器id是这个。

    

    

    那直接删除镜像不行,该怎么正确删除呢?我们可以先删除依赖镜像的所有容器,然后再来删除镜像。

    

    上图尝试删了几次,一直提示有冲突,把所有与它依赖的容器删完了,才能删除镜像,这确实有点麻烦,其实可以使用-f参数强制删除,不过这中太暴力了。

8.创建镜像

  还是通过help来查看格式以及参数

  

  1. 基于已有镜像的容器创建
    首先查看下容器记住容器id,然后使用commit提交并将镜像id设置为cuiywhelloworld.
  2. 基于本地模板导入
    还是通过help来查看格式和参数

    这里没找到合适的模板就没做实验。暂留着,或者有没有朋友给提供一个能在window下使用的模板。

9.存出和载入镜像

  1. 存出镜像
    可以使用save来存出镜像 通过-o来指定路径
  2. 载入镜像
    可以使用load来载入镜像
  3. 实验
    下图是我先导出镜像hello-world到E盘,导出后可以在E:docker下看到helloworld.tar文件,然后又将tar镜像压缩文件导入

10.上传镜像
  有pull拉就有push推,使用push可以提交镜像
  

  这里先将cuiywhelloworld添加一个新的标签cuiyw/helloworld,然后通过push cuiyw/helloworld来提交,不过好尴尬,提交请求被拒,失败了。有没有老司机可以直接提交到公共仓库的,等学到仓库得时候再提交试一试。

  

三、总结

花了昨晚一个晚上加今天一天的时间终于把镜像这块大致学了一下,内容蛮多的,可能截图毕竟多,文字毕竟少,还是方法,按照一定的套路来学,也能很快上手,最重要的还是help。

原文地址:https://www.cnblogs.com/5ishare/p/7577316.html