概述
本章,您将了解并学习有关 Docker 的命令。
根据操作对象的不同,命令可划分为:
- Docker 服务相关的帮助启动类
- 操作镜像的命令
- 操作容器实例的命令
Docker 服务相关的帮助启动类
如下表格所示:
| 命令说明 | bash 命令 |
|---|---|
| 启动 Docker | systemctl start docker.service |
| 停止 Docker | systemctl stop docker.service |
| 重启 Docker | systemctl restart docker.service |
| 开启开机自启动 | systemctl enable docker.service |
| 关闭开机自启动 | systemctl disable docker.service |
| 服务的完整状态信息 | journalctl -u docker.service |
| Docker 概述信息 | docker info |
| Docker 帮助 | docker --help |
| Docker 版本信息 | docker version |
| Docker 相关命令的帮助 | docker [OPTIONS] COMMAND --help 例如: docker run --help |
操作镜像的命令
如下表格所示:
| docker command | 选项 | 说明 |
|---|---|---|
dokcer images |
-a 列出本地所有镜像;-q 显示镜像的 ID 号 |
列出本地主机上的镜像 |
docker search |
从 docker hub 上搜索镜像 | |
docker pull |
从 docker hub 上拉取镜像,通常情况下,我们都习惯带版本号标签去拉取镜像,例如: docker pull hello-world:latest |
|
docker system df |
查看镜像/容器/本地卷/构建缓存的统计占用信息 | |
docker rmi |
-f 强制删除 |
删除镜像,rmi 即 remove images 的缩写。如 docker rmi hello-world:latest。也可以使用镜像 ID 号进行删除,如 docker rmi feb5d9fea6a5。删除全部镜像时使用 docker rmi -f $(docker images -qa) |
docker inspect |
显示镜像的具体信息 |
Shell > docker images -a
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest feb5d9fea6a5 5 months ago 13.3kB
该命令的输出信息说明:
- 含有一个表头;
- REPOSITORY 表示这个镜像的仓库源;
- TAG 表示版本号标签,默认情况下,不说明就是 latest ,换言之,同一个仓库源可以有多个 TAG,若拉取时不指定版本号标签,则表示拉取最新版本;
- IMAGE ID表示镜像的 ID 号,请注意!该 ID 号是唯一的;
- CREATED 表示镜像的创建时间;
- SIZE 表示该镜像的大小。
Shell > docker search hello-world
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
---省略---
该命令的输出信息说明:
- 一个表头;
- NAME 代表这个镜像名称;
- DESCRIPTION 表示镜像说明;
- STARS 表示点赞数;
- OFFICIAL 表示是否是官方的镜像;
- AUTOMATED 表示是否是自动构建的。
Shell > docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 0 0 0B 0B
Containers 3 0 0B 0B
Local Volumes 0 0 0B 0B
Build Cache 0 0 0B 0B
有时候会见到一种特殊的镜像,例如类似这样的:
Shell > docker images -a
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> 5x4q72a 40 seconds age 10MB
我们把仓库名、版本号标签都是 \<none> 的镜像称为 虚悬镜像(dangling image),当你见到类似这样的镜像时,建议使用 docker rmi 进行删除,如 docker rmi -f 5x4q72a。
操作容器实例的命令
我们这里使用 fedora 系统镜像生成一个又一个的容器实例,在这里我使用的版本号标签为 40
-
使用镜像生成容器实例(
docker run)Shell > docker search fedora Shell > docker pull fedora:40 40: Pulling from library/fedora e467d19c2ec3: Pull complete Digest: sha256:bd0b8ed03d00b53d8cefab42c6a9ffac4b90a72f8934355a009ac5fb1258040b Status: Downloaded newer image for fedora:40 docker.io/library/fedora:40 Shell > docker images -a REPOSITORY TAG IMAGE ID CREATED SIZE fedora 40 6e6c42dab266 5 weeks ago 175MBdocker run的用法为docker run [OPTIONS] IMAGE [COMMAND] [ARG...],常用选项有:--name="容器名称"- 指定容器实例的名称-i- 交互模式运行容器-t- 分配一个终端-P- 随机端口映射-p- 指定端口映射-d- 后台方式运行容器实例
第一个终端:
Shell > docker run -it --name="fedora40_1" fedora:40 /bin/bash [root@eba6e6f6ffbd /]#第二个终端:
Shell > docker run -it --name="fedora40_2" fedora:40 /bin/bash [root@5b8795e0a0f2 /]# -
退出容器实例的终端
以下两种方式都可以退出容器实例的终端:
- 在容器实例的终端中直接使用
exit命令,这将退出终端并且导致容器实例停止 - 在容器实例的终端中使用 ctrl + p + q 快捷键,这将退出终端并且不会停止容器实例
- 在容器实例的终端中直接使用
-
查看容器实例的信息(
docker ps和docker inspect)使用
docker ps可查看正在运行的容器实例,常用选项有:-a- 列出所有的容器实例,包含正在运行的、历史运行的-l- 显示最近创建的容器-n [num]- 显示最近创建的n个容器-q- 显示容器编号 ID
Shell > docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5b8795e0a0f2 fedora:40 "/bin/bash" 8 minutes ago Up 8 minutes fedora40_2 eba6e6f6ffbd fedora:40 "/bin/bash" 8 minutes ago Up 8 minutes fedora40_1如您所见,容器实例的 ID 与终端提示符的显示是一致的。
要查看特定容器实例的详细信息,可使用
docker inspect命令,如docker inspect fedora40_1 -
操作容器实例
如下表所示:
命令 说明 docker start 容器name或容器id启动一个已经停止的容器实例,适合于用 exit退出的容器实例docker restart 容器name或容器id重启一个容器实例 docker stop 容器name或容器id停止一个正在运行的容器实例 docker kill 容器name或容器id强制停止一个正在运行的容器实例 docker exec -it 容器name或容器id /bin/bash进入一个已经运行的容器实例,适合于用 ctrl + p + q 快捷键退出的容器实例 docker rm 容器name或容器id删除一个停止的容器实例,可以使用多个 ID 达到删除多个容器实例的目的。可删除所有的容器实例,如 docker rm -f $(docker ps -qa) -
应用程序的容器实例
上面演示的容器实例是基于一个迷你的操作系统,可用
docker run -it --name="fedora40_1" fedora:40 /bin/bash这种方式生成容器实例并进入到终端。但是,若容器实例是基于具体的应用程序镜像(比如 nginx、mysql、redis 等),使用者需要生成的容器实例可以挂在后台一直被访问,应该怎么办?添加
-d选项。若不添加该选项,虽然启动了 nginx 的容器实例,但界面是卡住状态,只要按了 ctrl + c 快捷键,容器实例立刻停止。# 生成容器实例 Shell > docker run -d --name="nginx_1" nginx:latest # 指定容器实例的 ID 并进入到其终端 Shell > docker exec -it 150be8a39a29 /bin/bash通过
docker exec进入到容器终端后可使用exit退出交互终端,但是请注意!容器实例并不会停止。 -
容器实例的日志
Shell > docker logs nginx_1 -
查看容器实例内的运行进程
Shell > docker top nginx_1 -
对容器实例里的文件或目录备份
可使用
docker cp来完成此操作。某天同事 A 在容器实例里做了一件事,例如创建了一个新文件。同事 B 因误操作,对该容器实例使用了
-f选项进行强制删除,导致创建的新文件丢失。为防止容器实例的重要目录或文件不被误删除,我们可使用docker cp命令,具体用法为docker cp [OPTIONS] 容器实例名称或ID:源路径 宿主机目标路径。比如:
Shell > docker pull debian:latest Shell > docker run -it --name="debian_1" debian:latest /bin/bash root@1ec08ae78e25:/# echo "12345" >> /tmp/tmpfile.txt "ctrl" + "p" + "q" Shell > docker cp debian_1:/tmp/tmpfile.txt /tmp/ Successfully copied 2.05kB to /tmp/ Shell > ls -l /tmp/tmpfile.txt -rw-r--r-- 1 root root 6 4月 1 19:02 /tmp/tmpfile.txt -
容器实例的导出与导入
可使用
docker export将容器实例以 .tar 的方式导出,如:Shell > docker images REPOSITORY TAG IMAGE ID CREATED SIZE debian latest c978d997d5fe 2 weeks ago 117MB Shell > docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1b50490563d3 debian:latest "/bin/bash" 6 seconds ago Up 5 seconds debian_1 Shell > docker export debian_1 > /tmp/debian_1.tar Shell > ls -lh /tmp/debian_1.tar -rw-r--r-- 1 root root 116M 4月 1 19:11 /tmp/debian_1.tar若要导入备份的容器实例(如您所见,此时导入的容器实例变成了镜像),见如下示例:
Shell > docker import /tmp/debian_1.tar tianci/debian_1:latest Shell > docker images REPOSITORY TAG IMAGE ID CREATED SIZE tianci/debian_1 latest 470433037a6f 5 seconds ago 117MB debian latest c978d997d5fe 2 weeks ago 117MB










