anxpp的博客

As they sow , so let them reap .

Docker基础教程——镜像

原文出自:http://blog.csdn.net/anxpp/article/details/52464806

    上一篇文章也说了,镜像是Docker三大核心概念之一。

    Docker运行容器前需要本地存在对应的镜像,如果本地不存在,会尝试从默认(Docker Hub)的镜像仓库获取,也可以配置使用自定义的镜像仓库。

    1、获取镜像

    镜像是Docker的基础,运行容器的前提。

    可以使用命令从网络上下载镜像,命令如下(如果不是Root用户需要在命令前加上sudo命令):

docker pull NAME[:TAG]
    如果不显示的指定TAG,会默认选择latest标签的镜像下载。

    比如要下载一个最新的ubuntu镜像:

docker pull ubuntu
    这里实际上下载的是latest标签的镜像,上面的命令等同于:

docker pull ubuntu:latest
    下载过程会看到镜像文件实际是又多个层组成的,每行最前面的内容就是这层的ID。

    层(Layer)是AUFS(一种联合文件系统)中的重要概念,是实现增量保存于更新的基础。

    如果需要下载指定版本的镜像,可以如下:

docker pull ubuntu:14.04
    如果想从指定的注册服务器的仓库下载镜像,可以像下面这样:

docker pull registry.hub.docker.com/ubuntu:latest
    下载完成后就可以启动了:

docker -t -i ubuntu /bin/bash
    这里的命令后面会解释。

   2、 查看镜像信息

    docker image命令可以列出本地已有的所有镜像:

docker inages
    显示的字段分别表示:

    1、来自于哪个仓库

    2、镜像的标签信息

    3、镜像的唯一ID

    4、创建时间

    5、镜像大小

    其中镜像的ID比较重要,经常会用到。

    标签TAG用于标示同一仓库不同版本的镜像。

    为了使用方便,还可以通过docker tag命令为本地镜像添加新的标签:

docker tag ubuntu:latest ubuntu:newtag
    这时查看镜像列表会多出来一个镜像,但是其ID还是一样的。

    使用docker inspect命令可以获取镜像的详细信息:

docker inspecct 镜像ID
    这里返回的是一个json格式的字符串,如果只想获取其中指定的内容,可以通过-f指定参数:

docker inspect -f {{".Architecture"}} 550
    此时返回的就是Architecture信息。

    任何时候,在指定ID时都可以只指定前几个字符来代替完整的ID字符串,前提是能唯一标示。

   3、 查找镜像

    docker search命令可以搜索远程仓库中的公共镜像,默认为Docker Hub仓库。

    用法为:

docker search TERM
    支持的参数如下:

    1、--automated=false:仅显示自动创建的镜像

    2、--no-trunc=false:输出信息不截断显示

    3、-s, --stars=0:指定仅显示评论为指定星级以上的镜像

    比如要搜索带lamp关键字的镜像:

docker search lamp
    之后返回的信息包括:镜像名字、描述、星级、是否官方创建和是否自动创建等。

    默认的输出结果将按星级排序,官方镜像说明是官方项目组创建和维护的,automated资源允许用户验证镜像的来源和内容。

    4、删除镜像

    可以使用镜像的标签和ID删除镜像。
    命令格式为:

docker rmi IMAGE[IMAGE...]
    IMAGE可以为标签或者ID。

    当同一个镜像有多个标签的时候,docker rmi命令只是删除了该镜像多个标签中指定的标签,并不影响镜像文件。

    如果镜像只剩下一个标签的时候,使用docker rmi命令会彻底删除该镜像。

    如果docker rmi后面跟上ID删除时,会尝试删除该镜像的所有标签后删除镜像文件本身。

    如果要删除逇镜像创建的容器存在时,镜像文件默认试试无法被删除的。如果直接执行删除命令,会提示有容器正在运行(即使容器已经Exit)。但是可以加上参数-f强行删除:

docker rmi -f ID或标签
    不过并不推荐这么做,因为这可能会导致一些遗留问题,如果一定要删除,推荐先删除该镜像的所有容器,然后再删除镜像,如果有容器不能删除,那么这个镜像也不应该直接被删除。

    删除镜像时会输出类似于获取镜像时一样的各层信息。

    5、创建镜像

    创建镜像有三种方式:

    1、基于已有镜像创建

    2、基于本地模板导入

    3、基于Dockerfile文件创建

    其中在大规模应用场景,一般使用第三种方式,所以在此处不会详谈(后续文章会详细介绍),这里主要介绍前两种。

   5.1、 基于已有镜像创建

    该方法主要使用docker commit命令,格式为:

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
    其中的选项:

  • -a、--author="":作者信息
  • -m\--message="":提交消息
  • -p、--pause=true:提交时暂停容器运行。

    下面是一个例子:

docker commit -m "message" -a "anxpp" 容器ID 新的容器TAG 新的容器ID
    之后就可以通过docker images命令查看到创建的容器了。

    5.2、基于本地模板导入

    可以直接从一个操作系统模板文件导入一个镜像。比如OpenVZ提供的模板(http://openvz.org/Download/templates/precreated)

    比如要导入下载好的ubuntu模板为镜像:

cat ubuntu-14.04-x86_64-minimal.tar.gz | docker import - ubuntu:14.04
    然后使用docker images就可以看到镜像了。

    6、镜像的导入导出(文件)

    可能有时候我们想直接导出镜像为文件供其他地方使用,docker提供了这样的功能。

    6.1、导出镜像为文件

    使用docker save命令将镜像保存为文件,如:

docker save -o ubuntu.tar ubuntu:14.04
    6.2、从文件导入镜像

    使用docker load命令将文件导入为镜像,如:

docker load < ubuntu.tar
    此时会导入镜像以及相关的元数据信息,如标签等。

    7、上传镜像

    上传镜像到仓库使用docker push命令,默认会上传到DockerHub官方仓库(需登录),命令格式为docker push NAME[:TAG]。


小结

    镜像是使用Docker的前提,使用过程中可以一边收集一些比较有用的镜像,目前网上流行的镜像仓库已经存在了大量稳定好用的镜像,我们可以拿来即用的。

阅读更多
版权声明:http://blog.csdn.net/anxpp https://blog.csdn.net/anxpp/article/details/52464806
所属专栏: Docker基础教程及实践
想对作者说点什么? 我来说一句

docker入门教程

2017年12月06日 6.27MB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