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的版本。
11. docker search -- 模糊搜索镜像
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 中用于启动容器 的基础命令。该命令会重新启动指定的容器,使其从停止状态(Exited、Created等)转换为运行状态(Up)。abc123:目标容器的标识符 ,可以是:- 容器ID :容器的完整哈希值(如
a1b2c3d4e5f6)或前几位足以唯一识别的字符(如abc123) - 容器名称:容器创建时指定的名称或自动生成的名称
- 容器ID :容器的完整哈希值(如
常用选项:
-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/sh、python、ls等。
常用选项:
-d或--detach:在后台运行命令-u或--user:以指定用户身份执行命令(如root、www-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