常用 Docker 命令备份

1. docker build -- 从 file 到 image

docker build -t my-ubuntu:enhanced -f Dockerfile.ubuntu-enhanced .

说明 :这是 Docker 中用于构建镜像的核心命令。

  • docker build:触发镜像构建流程。
  • -t my-ubuntu:enhanced-t 标志用于指定构建成功后新镜像的名称和标签,格式为 <镜像名>:<标签>。这里的 my-ubuntu 是镜像名称,enhanced 是标签。
  • -f Dockerfile.ubuntu-enhanced-f 标志指定用于构建的 Dockerfile 文件路径。如果不使用此选项,默认使用当前目录下名为 Dockerfile 的文件。
  • .:这个点代表构建上下文 的路径,即 Dockerfile 中指令(如 COPY)的相对根目录。通常设置为 Dockerfile 所在的当前目录。

2. docker images -- 罗列所有镜像

docker images | grep my-ubuntu:enhanced

说明 :用于列出并筛选本地 Docker 镜像

  • docker images:列出所有已下载到本地的 Docker 镜像,包括镜像名、标签、镜像 ID、创建时间和大小。
  • | grep my-ubuntu:enhanced| 是管道符,将前一个命令的输出作为后一个命令的输入。grep 命令用于筛选文本行,这里会显示所有包含"my-ubuntu:enhanced"字符串的镜像信息行,用于快速确认镜像是否构建成功。

3. docker run -- 从 image 到 container

docker run -it --name ros_installer my-ubuntu:enhanced /bin/bash

说明 :用于创建并启动一个新的容器

  • docker run:创建并运行一个新容器。
  • -it:这是两个标志的组合。
    • -i--interactive):保持标准输入(STDIN)打开,允许你与容器交互。
    • -t--tty):分配一个伪终端(pseudo-TTY),让你获得一个类似终端的命令行界面。通常 -it 一起使用以实现交互式会话。
  • --name ros_installer:为即将启动的容器指定一个名称 ros_installer,方便后续通过名称引用该容器(如停止、查看日志)。
  • my-ubuntu:enhanced:指定用于创建容器的镜像。这里使用之前构建的 my-ubuntu:enhanced 镜像。
  • /bin/bash:容器启动后要执行的命令。这里是指定容器内的 Bash shell 作为交互式程序。

4. docker commit -- 从 comtainer 到 image

docker commit ros_installer my-ubuntu:trans

说明 :用于将容器的当前状态保存为一个新的镜像

  • docker commit:提交容器的更改,创建一个新的镜像层。
  • ros_installer:指定要被保存状态的源容器的名称(也可以是容器 ID)。这个容器必须是已创建(运行中或已停止均可)的。
  • my-ubuntu:trans:为新创建的镜像指定名称和标签,格式为 <镜像名>:<标签>。这里镜像名为 my-ubuntu,标签为 trans。这个新镜像会包含源容器 ros_installer 文件系统的所有更改,但不会包含其挂载的数据卷。

5. docker stop -- 停止 container

docker stop ros_installer

说明 :用于停止一个正在运行的容器

  • docker stop:发送 SIGTERM 信号给容器内的主进程,要求其优雅停止。如果在超时时间(默认10秒)后仍未停止,则发送 SIGKILL 信号强制终止。
  • ros_installer:指定要停止的容器的名称(也可以是容器 ID)。

6. docker rm -- 删除 container

docker rm ros_installer

说明 :用于删除一个已停止的容器

  • docker rm:移除一个或多个已停止的容器。
  • ros_installer:指定要删除的容器的名称(也可以是容器 ID)。
  • 注意 :只能删除已停止(Exited 状态)的容器。如果要删除正在运行的容器,需要先执行 docker stop 停止它,或者使用 docker rm -f 强制删除。

7. docker save -- 从 image 到 tar

docker save -o ready_to_trans.tar my-ubuntu:trans

说明 :用于将一个或多个镜像打包导出为 tar 归档文件

  • docker save:将指定镜像及其所有层、元数据保存到一个 tar 文件中。
  • -o ready_to_trans.tar-o 标志指定输出文件的路径和名称。这里将打包文件保存为当前目录下的 ready_to_trans.tar
  • my-ubuntu:trans:指定要导出的镜像的名称和标签(也可以是镜像 ID)。此命令导出的是整个 my-ubuntu:trans 镜像。

8. docker load -- 从 tar 到 image

docker load -i /path/to/usb/ready_to_trans.tar

说明 :用于从 tar 归档文件加载镜像到本地 Docker 环境

  • docker load:从一个 tar 文件或标准输入(STDIN)中加载镜像。
  • -i /path/to/usb/ready_to_trans.tar-i 标志指定输入文件的路径。这里是从 U 盘路径 /path/to/usb/ready_to_trans.tar 读取 tar 文件并加载其中的镜像。
  • 注意 :此命令与 docker import 不同,load 是恢复由 docker save 导出的完整镜像(包含所有历史和层),而 import 是从一个容器文件系统快照创建一个新镜像。

9. docker run -- 进入到容器终端

docker run -it --rm my-ubuntu:trans /bin/bash

说明:创建并启动一个新容器,并在退出后自动删除它。

  • docker run -it:如前所述,创建并交互式运行容器。
  • --rm:一个重要的标志,表示容器在停止(退出)后会自动被删除。这适用于运行一次性任务或测试,避免留下大量停止状态的容器占用磁盘空间。
  • my-ubuntu:trans:指定用于创建容器的镜像。
  • /bin/bash:容器启动后执行的命令。

10. docker pull -- 从仓库拉取镜像

docker pull hello-world

