关闭

Docker基础教程——镜像

标签: Docker镜像DockerDocker镜像命令
1266人阅读 评论(0) 收藏 举报
分类:

原文出自: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的前提,使用过程中可以一边收集一些比较有用的镜像,目前网上流行的镜像仓库已经存在了大量稳定好用的镜像,我们可以拿来即用的。

2
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

如何创建一个安全的Docker基础镜像

想创建安全,体积小的Docker镜像,看文章内容您就知道了!
  • sisiy2015
  • sisiy2015
  • 2016-03-17 14:57
  • 3884

Docker入门实践(四) 打造自己的开发环境镜像

许多Docker镜像都是开箱即用的,但有时候却并不一定满足我们的需求,比如,你直接从Docker Hub拉取的tomcat 使用的Java VM是Open JDK,但通常我们需要使用Oracle JD...
  • pzoozq
  • pzoozq
  • 2016-09-08 12:43
  • 7426

Docker基础镜像-从iso到image

操作系统:centos 6.5及以上 一、安装: 1、配置epel源:  yum install -y yum-priorities && rpm -ivh http://dl.fedorapr...
  • S1234567_89
  • S1234567_89
  • 2016-02-19 15:42
  • 8262

创建自定义的docker 基础镜像

制作docker 基础镜像
  • wennuanddianbo
  • wennuanddianbo
  • 2017-07-06 17:57
  • 346

一种docker基础镜像制作方法

一种docker基础镜像制作方法
  • hjh00
  • hjh00
  • 2016-05-17 17:27
  • 4378

docker 实战---安装一个基础镜像 (一)

泡了几天官网,对docker有了一点了解。准备着手搭建一个公司的开发测试环境,包括java、python。 一、环境介绍 首先说明一下我的环境 2台物理服务器(后面简称主机) 主机A的配置如下: [r...
  • qcpm1983
  • qcpm1983
  • 2014-08-22 10:19
  • 6476

Docker学习笔记(2)--Docker常用命令

1. 查看docker信息(version、info) # 查看docker版本 $docker version # 显示docker系统的信息 $docker info 2. 对im...
  • we_shell
  • we_shell
  • 2014-08-04 14:00
  • 35711

docker镜像详解 docker命令详解

这篇文章希望能够帮助读者深入理解Docker的命令,还有容器(container)和镜像(image)之间的区别,并深入探讨容器和运行中的容器之间的区别。  当我对Doc...
  • u010098331
  • u010098331
  • 2016-12-06 12:20
  • 1933

Docker常用命令

又把官方文档过了一遍,总结一下常用命令 镜像管理 docker images:列出本地所有镜像 docker search :查找image docker pull :下载image doc...
  • zhang__jiayu
  • zhang__jiayu
  • 2015-01-11 15:45
  • 49473

常用docker命令,及一些坑

常用docker命令,及一些坑 常用命令 查看容器的root用户密码 docker logs 2>&1 | grep '^User: ' | tail -n1 因为do...
  • wsscy2004
  • wsscy2004
  • 2014-05-15 11:11
  • 126386
    个人资料
    • 访问:743252次
    • 积分:5450
    • 等级:
    • 排名:第5716名
    • 原创:96篇
    • 转载:1篇
    • 译文:0篇
    • 评论:290条
    博客专栏
    其他信息