zl程序教程

您现在的位置是:首页 >  工具

当前栏目

【Docker】30条Docker常用命令图文举例总结

Docker 总结 30 常用命令 图文 举例
2023-09-11 14:19:28 时间

请添加图片描述



1. 帮助启动类命令

命令作用
systemctl start docker启动 Docker 服务引擎
systemctl stop docker停止 Docker 服务引擎
systemctl restart docker重启 Docker 服务引擎
systemctl status docker查看 Docker 服务引擎运行状态
systemctl enable dockerDocker 服务引擎开机自启
docker info查看概要信息
docker --help查看总体帮助文档
docker 具体命令 --help查看命令帮助文档

举例:查看命令 cp 的帮助文档。

$ docker cp --help

image-20221211093531058


2. 镜像命令

命令作用
docker images列出本地仓库的镜像
docker search 镜像名称从远程库搜索镜像
docker pull 镜像名称从远程库拉取镜像
docker system df查看镜像/容器/数据卷所占空间
docker rmi 镜像ID删除镜像

2.1 列出镜像

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

[OPTIONS] 说明:

  • -a :列出本地仓库所有镜像 (含历史映像层)
  • -q :仅显示镜像 ID

举例:

$ docker images -a

image-20221211094603836

$ docker images -q

image-20221211094650956

  • 表头说明:

    表头说明
    REPOSITORY表示镜像的仓库源
    TAG镜像的标签
    IMAGE ID镜像 ID
    CREATED镜像创建时间
    SIZE镜像大小
  • 其中,同一仓库源可以有多个 TAG 版本,代表这个仓库源不同的版本。我们使用 REPOSITORY:TAG 来定义不同的镜像。如果不指定镜像的版本标签 TAG ,则默认使用最新的 latest 镜像。例如,ubuntu:latest


2.2 搜索远程库镜像

$ docker search [OPTIONS] 镜像名称

[OPTIONS] 说明:

  • --limit n :只列出前 n 个镜像,默认 25 个

举例:

$ docker search redis

image-20221211100007838

表头说明:

表头说明
NAME镜像名称
DESCRIPTION镜像介绍
STARS点赞数
OFFICIAL是否 Docker 官方出品的镜像源
AUTOMATED是否自动构建

2.3 拉取镜像

  • 把远程仓库的镜像下载到本地仓库。
$ docker pull [OPTIONS] 镜像名称[:TAG]

[OPTIONS] 说明:

  • 没有加 [:TAG] 默认下载最新的 latest 版本。

举例:

$ docker pull redis:6.2.7

2.4 查看所占空间

  • 查看 Docker 所有镜像/容器/数据卷所占硬盘空间。
$ docker system df

举例:

$ docker system df

image-20221211101846668


2.5 删除镜像

  • 根据镜像 ID 删除本地仓库的一个或多个镜像。
$ docker rmi [OPTIONS] 镜像ID

[OPTIONS] 说明:

  • -f :强制删除镜像。当该镜像创建了正在运行的容器时,必须加 -f 才能删除。

举例:

$ docker rmi -f feb5d9fea6a5
  • 除了使用镜像 ID 删除,还可以根据 镜像名称:TAG 来删除。删除多个使用空格分隔。

举例:

image-20221211111103063

$ docker rmi -f nginx:latest redis:latest
  • Docker 命令还可以通过 $() 来嵌套使用。

举例:删除全部本地镜像。

$ docker rmi -f $(docker images -qa)

这个命令把 $() 中命令的输出当作是删除命令的入参。

image-20221211111618809


2.6 面试题

面试题:谈谈 Docker 虚悬镜像是什么?

  • 虚悬镜像 (Dangling Image) ,就是仓库名、Tag 标签都是 <none> 的镜像。

    image-20221211111935728

    没啥用,删除就是了。后续章节 Dockerfiles 中再详细介绍。


3. 容器命令

  • 有镜像才能创建容器,这是根本前提。本节笔者将以 Ubuntu 镜像来演示。

    image-20221211112526738

  • 首先从远程仓库拉取 Ubuntu 镜像。

    $ docker pull ubuntu
    

    image-20221211112750847


3.1 新建+启动容器

  • Java 中用 new 来创建对象,Docker 中用 run 创建并启动容器,生成鲸鱼背上的集装箱。
$ docker run docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

