📃 04-镜像常用命令
# Docker镜像常用命令
我们首先来讨论Docker镜像的常用命令。
## 搜索镜像
可使用`docker search` 命令搜索存放在Docker Hub中的镜像。
命令格式:
```
docker search [OPTIONS] TERM
```
参数:
| Name, shorthand | Default | Description |
| --------------- | ------- | ---------------------------- |
| `--automated` | `false` | 只列出自动构建的镜像 |
| `--filter, -f` | | 根据指定条件过滤结果 |
| `--limit` | `25` | 搜索结果的最大条数 |
| `--no-trunc` | `false` | 不截断输出,显示完整的输出 |
| `--stars, -s` | `0` | 只展示Star不低于该数值的结果 |
示例1:
```shell
docker search java
```
执行该命令后,Docker就会在Docker Hub中搜索含有“java”这个关键词的镜像仓库。执行该命令后,可看到类似于如下的表格:
```
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
java Java is a concurrent, ... 1281 [OK]
anapsix/alpine-java Oracle Java 8 (and 7) ... 190 [OK]
isuper/java-oracle This repository conta ... 48 [OK]
lwieske/java-8 Oracle Java 8 Contain ... 32 [OK]
nimmis/java-centos This is docker images ... 23 [OK]
...
```
该表格包含五列,含义如下:
① NAME:镜像仓库名称。
② DESCRIPTION:镜像仓库描述。
③ STARS:镜像仓库收藏数,表示该镜像仓库的受欢迎程度,类似于GitHub的Stars。
④ OFFICAL:表示是否为官方仓库,该列标记为[OK]的镜像均由各软件的官方项目组创建和维护。由结果可知,java这个镜像仓库是官方仓库,而其他的仓库都不是镜像仓库。
⑤ AUTOMATED:表示是否是自动构建的镜像仓库。
示例2:
```
docker search -s 10 java
```
## 下载镜像[重要]
使用命令`docker pull` 命令即可从Docker Registry上下载镜像。
命令格式:
```
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
```
参数:
| Name, shorthand | Default | Description |
| ------------------------- | ------- | ------------------ |
| `--all-tags, -a` | `false` | 下载所有标签的镜像 |
| `--disable-content-trust` | `true` | 忽略镜像的校验 |
示例1:
```shell
docker pull java
```
执行该命令后,Docker会从Docker Hub中的java仓库下载最新版本的Java镜像。
示例2:
该命令还可指定想要下载的镜像标签以及Docker Registry地址,例如:
```shell
docker pull reg.itmuch.com/java:7
```
这样就可以从指定的Docker Registry中下载标签为7的Java镜像。
## 列出镜像[重要]
使用`docker images` 命令即可列出已下载的镜像。
执行该命令后,将会看到类似于如下的表格:
```
REPOSITORY TAG IMAGE ID CREATED SIZE
java latest 861e95c114d6 4 weeks ago 643.1 MB
hello-world latest c54a2cc56cbb 5 months ago 1.848 kB
```
该表格包含了5列,含义如下:
① REPOSITORY:镜像所属仓库名称。
② TAG:镜像标签。默认是latest,表示最新。
③ IMAGE ID:镜像ID,表示镜像唯一标识。
④ CREATED:镜像创建时间。
⑤ SIZE:镜像大小。
命令格式:
```
docker images [OPTIONS] [REPOSITORY[:TAG]]
```
参数:
| Name, shorthand | Default | Description |
| --------------- | ------- | ------------------------------------------------------------ |
| `--all, -a` | `false` | 列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层) |
| `--digests` | `false` | 显示摘要信息 |
| `--filter, -f` | | 显示满足条件的镜像 |
| `--format` | | 通过Go语言模板文件展示镜像 |
| `--no-trunc` | `false` | 不截断输出,显示完整的镜像信息 |
| `--quiet, -q` | `false` | 只显示镜像ID |
示例:
```
docker images
docker images java
docker images java:8
docker images --digests
docker images --filter "dangling=true" # 展示虚悬镜像
```
## 删除本地镜像[重要]
使用`docker rmi` 命令即可删除指定镜像。
命令格式:
```
docker rmi [OPTIONS] IMAGE [IMAGE...]
```
参数:
| Name, shorthand | Default | Description |
| --------------- | ------- | -------------------------------- |
| `--force, -f` | `false` | 强制删除 |
| `--no-prune` | `false` | 不移除该镜像的过程镜像,默认移除 |
例1:删除指定名称的镜像。
```shell
docker rmi hello-world
```
表示删除hello-world这个镜像。
例2:删除所有镜像。
```
docker rmi -f $(docker images)
```
-f参数表示强制删除。
## 保存镜像
使用`docker save` 即可保存镜像。
命令格式:
```
docker save [OPTIONS] IMAGE [IMAGE...]
```
参数:
| Name, shorthand | Default | Description |
| --------------- | ------- | ---------------------------------- |
| `--output, -o` | | Write to a file, instead of STDOUT |
例1:
```shell
docker save busybox > busybox.tar
docker save --output busybox.tar busybox
```
## 加载镜像
使用`docker load` 命令即可加载镜像。
命令格式:
```shell
docker load [OPTIONS]
```
参数:
| Name, shorthand | Default | Description |
| --------------- | ------- | ------------------- |
| `--input, -i` | | 从文件加载而非STDIN |
| `--quiet, -q` | `false` | 静默加载 |
例1:
```shell
docker load < busybox.tar.gz
docker load --input fedora.tar
```
## 构建镜像[重要]
通过Dockerfile构建镜像。
命令格式:
```
docker build [OPTIONS] PATH | URL | -
```
参数:
| Name, shorthand | Default | Description |
| ------------------------- | --------- | ----------------------------------------------------- |
| `--add-host` | | 添加自定义从host到IP的映射,格式为(host:ip) |
| `--build-arg` | | 设置构建时的变量 |
| `--cache-from` | | 作为缓存源的镜像 |
| `--cgroup-parent` | | 容器可选的父cgroup |
| `--compress` | `false` | 使用gzip压缩构建上下文 |
| `--cpu-period` | `0` | 限制CPU CFS (Completely Fair Scheduler) 周期 |
| `--cpu-quota` | `0` | 限制CPU CFS (Completely Fair Scheduler) 配额 |
| `--cpu-shares, -c` | `0` | CPU使用权重(相对权重) |
| `--cpuset-cpus` | | 指定允许执行的CPU |
| `--cpuset-mems` | | 指定允许执行的内存 |
| `--disable-content-trust` | `true` | 忽略校验 |
| `--file, -f` | | 指定Dockerfile的名称,默认是‘PATH/Dockerfile’ |
| `--force-rm` | `false` | 删除中间容器 |
| `--iidfile` | | 将镜像ID写到文件中 |
| `--isolation` | | 容器隔离技术 |
| `--label` | | 设置镜像使用的元数据 |
| `--memory, -m` | `0` | 设置内存限制 |
| `--memory-swap` | `0` | 设置Swap的最大值为内存+swap,如果设置为-1表示不限swap |
| `--network` | `default` | 在构建期间设置RUN指令的网络模式 |
| `--no-cache` | `false` | 构建镜像过程中不使用缓存 |
| `--pull` | `false` | 总是尝试去更新镜像的新版本 |
| `--quiet, -q` | `false` | 静默模式,构建成功后只输出镜像ID |
| `--rm` | `true` | 构建成功后立即删除中间容器 |
| `--security-opt` | | 安全选项 |
| `--shm-size` | `0` | 指定`/dev/shm` 目录的大小 |
| `--squash` | `false` | 将构建的层压缩成一个新的层 |
| `--tag, -t` | | 设置标签,格式:name:tag,tag可选 |
| `--target` | | 设置构建时的目标构建阶段 |
| `--ulimit` | | Ulimit 选项 |
**拓展阅读**
Docker命令:<https://docs.docker.com/engine/reference/commandline/docker/>