说明 :用于从镜像仓库下载(拉取)一个镜像到本地

  • docker pull:从默认的 Docker 镜像仓库(通常是 Docker Hub)拉取指定的镜像。
  • hello-world:指定要拉取的镜像的名称。这是一个特殊的、极小的测试镜像,常用于验证 Docker 是否正确安装和运行。当只提供镜像名时,默认会拉取标签为 latest 的版本。

docker search ubuntu --filter "is-official=true"

说明 :用于在 Docker Hub 等镜像仓库中搜索镜像

  • docker search:在连接的镜像仓库(默认为 Docker Hub)中搜索与给定关键词匹配的公共镜像。
  • ubuntu:搜索的关键词。Docker 会返回所有名称或描述中包含 "ubuntu" 的镜像列表。
  • --filter "is-official=true"--filter 标志用于对搜索结果进行筛选。is-official=true 是一个过滤器,它限制返回的结果只显示官方(Official)镜像。官方镜像由 Docker 官方或上游软件供应商维护,通常更可靠。

12. docker ps -a -- 查看 container

说明 :用于列出所有容器,包括正在运行的和已停止的。

  • docker ps:Docker 中用于列出容器 的基础命令。不加任何参数时,默认只显示当前正在运行(Up 状态)的容器。
  • -a-a--all 的简写,这是该命令最常用的标志之一。加上此标志后,docker ps 会列出所有状态的容器 ,包括:
    • 正在运行的容器(Up
    • 已退出的容器(Exited
    • 已创建但未启动的容器(Created

13. docker start -- 启动已停止的容器

docker start abc123 :用来重新启动已停止(Exited)的容器,使其从停止状态恢复到运行状态。

说明 :用于启动一个或多个已停止的容器

  • docker start:Docker 中用于启动容器 的基础命令。该命令会重新启动指定的容器,使其从停止状态(ExitedCreated 等)转换为运行状态(Up)。
  • abc123:目标容器的标识符 ,可以是:
    • 容器ID :容器的完整哈希值(如 a1b2c3d4e5f6)或前几位足以唯一识别的字符(如 abc123
    • 容器名称:容器创建时指定的名称或自动生成的名称

常用选项

  • -a--attach:附加到容器的标准输出、标准错误
  • -i--interactive:附加到容器的标准输入

示例

bash 复制代码
# 启动一个已停止的容器
docker start abc123

# 启动并附加到容器的输出
docker start -a my_container

# 启动多个容器
docker start container1 container2 container3

# 启动所有已停止的容器
docker start $(docker ps -aq -f status=exited)

14. docker exec -- 在运行中的容器内执行命令

docker exec -it abc123 /bin/bash :用来在正在运行的容器内部启动一个新的交互式终端会话

说明 :用于在运行中的容器内部执行命令

  • docker exec:Docker 中用于在容器内执行命令 的基础命令。与 docker run(创建新容器)不同,exec 是在已存在的运行中容器内部执行额外命令。
  • -it:这是两个常用选项的组合:
    • -i--interactive:保持标准输入(STDIN)打开,允许与命令交互
    • -t--tty:分配一个伪终端(pseudo-TTY),提供类似本地终端的体验
  • abc123:目标运行中容器的标识符(容器ID或容器名称)
  • /bin/bash:要在容器内部执行的命令 。这里是启动 Bash shell。也可以是其他命令如 /bin/shpythonls 等。

常用选项

  • -d--detach:在后台运行命令
  • -u--user:以指定用户身份执行命令(如 rootwww-data
  • -w--workdir:设置命令的工作目录
  • -e--env:设置环境变量

示例

bash 复制代码
# 进入运行中容器的交互式 Bash 终端
docker exec -it my_container /bin/bash

# 在容器内执行单次命令(不进入交互模式)
docker exec my_container ls -la /var/log

# 以特定用户身份执行命令
docker exec -u nginx nginx_container nginx -t

# 在指定工作目录执行命令
docker exec -w /app app_container npm install

# 在后台执行命令
docker exec -d my_container some_background_task

典型工作流程

bash 复制代码
# 1. 查看所有容器(包括已停止的)
docker ps -a

# 2. 如果容器已停止,先启动它
docker start abc123

# 3. 然后进入容器的终端
docker exec -it abc123 /bin/bash

# 或者一步完成(如果容器已运行):
docker exec -it my_container /bin/bash

如果需要打开一个容器的多个终端:

在不同的终端中多次运行 docker exec -it my_container /bin/bash 即可

如果只运行一个容器中的终端,则下面两种做法是等效的:

bash 复制代码
docker start -a my_container

bash 复制代码
docker start my_container
docker exec -it my_container /bin/bash
相关推荐
2601_949146535 小时前
Shell语音通知接口使用指南:运维自动化中的语音告警集成方案
运维·自动化
儒雅的晴天6 小时前
大模型幻觉问题
运维·服务器
Gofarlic_OMS7 小时前
科学计算领域MATLAB许可证管理工具对比推荐
运维·开发语言·算法·matlab·自动化
通信大师7 小时前
深度解析PCC策略计费控制:核心网产品与应用价值
运维·服务器·网络·5g
dixiuapp7 小时前
智能工单系统如何选,实现自动化与预测性维护
运维·自动化
Elastic 中国社区官方博客7 小时前
如何防御你的 RAG 系统免受上下文投毒攻击
大数据·运维·人工智能·elasticsearch·搜索引擎·ai·全文检索
小锋学长生活大爆炸7 小时前
【教程】免Root在Termux上安装Docker
运维·docker·容器
NotStrandedYet8 小时前
《国产系统运维笔记》第8期:挑战国产化流媒体部署——银河麒麟+龙芯架构编译SRS实战全记录
运维·kylin·国产化·银河麒麟·龙芯·信创运维·srs编译安装
默|笙9 小时前
【Linux】fd_重定向本质
linux·运维·服务器