Docker常用命令

140 阅读14分钟

曾经花过一小段时间了解过docker,有些命令不常敲很快就忘记了(当时学也没记住),只知道docker能干些什么,然后用的时候上网查。能在网上copy的,那必然是不动脑,生活已经够苦了,就别再为难自己了。

最近一下子就敲很多docker命令:学校的hadoop实验环境用docker搭建的,做实验的时候一直敲docker命令。这段时间正好在学习微服务组件,为了方便学习,一些demo做好后也是直接在云服务器上,也是一直敲docker命令。于是花点时间整理这几天经常敲,经常查的命令。

帮助命令:help

怎么查命令?最多的当然是用help查,help都看不懂,再去网上查。

docker help命令用于获取 Docker 的帮助信息。通过执行docker help命令,可以查看 Docker 的整体命令结构以及每个命令的说明和使用方法。

[root@iZw4q1kzwm5ktwZ ~]# docker help
​
Usage:  docker [OPTIONS] COMMAND
​
A self-sufficient runtime for containers
​
Options:
      --config string      Location of client config files (default "/root/.docker")
  -c, --context string     Name of the context to use to connect to the daemon (overrides
                           DOCKER_HOST env var and default context set with "docker context use")
​

查看单独命令的使用方法: docker help [命令] 或者 docker [命令] --help

[root@iZw4q1kzwm5ktwZ ~]# docker help pull
​
Usage:  docker pull [OPTIONS] NAME[:TAG|@DIGEST]
​
Pull an image or a repository from a registry
​
Options:
  -a, --all-tags                Download all tagged images in the repository
      --disable-content-trust   Skip image verification (default true)
      --platform string         Set platform if server is multi-platform capable
  -q, --quiet                   Suppress verbose output

关于容器的命令还有这种写法:

[root@iZw4q1kzwm5ktwZ ~]# docker container --help
​
Usage:  docker container COMMAND
​
Manage containers
​
Commands:
  attach      Attach local standard input, output, and error streams to a running container
  commit      Create a new image from a container's changes
  .....

关于镜像命令:

[root@iZw4q1kzwm5ktwZ ~]# docker image --help
​
Usage:  docker image COMMAND
​
Manage images
​
Commands:
  build       Build an image from a Dockerfile
  history     Show the history of an image
......
​

拉取镜像:pull

docker pull [选项] [镜像名[:标签]]
  1. -a--all-tags:下载仓库中的所有标签(tags)对应的镜像。使用此选项可以一次性下载仓库中的所有镜像版本。

  2. --disable-content-trust:禁用内容信任机制。默认情况下,Docker 在拉取镜像时会验证镜像的签名以确保镜像的完整性和来源可信。使用此选项可以跳过镜像的验证步骤。

  3. --platform string:如果 Docker 服务器支持多平台构建,并且仓库中存在针对不同平台的镜像版本,则可以使用此选项指定要下载的特定平台镜像。可以使用操作系统和架构组合的字符串来指定平台,例如 linux/amd64windows/amd64

  4. -q--quiet:静默模式,只显示拉取过程中的进度信息,不显示详细输出。使用此选项可以减少冗长的输出信息,仅关注进度。

运行镜像:run

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

OPTIONS是可选的,用于指定容器的配置选项,例如端口映射、挂载卷、环境变量等。

  1. IMAGE是要使用的镜像的名称或标签。
  2. COMMAND是容器启动后要执行的命令。
  3. ARG是传递给命令的参数。

