Docker命令
1. 基础命令
docker login
登录到一个 Docker 镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub。
shell
docker login [options] [server]
选项:
- -u: 登录的用户名。
- **-p:**登录的密码(不建议使用)。
这两个选项是用于在命令行中提前指定登录的账号和密码,即使不提前输入,后续在 login 的中途也要输入。且使用 -p 选项提前输入密码,会导致密码信息存储在 history 中,有安全隐患。
docker logout
登出一个 Docker 镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub。
shell
docker logout
docker pull
从镜像仓库中拉取或更新指定镜像。 如果是拉取知名镜像,建议进入 Docker Hub 网站浏览相关镜像的命令。
shell
docker pull [options] [name:tag] #或 [name@digest]
选项:
- -a: 拉取所有 tagged 镜像。
- --disable-content-trust: 忽略镜像的校验,默认开启(有的仓库不是向所有人开放的)。
name@digest\] 是通过 digest 来拉取镜像的方法,但实际不推荐使用,因为 tag 能够清晰地显示镜像的版本,而 digest 又长又不够清晰。
docker push
将本地的镜像上传到镜像仓库,需要先登录到镜像仓库。如果要上传到自己的镜像仓库,需要到 Docker Hub 上注册一个。且如果是 push 从官方或社区拉取的镜像,还需要使用 docker tag 命令标记别名后才能上传(否则会上传到官方或社区的仓库,但又因为账号没有上传的权限而失败)。
shell
docker push [options] [name:tag]
选项:
- -a: 推送所有 tagged 镜像。
- --disable-content-trust: 忽略镜像的校验,默认开启。
docker search
从 Docker Hub 查找镜像,因为使用网页浏览的方法更方便,所以不推荐使用。
shell
docker search [options] [name]
- --no-trunc: 显示完整的镜像描述。
- -f [过滤条件]: 过滤一些信息。
2. 镜像命令
docker images
用于列出本地镜像。
shell
docker images [options] [repository[:tag]]
选项:
- -a: 列出本地所有的镜像(含中间映像层)。
- --digests: 显示镜像的摘要信息。
- --format: 指定返回值的模板文件。
- --no-trunc: 显示完整的镜像信息。
- -q: 只显示镜像 ID。
列出本地所有镜像:
shell
docker images
列出本地镜像中为 nginx 的镜像列表:
shell
docker images nginx
docker image inspcet
用于查看镜像的详细信息。
shell
docker image inspect [image:tag]
如:
shell
docker image inspect nginx:1.23.3
docker tag
标记本地镜像,将其归入某一仓库,从官方或社区拉取的镜像,需要进行 docker tag 之后才可以更新到自己的镜像仓库中。
shell
docker tag [source_image:tag] [target_image:tag]
docker rmi
docker rmi 用于删除一个镜像。注意,如果一个或多个容器在使用要删除的镜像,需要使用 docker rm
将使用镜像的容器全部删除,再删除镜像,不建议使用 -f
强制删除镜像。
shell
docker rmi [options] [image]
选项:
- -f: 强制删除。
- --no-prune: 不移除该镜像的过程镜像,默认移除。
docker save
用于将镜像打包成 .tar
文件保存到当前目录。
shell
docker save -o [file.tar] [image]
也可以写成
shell
docker [image] save -o [file.tar]
选项:
- -o: 自定义输出到的文件名。
docker load
用于将 docker save
打包的镜像导入。
shell
docker load [options]
选项:
- **-i,--input:**指定导入的文件。
- -q,--quiet: 精简输出信息。
docker history
用于显示镜像的历史信息。
shell
docker history [options]
选项:
- -H,--humam: 大小和日期采用人类易读的格式显示。
- --no-trunc: 显示全部信息,不截断。
- -q,--quiet: 只显示镜像 id 信息。
docker image prune
用于删除不使用的镜像。
shell
docker image prune [options]
选项:
- -a,--all: 删除全部不使用的镜像(包括一个容器都不使用的镜像)。
- --filter [filter]: 指定过滤条件。
- -f,--force: 不提示是否删除。
docker import
用于将 .tar
格式的容器导入。docker import
于 docker load
的区别是,load 是镜像进行归档文件之间的转换,而 import 是容器进行归档文件的转换,import 导出的容器的元数据会全部丢失。
shell
docker import [options] [file.tar]
选项:
- -c: 应用 docker 指令创建镜像。
- -m: 提交时的说明文字。
3. 容器命令
docker create
创建一个新的容器。注意 docker create
没有 -d
选项。
shell
docker create [options] [image[arg...]]
选项:
-
-i: 以交互模式运行容器,通常与 -t 同时使用。
-
-P: 随机端口映射,容器内部端口随机映射到主机的端口。
-
-p: 指定端口映射,格式为:主机端口:容器端口。
如果不使用 -p 或 -P,容器的网络相当于是与外部隔绝的。
-
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用。
如果不使用 -i 在终端中输入的字符将不能传输到容器中。
-
--name="newname": 为容器指定一个名称。
如果不指定名字,在 docker ps 命令中打印出来的将是 docker 为我们取的随机名字。
-
-h "hostname": 指定容器的 hostname。
-
-e env="val": 向容器设置一个名为 env 值为 val 的环境变量。
-
--cpuset-cpus="0-2" or --cpuset-cpus="0,1,2": 绑定容器到指定 CPU 运行。
-
**-m :**设置容器使用内存最大值。
-
--network="bridge": 指定容器的网络连接类型。
-
--link=[]: 添加链接到另一个容器。
意味着被连接的容器可进行局域网通信,这种连接是单向的。
-
--volume , -v: 绑定一个卷。
-
--rm :shell 退出的时候自动删除容器。
docker run
创建一个新的容器并运行一个命令。
shell
docker run [options] [image command arg...]
选项:
-
-d: 后台运行容器,并返回容器 ID。
-
-i: 以交互模式运行容器,通常与 -t 同时使用。
-
-P: 随机端口映射,容器内部端口随机映射到主机的端口。
-
-p: 指定端口映射,格式为:主机端口:容器端口。
如果不使用 -p 或 -P,容器的网络相当于是与外部隔绝的。
-
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用。
如果不使用 -i 在终端中输入的字符将不能传输到容器中。
-
--name="newname": 为容器指定一个名称。
如果不指定名字,在 docker ps 命令中打印出来的将是 docker 为我们取的随机名字。
-
-h "hostname": 指定容器的 hostname。
-
-e env="val": 向容器设置一个名为 env 值为 val 的环境变量。
-
--cpuset-cpus="0-2" or --cpuset-cpus="0,1,2": 绑定容器到指定 CPU 运行。
-
**-m :**设置容器使用内存最大值。
-
--network="bridge": 指定容器的网络连接类型。
-
--link=[]: 添加链接到另一个容器。
意味着被连接的容器可进行局域网通信,这种连接是单向的。
-
--volume , -v: 绑定一个卷。
-
--rm :shell 退出的时候自动删除容器。
docker ps
主要用于打印容器信息等功能。
shell
docker ps [options]
- -a : 显示所有的容器,包括未运行的。
- -f : 根据条件过滤显示的内容。
- --format : 指定返回值的模板文件。如 json 或者 table。
- -l : 显示 latest 的容器。
- -n : 列出最近创建的 n 个容器。
- --no-trunc : 不截断输出。
- -q : 静默模式,只显示容器编号。
- -s : 显示总的文件大小。
docker log
用于查看容器的日志信息。
shell
docker log [options] [container]
选项:
- -f,--follow: 持续实时输出日志信息。
- --since: 显示从某个时间开始的所有日志,如
2025-1-30
。 - -t,--timestamps: 显示时间戳。
- -n,--tail: 仅显示最新 n \text n n 条日志。
docker attach
用于连接到正在运行中的容器。
shell
docker attach [options] [container]
选项:
- --sig-proxy=[bool]: 是否将所有信号代理,默认是 true ,如果设置为 false,退出时(如按下 Ctrl+C)就不会影响容器。
docker exec
在容器中执行命令。如果只使用 -it
选项,则于 docker attach
行为相同。如果 -it
后跟上其他命令,则执行完命令后就回到容器外,而不是 hang 入容器。
shell
docker exec [options] [command [arg...]]
选项:
- -d: 分离模式,程序在后台运行。
- -i: 即使没有附加也保持
STDIN
打开。 - -t: 分配一个伪终端。
- -e: 设置环境变量。
- -u,--user: 指定用户
<name|uid>[:group|gid]
。 - -w,--workdir: 指定工作目录,即进入容器后的目录。
docker start
用于启动停止的容器。
shell
docker start [container]
docker stop
用于停止运行中的容器。注意 docker stop
发送的是 SIGTERM
信号,docker log
会提示容器 gracefully shutting down。
shell
docker stop [options] [container]
选项:
- -s: 发送信号。
docker restart
用于重启运行中的容器。
shell
docker restart [options] [container]
选项:
- -s: 发送信号。
docker kill
用于强制退出容器。注意 docker kill
发送的是 SIGKILL
信号,docker 会来不及保存或输出任何信号就退出。
shell
docker kill [options] [container]
选项:
- -s: 发送的信号。
docker top
用于查看容器中运行的进程信息,支持 ps
命令的选项。
shell
docker top [ps options]
选项:
docker stats
用于查看容器的资源使用情况,包括 CPU、内存、网络 I/O 等。
shell
docker stats [options] [container...]
选项:
- **-a,--all:**显示所有的容器,包括未运行的。
- --format: 指定返回的模板文件。如 table、json
- --no-stream: 只显示一条当前状态信息(不反复刷新)。
- --no-trunc: 不截断输出。
CONTAINER ID 和 NAME 为容器 ID 和名称。
CPU% 和 MEM% 为容器的 CPU 和 内存使用百分比。
MEM USAGE/LIMIT 为容器正在使用的总内存/允许使用的内存总量。
BLCOK I/O 为容器从主机上的块设备读取和写入的数据量。
PIDs 为容器创建的进程和线程数。
docker container inspect
用于查看容器的详细信息,如果不指定容器会自动获取。
shell
docker container inspect [options] [container]
选项:
- -f: 指定返回值的模板文件。如 table、json。
- -s: 显示总的文件大小。
docker port
用于显示指定容器的端口映射。
shell
docker port [container]
0.0.0.0
表示 IPv4。
[::]
表示 IPv6。
docker cp
用于在容器和宿主机之间拷贝文件。
shell
docker cp [container:src_path] [dest_path] #拷贝容器文件到宿主机
docker cp [src_path] [container:dest_path] #拷贝宿主机文件到容器
docker diff
检查容器里文件结构的更改。
shell
docker diff [container]
docker commit
从容器创建一个新的镜像。
shell
docker commit [options] [container [repository:tag]]
选项:
- -a: 提交的镜像作者。
- -c: 使用 Dockerfile 指令来创建镜像,可以修改启动指令。
- -m: 提交时的说明文字。
- -p: 在 commit 时,将容器停止。
docker pause
用于暂停容器中所有的进程。
shell
docker pause [container]
docker unpause
用于恢复容器中所有暂停的进程。
shell
docker unpause [container]
docker rm
删除停止的容器。
shell
docker rm [options] [container]
选项:
- -f: 通过
SIGKILL
信号强制删除一个运行中的容器。
删除所有停止的容器:
shell
docker rm $(docker ps -a -p)
docker export
用于导出容器内容为 .tar
文件。
shell
docker export [options] [container]
选项:
- -o: 指明写入文件的名字。
docker wait
用于阻塞等待指定运行中的容器停止,并打印出它的退出码。
shell
docker wait [container]
docker rename
用于重命名容器。
shell
docker rename [container] [new_name]
docker container prune
用于删除所有停止的容器。
shell
docker container prune [options]
选项:
- -f,--force: 不提示是否确认操作。
docker update
用于更新容器的配置。
shell
docker update [options] [container]
选项:
- --cpus: cpu 数量。
- --cpuset-cpus: 使用哪些 cpu。
- --memory: 内存限制。
- --memory-swap: 交换内存。
- --cpu-period: 是用来指定容器对 CPU 的使用要在多长时间内做一次重新分配。
- --cpu-quota: 是用来指定在这个周期内,最多可以有多少时间用来跑这个容器。
4. 容器的批量处理
根据名称过滤得到容器编号:
shell
docker container ls -qf name=xxx
-q 表示只输出容器 ID。
根据状态过滤容器信息:
shell
docker container ls --filter status=running
静默获取全部容器 ID:
shell
docker container ls -aq
-a 表示 all 显示包括不运行的容器,-q 表示只输出容器 ID。
过滤镜像名或 ID 为 xxx 的容器信息:
shell
docker container ls --filter ancestor=xxx
其他:
docker 的命令都可以通过 ```````` 达到类似于管道的效果,如启动所有容器可以用:
shell
docker run 'docker ps -a'