文章目录
#1 获取镜像
- 命令:
docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
- Docker 镜像仓库地址:地址的格式一般是 <域名/IP>[:端口号]。默认地址是 Docker Hub。
- 仓库名:仓库名是两段式名称,即 <用户名>/<软件名>。对于 Docker Hub,如果不给出用户名,则默认为 library,也就是官方镜像。
#2 查看镜像
- 列出镜像:
docker image ls
- 信息列表包含了仓库名、标签、镜像 ID、创建时间以及所占用的空间
- 镜像 ID 则是镜像的唯一标识,一个镜像可以对应多个标签
- 虚悬镜像:由于新旧镜像同名,旧镜像名称被取消,从而出现仓库名、标签均为 的镜像。这类无标签镜像也被称为 虚悬镜像(dangling image)
- 显示:
docker image ls -f dangling=true
- 删除:
docker image prune
- 中间层镜像:是一种无标签镜像,是其它正在使用的镜像所依赖的镜像,不容有失
- 查看命令:
docker image ls -a
- 列出部分镜像:
- 根据仓库名列出镜像:
docker image ls 仓库名
- 列出特定的某个镜像:
docker image ls 仓库名:标签
- 过滤操作:
- 之前:
docker image ls -f before=仓库名:标签
- 之后:
docker image ls -f since=仓库名:标签
#3 删除镜像
- 命令:
docker image rm [选项] <镜像1> [<镜像2> ...]
- <镜像> 可以是 镜像短 ID、镜像长 ID、镜像名 或者 镜像摘要
- 镜像的唯一标识是其 ID 和摘要,而一个镜像可以有多个标签
- Docker镜像的删除过程:
- 第一步:将满足要求的所有镜像标签都取消,这就是看到的 Untagged 信息
- 第二步:确定是否还有不同的标签指向这个镜像,是的话就不能删除该镜像,仅仅实现了标签的移除,假如没有其它的标签指向该镜像,则可以删除镜像。
- 复合命令:
docker image rm $(docker image ls -q 仓库名)
-
docker image rm $(docker image ls -q -f before=仓库名:标签)
#4 定制镜像
##4.1 利用 commit 理解镜像构成
- 不提倡使用commit定制镜像,用来理解镜像的构成:
- 第一步:运行镜像,启动容器
- 第二步:进入容器
- 第三步:改动内容
- 第四步:提交改动,保存容器为镜像
- 第五步:查看镜像历史
##4.2 使用 Dockerfile 定制镜像
- 镜像的定制实际上就是定制每一层所添加的配置、文件。如果我们可以把每一层修改、安装、构建、操作的命令都写入一个脚本,用这个脚本来构建、定制镜像,这个脚本就是 Dockerfile。
- Dockerfile 是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。
- 定制镜像,是以一个镜像为基础,在其上进行定制。而 FROM 就是指定基础镜像,因此一个 Dockerfile 中 FROM 是必备的指令,并且必须是第一条指令。
- Docker 还存在一个特殊的镜像,名为 scratch。这个镜像是虚拟的概念,并不实际存在,它表示一个空白的镜像。如果你以 scratch 为基础镜像的话,意味着你不以任何镜像为基础,接下来所写的指令将作为镜像第一层开始存在。
- RUN 指令是用来执行命令行命令的。由于命令行的强大能力,RUN 指令在定制镜像时是最常用的指令之一,其格式有两种:
- shell 格式:RUN <命令>,就像直接在命令行中输入的命令一样。
- exec 格式:RUN [“可执行文件”, “参数1”, “参数2”]
- Dockerfile 中每一个指令都会建立一层,RUN 也不例外。每一个 RUN 的行为,新建立一层,在其上执行这些命令,执行结束后,commit 这一层的修改,构成新的镜像。
- 构建镜像:
docker build [选项] <上下文路径/URL/->