run有很多命令选项,下面是一些常用的docker run命令选项:

  1. -d, --detach:以后台模式运行容器。

  2. -p, --publish:指定端口映射,将容器内部的端口映射到宿主机的端口。-p:宿主机端口:容器端口

  3. -v, --volume:指定挂载卷,将宿主机的目录或文件挂载到容器中。在Docker中,可以使用以下方式设置匿名挂载卷:

    • 使用 -v--volume 选项加上目标路径来设置匿名挂载卷。语法如下:

      docker run -v /path/to/volume image_name
      

      这将创建一个匿名挂载卷,并将容器内的 /path/to/volume 目录与宿主机上的一个自动生成的挂载点进行绑定。在宿主机上,Docker 会在默认的挂载点(通常是 /var/lib/docker/volumes)下创建一个具有随机生成名称的目录,该目录用于存储匿名挂载卷的数据。具体挂载到宿主机的路径取决于你的 Docker 配置和操作系统,一般情况下你可以在宿主机的 /var/lib/docker/volumes 目录下找到匿名挂载卷对应的目录。

    • 可以使用 -v--volume 选项指定容器内和宿主机上的路径来设置匿名挂载卷。语法如下:

      docker run -v /path/on/host:/path/in/container image_name
      

      这将创建一个匿名挂载卷,并将宿主机上的 /path/on/host 目录与容器内的 /path/in/container 目录进行绑定。 将匿名挂载卷挂载到容器中的某个路径时,如果宿主机上的目录不存在,Docker 会自动创建该目录。

    无论使用哪种方式,设置匿名挂载卷后,Docker将在宿主机上自动生成一个唯一的挂载点,并将其与容器内指定的路径进行绑定。匿名挂载卷的名称通常是一个随机的哈希值,不容易人为识别。

    需要注意的是,匿名挂载卷是与容器实例相关联的,当容器被删除时,匿名挂载卷也会被删除。如果希望在容器之间共享数据,可以考虑使用具名挂载卷,或者通过创建Docker卷进行数据持久化。

    具名挂载卷:

    要指定某个具名挂载卷挂载到某个特定目录,您可以在容器运行时使用 -v 参数,并指定具名卷的名称和目标路径。以下是示例命令:

    docker run -v <volume_name>:<container_path> <image_name>
    

    其中, volume_name 是具名挂载卷的名称, container_path 是容器中的目标路径,image_name 是容器所使用的镜像名称。 请确保具名挂载卷已经在宿主机上创建,并且容器中的目标路径与宿主机上的挂载路径对应。

  4. --name:为容器指定一个名称。--name 容器名称

  5. -e, --env:设置环境变量。 -e "KEY1=VALUE1"

  6. -it:以交互模式运行容器,并分配一个伪终端。用于同时分配一个伪终端(pseudo-TTY)并保持 STDIN 打开,以便与容器进行交互。

    具体含义如下:

    • -i(--interactive):保持 STDIN 打开,即使没有附加到容器上,也可以与容器进行交互。这使得你可以在容器内部输入命令或与运行的应用程序进行交互。
    • -t(--tty):分配一个伪终端,使得在容器中的命令行界面(如 Bash 终端)中输出的文本格式正确。伪终端会模拟终端的特性,例如控制字符、终端窗口大小等。

    当使用 -it 选项时,docker run 命令会将您连接到容器的交互式终端,就好像直接登录到了容器中一样。这对于需要在容器内执行命令、调试应用程序或进行交互式操作非常有用。

    请注意,在使用 -it 选项时,通常需要为容器指定一个可以交互地运行的命令,例如 /bin/bash/bin/sh。这将启动一个交互式的 shell 终端,并允许在容器中执行命令。 -d-it 是互斥的参数。 同时使用-it会失效,但是可以使用exec命令进入容器。

  7. -h : 容器主机名称。-h hostname

进入容器:exec

 docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

命令选项:

  1. -d, --detach:以分离模式运行命令,即在后台运行命令并返回输出。
  2. --detach-keys string:覆盖分离容器的按键序列。 默认情况下,按下 Ctrl + p 然后再按下 Ctrl + q 可以将控制权从容器返回给宿主机的终端。 如--detach-keys "Ctrl-x"
  3. -e, --env list:设置容器内部执行命令时的环境变量。可以使用该选项多次来设置多个环境变量。
  4. -i, --interactive 即使未附加(attach)容器,也保持 STDIN(标准输入)打开。
  5. --privileged 特权模式(privileged mode)是指允许容器内的进程拥有与主机系统相同的特权级别。特权模式提供了对主机系统资源和功能的更高级别的访问权限。 当容器以特权模式运行时,它将绕过容器内部的访问控制机制,并且具有与主机系统相同的权限。这意味着容器内的进程可以执行许多与安全相关的操作,如加载内核模块、修改主机网络配置、访问设备文件等。
  6. -t, --tty 分配一个伪终端(pseudo-TTY),通常与 -i 一起使用,以便与容器内部的命令进行交互。
  7. -u, --user string:设置在容器内部执行命令的用户名或用户ID。格式为 [:]
  8. -w, --workdir string:设置容器内部执行命令时的工作目录。

