Docker 常用命令
- 帮助启动类命令
-
- [启动 Docker](#启动 Docker)
- [停止 Docker](#停止 Docker)
- [重启 Docker](#重启 Docker)
- [查看 Docker 状态](#查看 Docker 状态)
- [设置 Docker 开机自启动](#设置 Docker 开机自启动)
- [查看 Docker 概要信息](#查看 Docker 概要信息)
- [查看 Docker 总体帮助文档](#查看 Docker 总体帮助文档)
- [查看 Docker 命令帮助文档](#查看 Docker 命令帮助文档)
- 镜像命令
- 容器命令
帮助启动类命令
Docker 的帮助启动类命令主要涉及 Docker 服务的启动、停止、重启、查看状态以及设置开机自启动等操作。
启动 Docker
- 命令 :
systemctl start docker
- 说明 :该命令用于启动 Docker 服务。在大多数 Linux 发行版中,Docker 服务是通过 systemd 管理的,因此使用
systemctl
命令来启动服务。
停止 Docker
- 命令 :
systemctl stop docker
- 说明 :该命令用于停止正在运行的 Docker 服务。同样,通过
systemctl
命令来管理服务的停止。
重启 Docker
- 命令 :
systemctl restart docker
- 说明:当需要重启 Docker 服务时,可以使用该命令。这通常用于在修改 Docker 配置或更新 Docker 版本后,确保服务以最新的配置或版本运行。
查看 Docker 状态
- 命令 :
systemctl status docker
- 说明:该命令用于查看 Docker 服务的当前状态,包括是否正在运行、启动时间、进程ID等信息。这对于诊断 Docker 服务问题非常有用。
设置 Docker 开机自启动
- 命令 :
systemctl enable docker
- 说明:该命令用于设置 Docker 服务在系统启动时自动启动。这对于确保 Docker 服务在系统重启后能够自动恢复运行非常重要。
查看 Docker 概要信息
- 命令 :
docker info
- 说明:虽然这个命令不属于直接的启动类命令,但它提供了 Docker 系统的概要信息,包括容器数量、镜像数量、存储驱动、执行驱动等,对于了解 Docker 系统的整体状态非常有用。
查看 Docker 总体帮助文档
- 命令 :
docker --help
- 说明:该命令显示 Docker 的总体帮助文档,列出了所有可用的 Docker 命令及其简短描述。这是了解 Docker 命令结构和可用选项的好方法。
查看 Docker 命令帮助文档
- 命令 :
docker 具体命令 --help
- 说明 :对于任何特定的 Docker 命令,都可以通过在该命令后添加
--help
选项来查看其详细的帮助文档。这包括命令的语法、选项、示例等,对于深入了解和使用 Docker 命令非常有帮助。
综上所述,Docker 的帮助启动类命令主要涉及服务的启动、停止、重启、查看状态以及设置开机自启动等操作,同时提供了查看 Docker 系统概要信息和帮助文档的命令。这些命令是 Docker 用户日常管理和维护 Docker 服务的基本工具。
镜像命令
Docker 的常用镜像命令涵盖了镜像的搜索、拉取(下载)、查看、删除、导出、导入等多个方面。
列出本地所有镜像
在Docker中,docker images
命令用于列出本地所有的镜像。这个命令是Docker用户日常操作中最常用的命令之一,它可以帮助用户快速查看和管理本地的镜像资源。
基本用法
-
命令格式 :
docker images [OPTIONS] [REPOSITORY[:TAG]]
-
常用选项:
-a
或--all
:列出本地所有的镜像(包括中间映像层,默认情况下,会过滤掉中间映像层)。--digests
:显示镜像的摘要信息。-f
或--filter
:显示满足条件的镜像。--format
:指定返回值的模板文件,用于自定义输出的格式。--no-trunc
:显示完整的镜像信息,避免截断。-q
或--quiet
:只显示镜像的ID。
输出信息
- REPOSITORY`:镜像仓库名称,从Docker Hub下载的镜像名称或用户自定义编译出的镜像名称。
- TAG :镜像标签,镜像版本标签,未定义时默认显示
latest
,代表最新版本。 - IMAGE ID:镜像ID,Docker系统分配的ID,通常显示的是截断的ID,实际ID更长。
- CREATED:创建时间,一般显示镜像创建时离当下经过的时间。
- SIZE:镜像大小,硬盘中占用空间的大小。
对于使用v2或更高版本格式的镜像,还会有一个DIGEST
列,以sha256:
开头,这是镜像的摘要信息。摘要信息是一个内容可寻址标识符,只要生成镜像的输入保持不变,摘要值就是可预测的。
示例
假设执行docker images
命令,输出可能如下(示例内容,实际输出会根据本地镜像情况有所不同):
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 1d622ef86b13 2 weeks ago 64.2MB
nginx latest f09fe80ddb0f 3 weeks ago 133MB
hello-world latest fce289e99eb9 4 months ago 1.84kB
这个列表显示了本地存储的三个镜像:ubuntu
、nginx
和hello-world
,包括它们的标签、镜像ID、创建时间和大小。
注意事项
- 如果想要删除某个镜像,可以使用
docker rmi
命令,并指定镜像的ID或名称及标签。 - 镜像的存储和管理对于Docker容器的运行至关重要,合理的镜像管理可以提高系统的整体性能和稳定性。
综上所述,docker images
命令是Docker中用于列出本地镜像的基本且重要的命令,通过它用户可以方便地查看和管理本地镜像资源。
搜索镜像
- 命令 :
docker search [OPTIONS] TERM
- 说明:此命令用于在Docker Hub或其他配置的镜像仓库中搜索镜像。TERM是你想要搜索的镜像名称或相关关键词。
- 示例 :
docker search nginx
,将搜索所有与nginx相关的镜像。
拉取(下载)镜像
- 命令 :
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
- 说明:此命令用于从配置的镜像仓库中下载镜像。NAME是镜像的名称,TAG是镜像的标签(默认为latest,表示最新版本),DIGEST是镜像的摘要信息。
- 示例 :
docker pull nginx:latest
,将下载最新版本的nginx镜像。
查看镜像
- 命令 :
docker images [OPTIONS] [REPOSITORY[:TAG]]
- 说明:此命令用于列出本地主机上的所有镜像或满足特定条件的镜像。如果不指定任何参数,将列出所有镜像。
- 示例 :
docker images
,列出所有本地镜像。
删除镜像
- 命令 :
docker rmi [OPTIONS] IMAGE [IMAGE...]
- 说明:此命令用于删除一个或多个镜像。IMAGE可以是镜像的名称、标签或ID。如果镜像被容器使用,则无法直接删除,需要先删除或停止使用该镜像的容器。
- 示例 :
docker rmi nginx:latest
,将删除最新版本的nginx镜像。
导出镜像
- 命令 :
docker save [OPTIONS] IMAGE [IMAGE...] > FILE.tar
- 说明:此命令用于将一个或多个镜像保存为一个tar归档文件。这可以用于备份或在不同主机之间传输镜像。
- 示例 :
docker save -o nginx.tar nginx:latest
,将最新版本的nginx镜像保存为nginx.tar文件。
导入镜像
- 命令 :
docker load [OPTIONS] < FILE.tar
或docker load [OPTIONS] --input FILE.tar
- 说明:此命令用于从tar归档文件中加载镜像。这可以用于恢复备份的镜像或在不同主机之间导入镜像。
- 示例 :
docker load -i nginx.tar
或docker load < nginx.tar
,将从nginx.tar文件中加载镜像。
其他常用镜像命令
- 查看镜像详细信息 :
docker inspect [OPTIONS] NAME|ID [NAME|ID...]
,用于获取镜像的详细信息,如创建时间、大小、配置等。 - 给镜像打标签 :
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
,用于给镜像添加新的标签,便于管理和引用。
以上命令是Docker镜像管理的常用命令,通过它们可以方便地进行镜像的搜索、下载、查看、删除、导出和导入等操作。
Docker 虚悬镜像
Docker虚悬镜像(dangling image)是指在Docker环境中存在的一种特殊镜像,它们已经被创建,但当前没有被任何容器所引用,同时也没有被赋予明确的仓库名和标签。这种镜像通常是在构建或删除镜像的过程中,由于某些原因(如构建取消、构建失败或删除操作未完全清理)而产生的。
虚悬镜像的成因
- 构建过程中的错误:在构建镜像时,如果某个步骤出错或构建被取消,可能会留下未被正确标记或引用的镜像层。
- 未标记的镜像:创建镜像后,如果没有为其指定仓库名和标签,它也会成为虚悬镜像。
- 删除操作不完全:在删除容器或镜像时,如果操作不当或Docker环境出现问题,可能导致部分镜像未被完全清理。
虚悬镜像的特点
- 无标签和仓库名 :虚悬镜像在Docker镜像列表中通常显示为
<none>
的仓库名和<none>
的标签。 - 不被引用:这些镜像当前没有被任何容器所使用或引用。
- 不会自动清理:Docker的自动清理机制通常不会删除虚悬镜像,需要手动进行清理。
查看虚悬镜像
要查看Docker中的虚悬镜像,可以使用以下命令:
bash
docker images -f "dangling=true"
或者,你也可以使用-a
或--all
参数来查看所有镜像(包括虚悬镜像),但这样可能会列出更多的信息,需要手动筛选:
bash
docker images -a
在输出中,你可以找到仓库名和标签都是<none>
的镜像,它们就是虚悬镜像。
清理虚悬镜像
清理虚悬镜像以释放磁盘空间是一个好习惯。你可以使用以下命令来删除所有虚悬镜像:
bash
docker image prune
执行该命令后,Docker会列出所有将被删除的虚悬镜像,并询问你是否确认删除。如果你确认要删除,输入y
并按回车键即可。
另外,如果你知道某个特定虚悬镜像的ID,也可以直接使用docker rmi
命令来删除它,但需要注意的是,这样做需要小心谨慎,以免误删其他重要镜像。
总结
Docker虚悬镜像是Docker环境中一种特殊的镜像状态,它们没有被任何容器所引用且没有明确的仓库名和标签。定期清理虚悬镜像是一种良好的Docker环境维护习惯,可以帮助释放磁盘空间并减少环境复杂性。通过docker images -f "dangling=true"
命令可以查看虚悬镜像,而docker image prune
命令则用于删除所有虚悬镜像。
容器命令
Docker 的常用容器命令涵盖了容器的创建、启动、停止、删除、查看、日志管理等多个方面。以下是一些常用的 Docker 容器命令及其说明:
创建并启动容器
- docker run :这是最常用的命令之一,用于新建并启动容器。
- 语法:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
- 常用选项:
--name="容器名"
:指定容器名,不指定就随机-d
:后台运行容器,并返回容器ID。-i
:以交互模式运行容器,通常与-t
同时使用。-t
:为容器重新分配一个伪输入终端,通常与-i
同时使用。-P
:随机端口映射,将容器内部使用的网络端口映射到主机上。-p
:指定端口映射,格式为ip:hostPort:containerPort
或hostPort:containerPort
。-v
:挂载宿主机的目录到容器的指定目录。
- 启动容器
docker run -it --name="" IMAGE bash
:启动交互式容器docker run -d --name="" IMAGE bash
:启动守护式容器
- 离开容器
exit
: run 进去容器, exit 退出,容器停止- Ctrl + p + q:run 进去容器, Ctrl + p + q 退出,容器停止
- 语法:
查看容器
- 基本命令
docker ps
:列出当前正在运行的容器。
- 常用选项
-a
或--all
:列出所有容器(包括未运行的)。-l
或--latest
:仅显示最新创建的容器(包括未运行的,如果指定了 -a)。-n <num>
:显示最新创建的 个容器。-q
或--quiet
:仅显示容器 ID。--size
:显示容器的大小。--filter
:根据提供的条件过滤输出。
- 输出信息
- CONTAINER ID:容器的唯一标识符。
- IMAGE:容器使用的镜像名称。
- COMMAND:容器启动时运行的命令。
- CREATED:容器创建的时间。
- STATUS:容器的当前状态,如"Up 3 minutes"表示容器已运行3分钟。
- PORTS:容器暴露的端口以及映射到宿主机的端口(如果有的话)。
- NAMES:用户为容器指定的名称(如果未指定,则自动生成)。
停止和启动容器
- docker stop :停止正在运行的容器。
- 语法:
docker stop 容器ID或容器名
- 语法:
- docker kill :强制停止正在运行的容器。
- 语法:
docker kill 容器ID或容器名
- 语法:
- docker start :启动已经停止的容器。
- 语法:
docker start 容器ID或容器名
- 语法:
- docker restart :重启容器。
- 语法:
docker restart 容器ID或容器名
- 语法:
删除容器
- docker rm :删除已经停止的容器。
- 语法:
docker rm 容器ID或容器名
- 强制删除(包括正在运行的容器):
docker rm -f 容器ID或容器名
- 删除所有容器(包括正在运行的容器)
docker rm -f $(docker ps -aq)
docker ps -a -q | xargs docker rm
- 语法:
进入容器
- docker exec :在运行的容器中执行命令。
- 语法:
docker exec -it 容器ID或容器名 /bin/bash
(或/bin/sh
,取决于容器内的shell) - 这个命令会打开一个新的终端,允许用户与容器进行交互,而不会停止容器。
- 语法:
- docker attach :连接到正在运行的容器。
- 语法:
docker attach 容器ID或容器名
- 注意:使用
docker attach
退出容器时(如使用exit
命令),容器也会停止。因此,更推荐使用docker exec
。
- 语法:
docker exec
与 docker attach
的区别
Docker Exec
与 Docker Attach
是Docker 管理容器时常用的两个命令,它们在功能和用法上存在显著差异。以下是这两个命令的主要区别:
功能差异
-
Docker Exec:
- 允许用户在正在运行的容器内部执行命令或启动新进程。
- 不会打开一个新的TTY(终端仿真器)连接到容器,而是将命令的结果直接输出到终端。
- 用户可以通过这个命令与容器进行交互,执行各种操作,如运行shell脚本、安装软件包、查看日志等。
- 使用
-i
(或--interactive
)选项可以保持标准输入打开,允许用户与命令交互;-t
(或--tty
)选项可以分配一个伪终端。 - 执行完毕后,容器将继续运行,不会因为执行了Docker Exec命令而停止。
-
Docker Attach:
- 用于连接到正在运行的容器的标准输入、输出和错误输出(stdin、stdout和stderr)。
- 它允许用户直接与容器内的shell进行交互,就像在本地终端下操作一样。
- 使用这个命令,用户可以实时看到容器内的输出,并进行命令输入。
- 但是,docker attach命令会直接连接到容器的主进程,如果容器的主进程退出或者被终止,连接也会被关闭。
- 如果用户想要退出当前的连接,可以通过特定的组合键(如Ctrl+P, Ctrl+Q)来退出,而不是直接退出容器。
使用场景
-
Docker Exec:
- 更适合用于需要在容器中执行一次性命令或长时间运行的后台任务。
- 由于它会启动新的进程,因此即使退出该进程,容器也会继续运行。
-
Docker Attach:
- 更适合用于需要实时查看或操作容器内进程的输出和输入的场景。
- 但是,由于它与容器的主进程共享输入输出,因此如果主进程退出,连接也会中断。
退出机制
-
Docker Exec:
- 执行完毕后,用户可以通过输入
exit
命令来退出容器内的shell,但这不会影响容器的运行状态。
- 执行完毕后,用户可以通过输入
-
Docker Attach:
- 用户可以通过特定的组合键(如Ctrl+P, Ctrl+Q)来退出当前的连接,而不会停止容器的运行。如果直接输入
exit
命令,则可能会退出容器的主进程,导致容器停止运行(这取决于容器的启动命令和配置)。
- 用户可以通过特定的组合键(如Ctrl+P, Ctrl+Q)来退出当前的连接,而不会停止容器的运行。如果直接输入
综上所述,Docker Exec和Docker Attach在功能和用法上存在明显的差异,用户应根据具体的需求和场景来选择合适的命令。
查看容器日志
- docker logs :查看容器的输出日志。
- 语法:
docker logs 容器ID或容器名
- 跟随查看(实时输出日志):
docker logs -f 容器ID或容器名
- 语法:
导入导出容器
导出容器
Docker容器导出主要使用docker export
命令,该命令将容器的文件系统内容导出为一个tar归档文件。但请注意,导出的内容不包括容器的配置、端口映射、网络设置等元数据信息。
导出步骤:
-
停止容器(如果容器正在运行):
bashdocker stop <container_name_or_id>
这一步是可选的,但建议在进行导出前停止容器,以确保导出的是一致性的文件系统状态。
-
使用
docker export
命令导出容器:bashdocker export <container_name_or_id> > <output_tar_file.tar>
或者,你也可以通过管道直接输出到文件:
bashdocker export <container_name_or_id> | gzip > <output_tar_file.tar.gz>
这样可以压缩导出的文件,便于传输和存储。
导入容器
Docker容器导入主要使用docker import
命令,但需要注意的是,docker import
实际上是将导出的tar文件作为新的镜像的根文件系统来创建一个新的镜像,而不是直接恢复为一个容器。因此,导入后你需要基于这个新镜像来启动一个新的容器。
导入步骤:
-
使用
docker import
命令导入tar文件:bashdocker import <input_tar_file.tar> <repository:tag>
例如:
bashdocker import mycontainer.tar myrepo/myimage:latest
这将创建一个新的镜像
myrepo/myimage:latest
,其根文件系统来自mycontainer.tar
文件。 -
基于新镜像启动容器:
bashdocker run -d --name <new_container_name> <repository:tag>
例如:
bashdocker run -d --name my_new_container myrepo/myimage:latest
注意事项
- 导出的tar文件不包含容器的配置、端口映射、网络设置等元数据信息,因此导入后创建的容器将是一个全新的容器,需要重新配置。
- 如果需要迁移完整的容器环境(包括配置和依赖服务),通常建议使用
docker save
和docker load
命令来保存和加载镜像,或者使用Docker Compose来管理多容器应用。 - 导入的tar文件在
docker import
命令中被视为新的镜像的根文件系统,因此你可以为导入的镜像指定新的仓库名、标签等信息。
综上所述,Docker的容器导入导出功能主要用于迁移容器内部的数据状态,而不是整个容器及其配置。在实际应用中,应根据具体需求选择合适的方法。
其他常用命令
-
docker rename:重命名容器。
- 语法:
docker rename 旧容器名 新容器名
- 语法:
-
docker inspect:查看容器内部细节
- 语法:
docker inspect 容器ID或容器名
- 语法:
-
docker cp:在容器和宿主机之间复制文件。
- 语法
docker cp 宿主机路径 容器ID或容器名:容器内路径
docker cp 容器ID或容器名:容器内路径 宿主机路径
- 语法
-
docker top`:查看容器内运行的进程
- 语法:
docker top 容器ID或容器名
- 语法:
这些命令是 Docker 容器管理的基础,通过它们可以方便地对容器进行创建、管理、维护和调试。