Docker命令

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 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 importdocker 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 IDNAME 为容器 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'
相关推荐
两点王爷1 小时前
docker 运行自定义化的服务-后端
运维·docker·容器
邪恶的贝利亚2 小时前
FFMEPG常见命令查询
linux·运维·网络·ffmpeg
搜搜秀2 小时前
find指令中使用正则表达式
linux·运维·服务器·正则表达式·bash
弧襪3 小时前
Ubuntu vs CentOS:Shell 环境加载机制差异分析
linux·ubuntu·centos
七七powerful3 小时前
使用opentelemetry 可观测监控springboot应用的指标、链路实践,使用zipkin展示链路追踪数据,使用grafana展示指标
运维
Archie_IT4 小时前
修图自由!自建IOPaint服务器,手机平板随时随地远程调用在线P图
运维·服务器·前端·git·深度学习·npm·conda
行思理4 小时前
centos crontab 设置定时任务访问链接
linux·运维·centos
阳光明媚大男孩4 小时前
24.0.2 双系统ubuntu 安装显卡驱动黑屏,系统启动界面键盘失灵
linux·ubuntu·计算机外设
无名之逆4 小时前
[特殊字符] Hyperlane:为现代Web服务打造的高性能Rust文件上传解决方案
服务器·开发语言·前端·网络·后端·http·rust
再玩一会儿看代码5 小时前
[特殊字符] 深入理解 WSL2:在 Windows 上运行 Linux 的极致方案
linux·运维·windows·经验分享·笔记·学习方法