在交互模式下,在名为 my-container 的容器中执行 /bin/bash 命令:

docker exec -it my-container /bin/bash # exec常用命令 ,退出可用exit,或者Ctrl + p,Ctrl + q 

/bin/bash 是指 Bash(Bourne Again SHell)的路径。Bash 是一种常用的 Unix/Linux 操作系统的命令行解释器(shell),它是 Bourne shell 的一个扩展版本。Bash 提供了一个交互式的命令行界面,用户可以在其中执行命令、脚本和管理系统。

/bin/bash 是 Bash 解释器的可执行文件的路径。它通常用于启动一个新的 Bash 终端会话或在脚本中指定要使用的解释器。当您在命令行中输入 /bin/bash 时,将启动一个新的 Bash 终端,您可以在其中输入命令并与系统进行交互。

停止容器:stop

docker stop [OPTIONS] CONTAINER [CONTAINER...]

选项:

  • -t, --time:指定停止容器前等待的时间(单位为秒)。默认情况下,等待时间为 10 秒。

列出容器:ps

docker ps [OPTIONS]

常用的选项包括:

  1. -a, --all 显示所有容器,包括正在运行的和已停止的容器。
  2. -f, --filter filter:根据条件过滤输出结果,可以使用多个过滤条件。
  3. --format string:使用 Go 模板格式化输出结果,使输出更加可读。
  4. -n, --last int:显示最后创建的 n 个容器,包括所有状态的容器。默认值为 -1,表示显示所有容器。
  5. -l, --latest 显示最近创建的容器,包括所有状态的容器。
  6. --no-trunc:不截断输出,显示完整的容器名称。
  7. -q, --quiet:仅显示容器的数字 ID。
  8. -s, --size:显示容器的总文件大小。

没有任何选项,只显示正在运行的容器。

如:

​
[root@iZw4q1kzwm5ktwZ ~]# docker ps --format "ID:{{.ID}} 镜像:{{.Image}} 状态:{{.Status}}"
ID:9b868f0bfd81 镜像:ubuntu-hadoop:1.0 状态:Up 25 hours
​
[root@iZw4q1kzwm5ktwZ ~]# docker ps -f "name=myblog2" --format "ID:{{.ID}} 镜像:{{.Image}} 状态:{{.Status}}"
ID:dc5c284d8e21 镜像:blog:2.0 状态:Up 2 months
​

启动容器:start

docker start [OPTIONS] CONTAINER [CONTAINER...]

docker start 命令用于启动一个或多个已停止的容器。

以下是 docker start 命令的常见选项:

  1. -a, --attach:附加到容器的标准输出(STDOUT)和标准错误输出(STDERR),并转发信号。
  2. --checkpoint string:从指定的检查点恢复容器的状态。
  3. --checkpoint-dir string:指定自定义检查点存储目录。
  4. --detach-keys string:覆盖分离容器时使用的按键序列。前面有介绍过。
  5. -i, --interactive:附加到容器的标准输入(STDIN),保持交互式会话。 通过这样的方式,你可以与容器进行交互,并在终端上查看和响应容器的输出。如果容器没有运行交互式应用程序或没有 STDIN 需要输入,使用 -i 参数可能没有实际效果。

我没有用检查点,下面是我自己整理的资料,通过描述感觉在生产环境中应该很实用,如果你用过欢迎评论。

在 Docker 中,检查点(Checkpoint)是一个容器的快照或状态快照。它记录了容器在某个时间点上的状态信息,包括内存、文件系统和进程状态等。检查点可以用于备份和恢复容器的状态,以及在容器迁移和容器暂停/恢复等场景下使用。