[OPTIONS] 说明:

  • -name="容器名称" :为容器指定一个名称;

  • -d :后台运行容器并返回容器 ID ,也即启动守护式容器 (后台运行) ;

  • -i :以交互模式运行容器 (前台运行) ,通常与 -t 同时使用;

  • -t :为容器重新分配一个伪输入终端,通常与 -i 同时使用;(也即交互式容器,前台有伪终端,等待交互)

  • -P :随机端口映射,大写 P ;

  • -p :指定端口映射,小写 p ;

    参数说明
    -p hostPort:containerPort端口映射,如 -p 8080:80
    -p ip:hostPort:containerPort配置监听地址,如 -p10.0.0.100:8080:80

1)启动交互式容器

举例:以前台运行 Ubuntu 容器,并进入 Ubuntu 的 bash 伪终端。

$ docker run -it ubuntu:latest /bin/bash

image-20221211124306533

可以看到 root@ 后面带上了 Ubuntu 容器 ID ,这就进入了 Ubuntu 容器的伪终端了,这就进入了一个 mini 型的 Ubuntu 操作系统。相当于进入了鲸鱼背 (Docker 服务引擎) 上的集装箱 (Container 容器) 里面开始干活了。

  • 输入 exit 即可退出。

3.2 列出当前所有正在运行的容器

  • 默认只列出正在运行的容器,停止的容器不显示。
$ docker ps [OPTIONS]

[OPTIONS] 说明:

  • -a :列出当前所有正在运行的容器+历史上运行过的容器;
  • -l :显示最近创建的容器;
  • -n :显示最近 n 个创建的容器;
  • -q :静默模式,只显示容器编号;

举例:在刚刚前台启动 Ubuntu 容器后,另起一个终端窗口输入:

$ docker ps

image-20221211125706011

表头说明:

表头说明
CONTAINER ID容器 ID
IMAGE镜像
COMMAND启动命令
CREATED启动时间
STATUS运行状态
PORTS对外暴露的端口
NAMES容器名称

由于创建 Ubuntu 容器时没有指定容器名称,因此 Docker 帮我们随机分配容器名称。在实际开发中最好指定容器名称:

$ docker run -it --name=myu1 ubuntu:latest bash

再次查看正在运行的容器列表:

image-20221211130402339

举例:列出当前所有正在运行的容器+历史上运行过的容器。

$ docker ps -a

image-20221211130915889


3.3 退出容器

两种退出容器的方式:

  • exit :退出容器,容器停止 (dead) 。
  • 键盘按下 Ctrl + P + Q :退出容器但不停止容器 (running) 。

举例:

  • 先看目前正在运行的容器列表:

    image-20221211130402339

  • 使用 exit 方式退出第一个 Ubuntu 容器 myu1

    image-20221211131731524

  • 使用键盘按下 Ctrl + P + Q 退出容器但不停止容器。

    image-20221211131826634

  • 再次查看目前正在运行的容器列表:

    image-20221211131906698

    只有使用键盘快捷键的容器 ID 尾号为 8dc5 的容器仍在运行;而容器 ID 尾号为 60c0 的容器已经停止了。


3.4 启动已停止的容器

  • 启动一个或多个已经停止的容器。
$ docker start [OPTIONS] CONTAINER [CONTAINER...]

[OPTIONS] 说明:

  • --

举例:

  • 先列出最近 5 个创建的容器。

    $ docker ps -n 5
    

    image-20221211132627997

  • 把第一行已经停掉的容器 (容器 ID 尾号为 60c0 ) 重新启动。

    $ docker start 6e031bad60c0
    

    image-20221211133405352

    可以看到容器 ID 尾号为 60c0 的容器已经重新启动了。


3.5 重启容器

$ docker restart [OPTIONS] CONTAINER [CONTAINER...]

3.6 停止容器

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

3.7 强制停止容器

$ docker kill [OPTIONS] CONTAINER [CONTAINER...]

3.8 删除已停止的容器

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

[OPTIONS] 说明:

  • -f :把正在运行的容器强制删除;

举例:一次删除全部的容器。

$ docker rm -f $(docker ps -aq)

image-20221211134309896


4. 容器命令进阶

  • 本节使用 Redis 镜像演示,先拉取 Redis 镜像。

    $ docker pull redis:6.2
    

    image-20221211135207744


4.1 启动守护式容器(后台启动)

  • 只需要在 run 命令后加 -d 就能让容器在后台运行。
