# 基础命令
在 Docker 客户端,可以通过命令来操控 Docker 来完成指定的任务,其格式通常为:
docker [OPTIONS] COMMAND [arg...]
# 帮助命令
显示 Docker 版本信息:
docker version
显示 Docker 系统信息,包括镜像和容器数:
docker info
显示命令的帮助信息:
docker [COMMAND] --help
# 镜像命令
列出本地镜像:
docker images [OPTIONS] [REPOSITORY[:TAG]]
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest bf756fb1ae65 5 months ago 13.3kB
# 镜像的仓库源 镜像的标签 镜像 ID 创建的时间 镜像大小
常用选项:
- -a: 列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层)
- -q: 只显示镜像 ID
- --digests: 显示镜像的摘要信息
- --no-trunc: 显示完整的镜像信息
- -f: 显示满足条件的镜像
对于标签,如果不明确指定将默认为 latest
,例如你只使用 ubuntu
,Docker 将默认使用 ubuntu:latest
。
从 Docker Hub 查找镜像:
docker search [OPTIONS] IMAGE
常用选项:
- -s: 列出收藏数不小于指定值的镜像
- --no-trunc: 显示完整的镜像描述
- --automated: 只列出
automated build
类型的镜像
从镜像仓库中拉取或者更新指定镜像:
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
常用选项:
- -a: 拉取所有
tagged
镜像 - --disable-content-trust: 忽略镜像的校验,默认开启
如拉取最新的 centos
镜像:
docker pull centos
删除本地一个或多少镜像:
docker rmi [OPTIONS] IMAGE [IMAGE...]
常用选项:
- -f: 强制删除(如:如果有容器正在使用该镜像,可以通过此强制删除)
- --no-prune: 不移除该镜像的过程镜像,默认移除
如删除全部镜像:
docker rmi -f $(docker images -aq)
# 容器命令
创建一个新的容器并运行一个命令:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
常用选项:
- --name: 为容器指定一个名称
- -i: 以交互模式运行容器
- -t: 为容器重新分配一个伪输入终端
- -d: 后台运行容器,并返回容器 ID
- -P: 随机端口映射,容器内部端口随机映射到主机的端口
- -p: 指定端口映射,格式为:主机(宿主)端口:容器端口
根据上面拉取的 centos
镜像创建一个容器:
docker run -it centos
在容器中使用命令 exit
可以退出并关闭容器,如果想只退出但保持容器的运行的话,可以使用:Ctrl + p + q
。
当然,也可以直接以后台运行的模式启动一个容器:
docker run -d centos
WARNING
如果直接运行上面的命令,容器启动后会自动退出,因为 Docker 容器在后台运行,就必须对应有一个前台进程。
通常,后台运行一个容器时会将运行的程序以前台进程的形式运行。
docker run -d --name mycentos centos /bin/sh -c "while true; do echo Hello world; sleep 2; done"
列出容器:
docker ps [OPTIONS]
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d3b9c4580162 centos "/bin/bash" 2 minutes ago Up 2 minutes focused_curie
# 容器 ID 使用的镜像 启动容器时运行的命令 容器的创建时间 容器状态 端口信息和使用的连接类型 容器名称
容器的状态包括:created(已创建)、restarting(重启中)、running(运行中)、removing(迁移中)、paused(暂停)、exited(停止)、dead(死亡)。
常用选项:
- -a: 显示所有的容器,包括未运行的
- -l: 显示最近创建的容器
- -n: 列出最近创建的 n 个容器
- -q: 静默模式,只显示容器编号
- -f: 根据条件过滤显示的内容
- --format: 指定返回值的模板文件
- --no-trunc: 不截断输出
- -s: 显示总的文件大小
重启/停止/启动容器:
# 重启容器
docker restart [OPTIONS] CONTAINER [CONTAINER...]
# 停止一个运行中的容器
docker stop [OPTIONS] CONTAINER [CONTAINER...]
# 启动一个或多个已经被停止的容器
docker start [OPTIONS] CONTAINER [CONTAINER...]
强制停止可以使用,或者说杀掉一个运行中的容器:
docker kill [OPTIONS] CONTAINER [CONTAINER...]
删除一个或多个容器:
docker rm [OPTIONS] CONTAINER [CONTAINER...]
常用选项:
- -f: 通过 SIGKILL 信号强制删除一个运行中的容器
- -l: 移除容器间的网络连接,而非容器本身
- -v: 删除与容器关联的卷
删除多个容器除了一个个列举外,也可以参考下面的命令:
docker rm -f $(docker ps -aq)
# 或者
docker ps -aq | xargs docker rm
# 其它
获取容器的日志:
docker logs [OPTIONS] CONTAINER
常用选项:
- -f: 跟踪日志输出
- -t: 显示时间戳
- --tail: 仅列出最新 N 条容器日志
- --since: 显示某个开始时间的所有日志
如查看容器 mycentos
从 2020 年 1 月 1 日后的最新 10 条日志:
docker logs --since="2020-01-01" --tail=10 mycentos
查看容器内的进程:
容器运行时不一定有 /bin/bash
终端来交互执行 top
命令,而且容器还不一定有 top
命令,因此可以使用下面的命令来查看容器中正在运行的进程:
docker top [OPTIONS] CONTAINER [ps OPTIONS]
获取容器/镜像的元数据:
docker inspect [OPTIONS] NAME|ID [NAME|ID...]
常用选项:
- -s: 显示总的文件大小
- -f: 指定返回值的模板文件
- --type: 为指定类型返回 JSON
连接到正在运行中的容器:
docker attach [OPTIONS] CONTAINER
使用下面的命令可以达到同样的目的:
docker exec -it mycentos /bin/bash
通过 docker exec
还可以直接在运行的容器中执行命令而不用进入容器。
docker exec -t mycentos ls
也就是说 attach
是直接进入容器启动命令的终端,不会启动新的进程;而 exec
是在容器中打开新的终端,并且可以启动新的进程。
拷贝容器内的文件到主机上:
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH
比如将容器 96f7f14e99ab
的 /www
目录拷贝到主机的 /tmp
目录中:
docker cp 96f7f14e99ab:/www /tmp/