Docker的命令之镜像管理 Image

一、Docker 容器概念

我们都知道,操作系统分为内核和用户空间。对于 Linux 而言,内核启动后,会挂载 root 文件系统为其提供用户空间支持。而 Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:14.04 就包含了完整的一套 Ubuntu 14.04 最小系统的 root 文件系统。

Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。

二、分层存储

因为镜像包含操作系统完整的 root 文件系统,其体积往往是庞大的,因此在 Docker 设计时,就充分利用 Union FS 的技术,将其设计为分层存储的架构。所以严格来说,镜像并非是像一个 ISO 那样的打包文件,镜像只是一个虚拟的概念,其实际体现并非由一个文件组成,而是由一组文件系统组成,或者说,由多层文件系统联合组成。

镜像构建时,会一层层构建,前一层是后一层的基础。每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层。比如,删除前一层文件的操作,实际不是真的删除前一层的文件,而是仅在当前层标记为该文件已删除。在最终容器运行的时候,虽然不会看到这个文件,但是实际上该文件会一直跟随镜像。因此,在构建镜像的时候,需要额外小心,每一层尽量只包含该层需要添加的东西,任何额外的东西应该在该层构建结束前清理掉。

分层存储的特征还使得镜像的复用、定制变的更为容易。甚至可以用之前构建好的镜像作为基础层,然后进一步添加新的层,以定制自己所需的内容,构建新的镜像。关于镜像的构建可参考:Docker中的镜像构建

三、docker image 的命令预览

Usage:    docker image COMMAND

Manage images

Options:
      --help   Print usage

Commands:
  build       Build an image from a Dockerfile
  history     Show the history of an image
  import      Import the contents from a tarball to create a filesystem image
  inspect     Display detailed information on one or more images
  load        Load an image from a tar archive or STDIN
  ls          List images
  prune       Remove unused images
  pull        Pull an image or a repository from a registry
  push        Push an image or a repository to a registry
  rm          Remove one or more images
  save        Save one or more images to a tar archive (streamed to STDOUT by default)
  tag         Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE

Run 'docker image COMMAND --help' for more information on a command.
# 可以使用 docker image COMMAND --help ,继续查看使用说明。

四、详细介绍

在介绍下面的命令之前,先了解下快捷命令中 docker search :从 docker hub 中搜索 image .

常用的用法:docker search KEYWORDS 、docker search KEYWORDS –limit 100

pull
等同于 docker pull
从远程拉取镜像到本地。
例如:docker image pull sameersbn/redis
例如:docker image pull centos
push
等同于 docker push
ls
等同于 docker images
列出本地镜像。
例如:docker image ls
例如:docker image ls centos
inspect 查看镜像某个Tag的详情,省略Tag显示最新Tag的镜像信息。
例如:docker image inspect sameersbn/redis
例如:docker image inspect centos:5.11
例如:docker image inspect 1a55edc160ee
history 查看镜像某个Tag提交历史,省略Tag显示最新Tag的镜像提交历史。
例如:docker image history centos:5.11
rm
等同于 docker rmi
删除本地镜像.
例如:docker image rm 1ae98b2c895d
例如:docker image rm centos,只删除最新的。
例如:docker image rm $(docker image ls -q) ,删除所有镜像(仅是未被使用的,如果镜像已被使用,则无法删除)
build
等同于 docker build
 格式:docker build [OPTIONS]  PATH | URL | -1、使用 dockfile 构建
例如:docker build -t centos7:v1  ./
注:在该例子中 ./ 表示传入Dockfile 的路径,在 Dockfile 中的add copy等操作,都是相对于该路径。

2、使用 github 构建
例如:docker build https://github.com/twang2218/gitlab-ce-zh.git:#9.2
注:# 符号后的字符,表示目录。例子中表示/9.2/目录下的 Dockfile 文件构建。

3、标准输入中读取 Dockerfile 进行构建
例如:docker build ./ < ./Dockerfile 或 cat ./Dockerfile | docker build ./Tips 1:尽管有多种构建方式,推荐使用第一种.

–build-arg=[] :设置镜像创建时的变量;
–cpu-shares :设置 cpu 使用权重;
–cpu-period :限制 CPU CFS周期;
–cpu-quota :限制 CPU CFS配额;
–cpuset-cpus :指定使用的CPU id;
–cpuset-mems :指定使用的内存 id;
–disable-content-trust :忽略校验,默认开启;
-f :指定要使用的Dockerfile路径;
–force-rm :设置镜像过程中删除中间容器;
–isolation :使用容器隔离技术;
–label=[] :设置镜像使用的元数据;
-m :设置内存最大值;
–memory-swap :设置Swap的最大值为内存+swap,”-1″表示不限swap;
–no-cache :创建镜像的过程不使用缓存;
–pull :尝试去更新镜像的新版本;
-q :安静模式,成功后只输出镜像ID;
–rm :设置镜像成功后删除中间容器;
–shm-size :设置/dev/shm的大小,默认值是64M;
–ulimit :Ulimit配置
-t ,tag :创建的镜像标签,格式:name:tag

import
等同于 docker import
从压缩包导入生成镜像。压缩包可以是本地路径、远程路径、以及标准输入。
格式:docker import [选项] <文件>|<URL>|- [<仓库名>[:<标签>]]
例如:docker import ./centos-7-docker.tar.xz -m “从本地导入” centos7.3:v1
例如:docker image import http://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud.raw.tar.gz -m “从远程导入” centos7:v2
例如:cat centos-7-docker.tar.xz | docker import – centos7:v4 -m “从标准输入导入”
commit、export、import、save、load的区别
save
等同于 docker save
格式:docker image save [<仓库名>[:<标签>]] [选项] <文件>
例如:docker save centos7 -o ./centos7.tar
例如:docker save centos7 | gzip > ./centos7.tar.gz
例如:docker save centos7:v2 | gzip > ./centos7:v2.tar.gz
commit、export、import、save、load的区别
load
等同于 docker load
格式:docker load -i  <file>
例如:docker load -i centos7.tar.gz注:结合save以及 ssh 甚至 pv 的话,利用 Linux 强大的管道,可以写一个命令完成从一个机器将镜像迁移到另一个机器,并且带进度条的功能:
docker save <镜像名> | bzip2 | pv | ssh <用户名>@<主机名> ‘cat | docker load’
也可以使用 docke image import 命令导入
commit、export、import、save、load的区别
tag
等同于docker tag
格式:docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]
例如:docker image tag centos7:v2 armson/woodie/centos:v1
例如:docker image tag centos7:v2 centos:v1
prune 清除所有挂起的镜像。使用参数  -a 可以删除所有 -f 不需要删除确认.
例如:docker image prune -a

 

推荐相关文档:

Docker的命令之镜像管理 Image》上有2条评论

  1. Pingback引用通告: Docker的命令之概述 | 精彩每一天

  2. Pingback引用通告: Docker create / Docker run 的选项详解 | 精彩每一天

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>