---
url: https://eoht.net/fe/docker/mirror.md
description: 区分 Docker 镜像与容器，使用完整命令搜索、拉取、导出和导入镜像，以及创建、启动、停止和删除容器。
---

# Docker 镜像与容器操作教程：搜索、拉取、备份、运行和删除 {#docker-image-container-operations}

镜像是创建容器的模板，容器是可运行、停止和删除的实例。`docker image` / `docker rmi` 操作镜像，`docker container` / `docker rm` 操作容器；删除任意一方都不能直接替代另一方的管理操作。

## 查看本地镜像 {#list-local-docker-images}

```bash
docker images
```

## 搜索镜像，以 Tomcat 为例 {#search-tomcat-docker-image}

```bash
docker search --limit 5 tomcat
```

搜索结果来自 Docker Hub，会随时间变化。安装前核对镜像发布者、支持的标签和架构，不要只看名称或星标数。

## 选择并拉取镜像 {#select-and-pull-docker-image}

```bash
docker pull tomcat:10.1
```

拉取对象是仓库名加标签或摘要，不是本地镜像 ID。省略标签通常表示 `latest`，但它不保证适合项目；标签也可能指向更新后的镜像，需要复现时使用已核对的 `仓库@sha256:摘要`。

## 删除镜像 {#remove-docker-image}

```bash
docker rmi tomcat:10.1
```

此命令删除本地镜像引用，参数应为镜像名或镜像 ID。若容器仍引用它，应先检查这些容器是否还需要；不要为消除报错直接强制删除。继续下文示例前，需要重新拉取此镜像。

## 使用已有镜像创建容器 {#create-container-from-local-image}

```bash
docker create --name myTomcat tomcat:10.1
```

`create` 创建容器但不启动；名称已存在时先用 `docker ps -a` 查看，避免重复创建。

## 镜像备份 {#back-up-docker-image}

```bash
docker save -o tomcat.tar tomcat:10.1
docker load -i tomcat.tar
```

将归档复制到另一台安装了 Docker 的机器后，可用第二条命令导入。`save` / `load` 处理镜像，不包含容器的挂载目录、卷数据或运行配置；这些内容需要单独备份。

## 查看容器 {#list-docker-containers}

```bash
docker ps
docker ps -a
```

前者只显示运行中的容器，后者包含已停止的容器。

## 运行容器 {#run-docker-container}

```bash
docker start myTomcat
docker logs myTomcat
```

可用容器名称或可唯一识别的容器 ID。此处的 `create` 未发布端口，要从浏览器访问应用，请参考[端口映射示例](/fe/docker/container#access-tomcat-container)。

## 停止容器 {#stop-docker-container}

```bash
docker stop myTomcat
```

## 删除没有运行的容器 {#remove-stopped-docker-container}

```bash
docker rm myTomcat
```

删除容器会丢弃其可写层中的内容；需要的文件应提前复制或保存在挂载卷中。

## 删除正在运行的容器 {#remove-running-docker-container}

```bash
docker rm -f myTomcat
```

这是上一节的替代操作：强制结束并删除该容器，应用可能来不及保存数据。常规操作优先先 `stop` 再 `rm`。

## 删除所有容器 {#remove-all-docker-containers}

仅在确认当前 Docker context 指向可全部清空的测试环境时使用。以下操作会停止并删除该 daemon 中的全部容器，执行前检查列表与需要保留的数据：

```bash
docker context show
docker ps -a
```

确认范围后，Linux / macOS 的 Bash 或 zsh 可执行：

```bash
container_ids=$(docker ps -aq)
if [ -n "$container_ids" ]; then
  printf '%s\n' "$container_ids" | xargs docker stop
  printf '%s\n' "$container_ids" | xargs docker rm
fi
```

空列表不会调用删除命令。此操作不等于删除全部镜像或卷，清理范围应分别确认。

参考：[Docker CLI](https://docs.docker.com/reference/cli/docker/)、[镜像拉取](https://docs.docker.com/reference/cli/docker/image/pull/)、[删除容器](https://docs.docker.com/reference/cli/docker/container/rm/)。
