📃 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/>