$ docker run -d IMAGE [COMMAND] [ARG...]

1)后台运行容器的注意问题

举例:后台启动 Ubuntu 容器。

$ docker run -d ubuntu:latest

使用 docker ps 查看当前正在运行的容器。

image-20221211190758287

发现根本没有 Ubuntu 容器在后台运行,容器是已经运行 (返回容器 ID ) 但又马上停止了。这是 Docker 的机制导致的:Docker 容器后台运行,必须有一个前台进程。容器运行的命令如果不是那些一直挂起的命令 (比如运行 top 、tail ) ,就会自动退出并停止容器。


2)Redis前后台启动举例

前台交互式启动:

$ docker run -it redis:6.2

image-20221211191530089

熟悉的 Redis 启动 Logo ,但是如果 Ctrl + C 退出的话,容器也就停止了。

image-20221211191647485

实际开发中,我们更习惯让 Redis 默默在后台运行即可。

后台守护式启动:

$ docker run -d redis:6.2

image-20221211191938222

查看正在运行的容器:发现 Redis 成功在后台运行。

image-20221211192023784


4.2 查看容器日志

$ docker logs [OPTIONS] CONTAINER

举例:查看后台运行的 Redis 容器的日志。

image-20221211192023784

$ docker logs c75160ca6a9b

image-20221211192417469


4.3 查看容器内运行的进程

任何一个容器都是简易版的 Linux 系统,容器内也有自己的进程。

$ docker top CONTAINER

举例:查看Redis 容器内运行的进程。

$ docker top c75160ca6a9b

image-20221211193040612

Redis 容器内只有 redis-server 一个进程正在运行。


4.4 查看容器内部细节

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

举例:查看Redis 容器内部细节。

$ docker inspect c75160ca6a9b

image-20221211193440751

返回的是一大堆有关容器内部信息的 JSON 字符串。这部分在高级篇才会反复用到。


4.5 进入正在运行的容器并以命令行交互

有两个命令可以重新进入正在运行的 Docker 容器:

$ docker exec -it 容器ID bash

$ docker attach 容器ID

两者的区别是:

  • exec 是在容器中打开新的终端,并且可以启动新的进程,用 exit 退出容器时不会停止容器;
  • attach 直接进入容器启动命令行终端,不会启动新的进程,用 exit 退出容器时停止容器。

因此在实际开发中更推荐使用 exec ,因为退出容器终端,不会导致容器的停止。

举例:分别使用 docker execdocker attach 进入正在运行的 Redis 容器并 exit 退出容器。

$ docker exec -it c75160ca6a9b bash

image-20221211195311479

image-20221211194857716

exit 退出容器后,Redis 容器仍然存活。

$ docker attach c75160ca6a9b

image-20221211195032262

退出容器后,Redis 容器就已经停止了。


4.6 从容器拷贝文件到主机上

这个命令可以把容器内的一些重要文件备份到主机上,避免容器被删除后重要文件丢失。

$ docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH

其中,CONTAINER:SRC_PATH 是容器内的源文件路径;DEST_PATH 是主机目标路径。

本节将使用 Ubuntu 容器来演示,以前台交互式创建一个 Ubuntu 容器。

$ docker run -it ubuntu:latest /bin/bash

在临时目录 /tmp 创建一个文本文件 test.txt

$ cd /tmp
$ touch test.txt

image-20221211200632658

退出该容器,执行

$ docker cp 937484124f73:/tmp/test.txt /root

image-20221211201058365

可以看到文件已经复制到主机上的 /root 目录下。


4.7 导入和导出容器

export 导出容器的内容流作为一个 tar 归档文件;

import 从 tar 包中的内容创建一个新的文件系统再导入镜像。

这对命令互为逆过程。

$ docker export [OPTIONS] CONTAINER > xxx.tar
$ cat xxx.tar | docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]

举例:导出 Ubuntu 容器为一个名为 abc.tar 的包。

$ docker export 937484124f73 > abc.tar 

image-20221211201804887

然后删除这个 Ubuntu 容器。

$ docker rm -f 937484124f73

image-20221211202029455

再从 tar 包导入镜像

$ cat abc.tar | docker import - ouc/ubuntu:1.0.0

image-20221211202550803

最后才是创建这个镜像的容器。

$ docker run -it ouc/ubuntu:1.0.0 /bin/bash

image-20221211202757135

容器中的 test.txt 文件仍然在。