通过检查点,你可以在容器停止之后重新创建和恢复容器的状态,包括内存中的数据、文件系统状态和运行中的进程等。检查点使得容器的迁移、备份和恢复等操作更加方便和灵活。

使用 docker start 命令时,你可以使用 --checkpoint 选项指定要从中恢复的检查点。这将在容器启动时将容器恢复到检查点记录的状态。

需要注意的是,检查点功能在某些版本的 Docker 中可能是实验性的或受限制的。请查阅相关文档以获取更多详细信息和使用说明。

要设置检查点,你可以使用 Docker CLI 或 Docker API 中的 docker checkpoint create 命令。下面是使用命令行设置检查点的基本步骤:

  1. 首先,确保你的容器是在停止状态下。

  2. 运行以下命令来创建一个检查点:

    docker checkpoint create <容器名称或ID> <检查点名称>
    

    <容器名称或ID> 替换为要创建检查点的容器的名称或 ID,将 <检查点名称> 替换为你想要为检查点指定的名称。

  3. 检查点创建成功后,你可以使用 docker checkpoint ls 命令来列出容器的检查点:

    docker checkpoint ls <容器名称或ID>
    

    这将显示容器的检查点列表,包括检查点名称、创建时间等信息。

请注意,检查点功能可能在某些版本的 Docker 中是实验性的或受限制的。另外,检查点功能目前只支持部分驱动程序和操作系统。

重启容器:restart

docker restart 命令用于重启一个或多个容器。以下是该命令支持的选项:

  1. -t, --time int: 在终止容器之前等待停止的时间(以秒为单位) 默认10s。

删除容器:rm

docker rm [OPTIONS] CONTAINER [CONTAINER...]

docker rm 命令用于删除一个或多个容器。以下是该命令支持的选项:

  1. -f, --force: 强制删除正在运行的容器。通常情况下,如果容器正在运行,会阻止删除操作,但使用 -f 选项可以强制终止容器并删除它。这会发送 SIGKILL 信号给容器,立即终止它。
  2. -l, --link: 删除与容器关联的指定链接(link)。链接是容器间的网络连接,使用 --link 选项可以移除指定容器的链接。
  3. -v, --volumes: 删除与容器关联的匿名卷(anonymous volumes)。在创建容器时,可以将匿名卷挂载到容器中。使用 --volumes 选项可以删除与容器关联的这些匿名卷。

查看镜像:images

docker images [OPTIONS] [REPOSITORY[:TAG]]

选项:

  1. -a, --all显示所有镜像(默认隐藏中间镜像)
  2. --digests 显示摘要信息 -f, --filter filter 根据条件筛选输出
  3. --format string 使用Go模板格式化输出镜像信息
  4. --no-trunc 不截断输出
  5. -q, --quiet仅显示数字ID

一些常用的示例

  • docker images:列出本地所有的镜像。只显示顶层镜像 。
  • docker images -a:显示包括中间镜像在内的所有镜像。
  • docker images ubuntu:列出以 "ubuntu" 为仓库名的镜像。
  • docker images -q:只显示镜像的ID。
  • docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}":使用自定义格式打印镜像的仓库名、标签和大小。

删除镜像:rmi

docker rmi [OPTIONS] IMAGE [IMAGE...]

删除一个或多个镜像,

选项:

  1. -f, --force 强制删除镜像,同时删除容器,不使用-f,存在容器的镜像的无法直接删除。
  2. --no-prune 不删除未打标签的父镜像

查看信息:inspect

可以查看容器详细信息,镜像详细信息。如果是容器的化你能查看到容器运行时的ip等待。

docker inspect [OPTIONS] NAME|ID [NAME|ID...]

inspect命令的选项有以下几种:

  • -f, --format string 使用给定的 Go 模板格式化输出。可以使用预定义的模板或自定义模板来指定要显示的字段和格式。
  • -s, --size:如果检查的对象是容器,显示容器中文件的总大小。
  • --type string:返回指定类型的 JSON 数据。我没用过!

我最常用的就是-fdocker inspect 输出的json内容太多,有时候需要的就只要那么一点,-f就很好用,可以参照下面的例子写出一些你自己需要的模板,或者上网去查。

查看容器的ip:

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id