Docker常用命令
1、本地镜像管理
save
命令
将一个或多个 Docker 镜像保存到一个 tar 归档文件中,以便在其他环境中分发或备份。
# 语法:docker save [OPTIONS] IMAGE [IMAGE...]
# 保存单个镜像到文件
docker save -o myimage.tar myimage:latest
# 保存多个镜像到同一个文件
docker save -o multiple_images.tar image1:latest image2:latest
# 注意:
# 1、保存镜像时,会包含镜像的所有层,因此生成的 tar 文件可能会很大。
# 2、如果保存多个镜像到同一个文件中,使用 docker load 命令时会加载所有包含的镜像。
# 3、为了减少文件大小,可以在保存前使用 docker image prune 命令清理未使用的镜像和层。
load
命令
用于从由 docker save
命令生成的 tar 文件中加载 Docker 镜像。
# 语法:docker load [OPTIONS]
# 从文件加载镜像
docker load -i myimage.tar
# 从标准输入加载镜像
cat myimage.tar | docker load
# 参数:
# -i, --input: 指定输入文件的路径
# -q, --quiet: 安静模式,减少输出信息
build
命令
用于从 Dockerfile 构建 Docker 镜像。
docker build
命令通过读取 Dockerfile 中定义的指令,逐步构建镜像,并将最终结果保存到本地镜像库中。
# 语法:docker build [OPTIONS] PATH | URL | -
常用参数:
PATH
: 包含 Dockerfile 的目录路径或 .(当前目录)URL
: 指向包含 Dockerfile 的远程存储库地址(如 Git 仓库)-
: 从标准输入读取 Dockerfile
常用选项:
- -t, --tag: 为构建的镜像指定名称和标签
- -f, --file: 指定 Dockerfile 的路径(默认是 PATH 下的 Dockerfile)
- –build-arg: 设置构建参数
- –no-cache: 不使用缓存层构建镜像
- –rm: 构建成功后删除中间容器(默认开启)
- –force-rm: 无论构建成功与否,一律删除中间容器
- –pull: 始终尝试从注册表拉取最新的基础镜像
更多选项:
--build-arg=[]
: 设置构建镜像时的变量--cpu-shares
: 设置 CPU 使用权重-f
: 指定 Dockerfile 的路径--force-rm
: 强制在构建过程中删除中间容器--isolation
: 使用指定的容器隔离技术--label=[]
: 设置镜像的元数据-m
: 设置内存的最大值--memory-swap
: 设置交换空间的最大值(内存 + 交换空间),-1
表示不限制交换空间--no-cache
: 构建镜像时不使用缓存--shm-size
: 设置/dev/shm
的大小,默认值为 64M--ulimit
: 设置 Ulimit 配置--network
: 在构建期间设置RUN
指令的网络模式,默认值为default
其它命令
docker images
命令用于列出本地的 Docker 镜像。
2、容器生命周期管理
run
命令
docker run 命令用于创建并启动一个新的容器。
# 语法:docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
常用参数:
-d
: 后台运行容器并返回容器 ID。-it
: 交互式运行容器,分配一个伪终端。--name
: 给容器指定一个名称。-p
: 端口映射,格式为host_port:container_port
。-v
: 挂载卷,格式为host_dir:container_dir
。--rm
: 容器停止后自动删除容器。--env
或-e
: 设置环境变量。--network
: 指定容器的网络模式。--restart
: 容器的重启策略(如no
、on-failure
、always
、unless-stopped
)。-u
: 指定用户。
简单示例
# 1. 基本使用
docker run ubuntu # 拉取 ubuntu 镜像并在前台启动一个容器。
# 2. 后台运行容器
docker run -d ubuntu # 在后台运行 ubuntu 容器并返回容器 ID。
# 3. 交互式运行并分配终端
docker run -it ubuntu /bin/bash # 以交互模式运行 ubuntu 容器,并启动一个 Bash shell。
# 4. 指定容器名称
docker run --name my_container ubuntu # 运行一个 ubuntu 容器,并将其命名为 my_container。
# 5. 端口映射
docker run -p 8080:80 nginx # 将本地主机的 8080 端口映射到容器内的 80 端口,运行 nginx 容器。
# 6. 挂载卷
docker run -v /host/data:/container/data ubuntu # 将主机的 /host/data 目录挂载到容器内的 /container/data 目录。
# 7. 设置环境变量
docker run -e MY_ENV_VAR=my_value ubuntu # 设置环境变量 MY_ENV_VAR 的值为 my_value,运行 ubuntu 容器。
# 8. 使用网络模式
docker run --network host nginx # 使用主机的网络模式运行 nginx 容器。
# 9. 指定重启策略
docker run --restart always nginx # 设置容器的重启策略为 always,即使容器停止也会自动重启。
# 10. 指定用户
docker run -u user123 ubuntu # docker run -u user123 ubuntu
# 11. 组合多个选项
docker run -d -p 8080:80 -v /host/data:/data --name webserver nginx
# 后台运行一个命名为 webserver 的 nginx 容器,将主机的 8080 端口映射到容器的 80 端口,并将主机的 /host/data 目录挂载到容器的 /data 目录。
exec
命令
docker exec
命令用于在运行中的容器内执行一个新的命令。这对于调试、运行附加的进程或在容器内部进行管理操作非常有用。
# 语法:docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
常用参数
-d, --detach
: 在后台运行命令。-i, --interactive
: 保持标准输入打开。--workdir, -w
: 指定命令的工作目录。-t, --tty
: 分配一个伪终端。--privileged
: 给这个命令额外的权限。-e, --env
: 设置环境变量。--env-file
: 从文件中读取环境变量。
简单示例
# 1、在容器内运行命令,在运行中的 my_container 容器内执行 ls /app 命令,列出 /app 目录的内容。
docker exec my_container ls /app
# 2、以交互模式运行命令,注意不一定是/bin/bash,可能是/bin/sh、sh、bash等等
docker exec -it my_container /bin/bash
# 在运行中的 my_container 容器内启动一个交互式的 Bash shell。-i 保持标准输入打开,-t 分配一个伪终端。
# 后台运行命令,在运行中的 my_container 容器内后台执行 touch /app/newfile.txt 命令,创建一个新文件。
docker exec -d my_container touch /app/newfile.txt
# 3、设置环境变量,在运行中的 my_container 容器内执行 env 命令,并设置环境变量 MY_ENV_VAR 的值为 my_value。
docker exec -e MY_ENV_VAR=my_value my_container env
# 4、以指定用户身份运行命令,在运行中的 my_container 容器内以 user123 用户身份执行 whoami 命令。
docker exec -u user123 my_container whoami
# 5、指定工作目录,在运行中的 my_container 容器内以 /app 目录为工作目录执行 pwd 命令。
docker exec -w /app my_container pwd
使用场景
- 调试容器: 进入容器内部进行调试和排查问题。
- 管理任务: 在容器内运行附加的管理任务或维护操作。
- 监控和检查: 在容器内执行监控和检查命令,获取运行状态和日志。
create
命令
docker create
命令用于创建一个新的容器,但不会启动它。
docker create
命令会根据指定的镜像和参数创建一个容器实例,但容器只会在创建时进行初始化,并不会执行任何进程。
具体用法同 docker run
是一样的。
其它命令
docker start 命令用于启动一个或多个已经创建的容器。
参数:
-a
: 附加到容器的标准输入输出流。-i
: 附加并保持标准输入打开。
docker stop 命令用于停止一个运行中的容器。
参数:
- -t, --time: 停止容器之前等待的秒数,默认是 10 秒。
docker restart 命令用于重启容器。
docker kill 命令用于立即终止一个或多个正在运行的容器。
docker rm 命令用于删除一个或多个已经停止的容器。
docker pause - 暂停容器中所有的进程。
docker unpause - 恢复容器中所有的进程。
暂停的容器不会被终止,但其进程将被挂起,直到容器被恢复。这在需要临时暂停容器活动的情况下非常有用。
使用场景
- 临时暂停活动: 当需要临时暂停容器中的所有活动以进行系统维护或资源管理时,可以使用
docker pause
。 - 资源管理: 在需要重新分配系统资源时,暂停不必要的容器以释放资源。
- 调试和故障排除: 在调试或故障排除过程中暂停容器以分析当前状态。
- 临时暂停活动: 当需要临时暂停容器中的所有活动以进行系统维护或资源管理时,可以使用
docker rename 命令用于重命名已存在的容器。允许在不停止或删除容器的情况下,直接修改容器的名称。
3、容器操作
ps
命令
docker ps 命令用于列出 Docker 容器。
默认情况下,docker ps 命令只显示运行中的容器,但也可以通过指定选项来显示所有容器,包括停止的容器。
# 语法:docker ps [OPTIONS]
OPTIONS 说明:
-a, --all
: 显示所有容器,包括停止的容器。-q, --quiet
: 只显示容器 ID。-l, --latest
: 显示最近创建的一个容器,包括所有状态。-n
: 显示最近创建的 n 个容器,包括所有状态。--no-trunc
: 不截断输出。-s, --size
: 显示容器的大小。--filter, -f
: 根据条件过滤显示的容器。--format
: 格式化输出。
实例
# 1、显示最近创建的一个容器
docker ps -l
# 2、显示最近创建的 n 个容器
docker ps -n 3
# 3、显示容器的大小
docker ps -s
inspect
命令
docker inspect
命令用于获取 Docker 对象(容器、镜像、卷、网络等)的详细信息。
docker inspect
命令返回 JSON 格式的详细信息,可以帮助用户了解对象的配置和状态。
# 语法:docker inspect [OPTIONS] NAME|ID [NAME|ID...]
OPTIONS 说明:
-f, --format
: 使用 Go 模板语法格式化输出。--type
: 返回指定类型的对象信息(可选类型:container
、image
、network
、volume
)。
使用场景
- 调试容器: 获取容器的详细配置信息,以便进行调试和排查问题。
- 查看网络配置: 查看容器的网络配置信息,了解其网络连接状态。
- 监控资源: 获取容器的资源配置信息和使用情况,便于进行资源管理和监控。
- 脚本自动化: 在自动化脚本中使用
docker inspect
获取对象的详细信息,以进行后续操作。
top
命令
docker top
命令用于显示指定容器中的正在运行的进程。
docker top
命令类似于 Linux 中的 top
或 ps
命令,它帮助用户查看容器内的进程信息,便于监控和调试容器内的活动。
# 语法:docker top [OPTIONS] CONTAINER [ps OPTIONS]
使用自定义 ps 选项:
docker top my_container -o pid,comm
常用场景
- 监控容器内部活动: 通过查看容器内的进程,用户可以监控容器内部正在运行的应用程序和服务。
- 调试和排查问题: 当容器出现问题时,可以通过
docker top
命令查看容器内的进程,帮助排查问题。 - 资源管理: 了解容器内的进程和资源使用情况,便于进行资源管理和优化。
logs
命令
docker logs
命令用于获取和查看容器的日志输出。
docker logs
命令非常有用,可以帮助用户调试和监控运行中的容器。
# 语法:docker logs [OPTIONS] CONTAINER
常用选项:
-f, --follow
: 跟随日志输出(类似于tail -f
)。--since
: 从指定时间开始显示日志。-t, --timestamps
: 显示日志时间戳。--tail
: 仅显示日志的最后部分,例如--tail 10
显示最后 10 行。--details
: 显示提供给日志的额外详细信息。--until
: 显示直到指定时间的日志。
实例
# 1、显示带时间戳的日志
docker logs -t my_container
# 2、从指定时间开始显示日志
docker logs --since="2023-07-22T15:00:00" my_container
# 3、显示直到指定时间的日志
docker logs --until="2023-07-22T16:00:00" my_container
cp
命令
docker cp
命令用于在 Docker 容器和宿主机之间复制文件或目录。
docker cp
命令支持从容器到宿主机,或从宿主机到容器的文件复制操作。
# 语法
docker cp [OPTIONS] SRC_PATH CONTAINER:DEST_PATH
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH
SRC_PATH
: 源路径(可以是容器内的路径或宿主机的路径)。CONTAINER
: 容器的名称或 ID。DEST_PATH
: 目标路径(可以是容器内的路径或宿主机的路径)。
# 1、从容器复制文件到宿主机
docker cp my_container:/path/in/container /path/on/host
# 2、从宿主机复制文件到容器
docker cp /path/on/host my_container:/path/in/container
注意
在处理大文件或大目录时,复制操作可能需要一些时间。且宿主机或容器中应有足够的权限进行写入操作。
其它命令
docker attach
命令用于附加到正在运行的 Docker 容器的标准输入、输出和错误输出(stdin、stdout、stderr)。允许用户直接与容器交互,就像与正在运行的进程交互一样。docker events
命令用于实时获取 Docker 守护进程生成的事件。允许用户监控 Docker 容器、镜像、网络和卷的各种操作事件,例如创建、启动、停止、删除等。docker export
命令用于将 Docker 容器的文件系统导出为一个 tar 归档文件。用于备份或迁移容器的文件系统,而不包括 Docker 镜像的所有层和元数据。docker port
命令用于显示容器的端口映射信息,即容器内部的端口如何映射到宿主机的端口。docker stats
命令用于实时显示 Docker 容器的资源使用情况,包括 CPU、内存、网络 I/O 和块 I/O。docker update
命令用于更新 Docker 容器的资源限制,包括内存、CPU 等。docker commit
命令用于将容器的当前状态保存为一个新的 Docker 镜像。通常用于创建镜像来保存容器的状态,以便在将来可以重用或分发该镜像。
4、网络命令
docker network ls
: 列出所有网络。docker network create <network>
: 创建一个新的网络。docker network rm <network>
: 删除指定的网络。docker network connect <network> <container>
: 连接容器到网络。docker network disconnect <network> <container>
: 断开容器与网络的连接。
5、卷命令
docker volume ls
: 列出所有卷。docker volume create <volume>
: 创建一个新的卷。docker volume rm <volume>
: 删除指定的卷。docker volume inspect <volume>
: 显示卷的详细信息。