一、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 构建 3、标准输入中读取 Dockerfile 进行构建 –build-arg=[] :设置镜像创建时的变量; |
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的安装
- Docker的配置文件 daemon.json 详细解
- Docker的启动参数
- Docker的命令之概述
- Docker的命令之容器管理 Container
- Docker的命令之镜像管理 Image
- Docker的命令之网络管理 network
- Docker的命令之集群节点管理 Swarm node
- Docker的命令之插件管理 Plugin
- Docker的命令之安全管理 Docker secret
- Docker的命令之集群服务管理 Service
- Docker的命令之 Docker stacks
- Docker的命令之集群管理 swarm
- Docker的命令之系统管理 Docker system
- Docker的命令之数据卷管理 Volume
- Docker的命令之快捷指令
- Docker中的镜像构建-Dockerfile指令详解
- Docker的实践笔记
- Docker create / Docker run 的选项详解
Pingback引用通告: Docker的命令之概述 | 精彩每一天
Pingback引用通告: Docker create / Docker run 的选项详解 | 精彩每一天