目录
简介
Docker 是一个客户端-服务器(client-server)架构的应用程序,其中包含两个主要组件:Docker 客户端和 Docker 守护进程(也称为 Docker Daemon)。理解这两个组件的作用有助于理解为什么需要启动 Docker 客户端。
Docker 基础组件
Docker 客户端(Client): 用户通过命令行工具与 Docker 进行交互。
Docker 守护进程(Daemon): 管理 Docker 服务的后台进程,处理客户端请求。
-
Docker 客户端:
- Docker 客户端是用户与 Docker 系统交互的接口。用户通过 Docker 命令行工具(如 docker 命令)发送命令。
- 这些命令可以是创建、运行、停止容器,拉取镜像,查看日志等。
- 客户端本身并不执行这些操作,而是将命令发送给 Docker 守护进程。
-
Docker 守护进程:
- Docker 守护进程运行在主机上,并负责处理来自客户端的请求。
- 它管理容器的生命周期、镜像的构建和存储、网络和数据卷的管理等。
- 守护进程可以在本地或远程运行,客户端可以配置与远程 Docker 守护进程通信。
为什么需要启动 Docker 客户端:
- 与守护进程通信: Docker 客户端是用户和 Docker 系统之间的桥梁。用户需要通过客户端发送命令来管理 Docker 守护进程和容器。
- 用户交互: 客户端提供了一个用户友好的接口,使得用户可以方便地与 Docker 系统互动,而不需要直接操作守护进程。
- 任务自动化: 通过 Docker 客户端,用户可以编写脚本来自动化容器管理任务,这对于 DevOps 和持续集成/持续部署(CI/CD)流程非常重要。
因此,启动 Docker 客户端是为了提供一个接口,使用户能够与 Docker 守护进程通信并管理容器化应用程序。Docker Desktop 应用程序通常会同时启动客户端和守护进程,以确保系统能够正常工作。
常用命令
在本部分中,我将为您提供一个完整的Docker命令列表,包含命令的注释说明和具体的使用示例,帮助您更全面地理解每个命令的功能和应用场景:
Docker 常用命令汇总
-
查看 Docker 版本信息
bashdocker version # 显示 Docker 的版本信息
示例输出:
Client: Docker Engine - Community Version: 19.03.12 Server: Docker Engine - Community Engine: Version: 19.03.12
-
获取 Docker 系统的信息
bashdocker info # 显示 Docker 的系统信息,包括容器和镜像数量
示例部分输出:
Containers: 10 Running: 3 Paused: 0 Stopped: 7 Images: 50 Server Version: 19.03.12
-
列出本地镜像
bashdocker images # 列出本地存储的所有镜像
示例输出:
REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu latest 4e5021d210f6 2 weeks ago 64.2MB nginx stable 56bc4e1fdd8d 3 weeks ago 126MB
-
查看正在运行的容器
bashdocker ps # 查看当前正在运行的容器
示例输出:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c3f279d17e0a nginx "/docker-entrypoint...." 3 weeks ago Up 3 days 80/tcp webserver
-
查看容器日志
bashdocker logs <容器名称或ID> # 显示指定容器的日志
示例用法:
bashdocker logs webserver
示例输出:
127.0.0.1 - - [12/Oct/2023:14:55:29 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36"
-
进入容器
bashdocker exec -it <容器名称或ID> /bin/bash # 进入容器并启动 Bash Shell
示例用法:
bashdocker exec -it webserver /bin/bash
-
退出容器
bashexit # 退出当前容器的 Shell
-
列出所有容器
bashdocker ps -a # 列出所有容器,包括未运行的
-
运行容器
bashdocker run -itd --privileged --name <容器名称> -v <本地路径>:<容器内路径> <镜像ID>
示例用法:
bashdocker run -itd --privileged --name mycontainer -v /Users/example:/home/docker/data ad2419b0e531
-
停止容器
bashdocker stop <容器名称或ID> # 停止一个运行中的容器
示例用法:
bashdocker stop webserver
-
重启容器
bashdocker restart <容器名称或ID> # 重启容器
-
删除容器
bashdocker rm <容器名称或ID> # 删除一个容器
-
查看容器详细信息
bashdocker inspect <容器ID或名称> # 查看容器详细信息,包括挂载目录
docker run 命令格式与参数解析
命令 docker run
是 Docker 中最常用的命令之一,它用于创建一个新的容器并运行一个命令。该命令具有多个参数,可以根据需要进行详细配置。
bash
docker run -itd --privileged --name <容器名称> -v <本地路径>:<容器内路径> <镜像ID>
-
-itd
: 这是三个参数的组合,常用于控制容器的交互模式和后台运行状态:-i
(--interactive
): 保持标准输入(STDIN)开启,即使不附加到容器。-t
(--tty
): 分配一个伪终端,这通常用于使容器在运行时更像一个交互式会话。-d
(--detach
): 在后台运行容器,并打印容器 ID。这允许容器在后台执行,命令行可以立即返回。
-
--privileged
: 给予容器额外的权限。当你的容器需要执行一些需要更高权限的操作时(如直接访问硬件设备),你可以使用这个选项。这会给予容器几乎同宿主机相同的权限。 -
--name <容器名称>
: 指定容器的名称。这允许您为容器指定一个易于记忆的名字,而不是使用 Docker 自动生成的随机名称。 -
-v <本地路径>:<容器内路径>
: 挂载一个卷(Volume)或绑定宿主机的目录到容器内部的指定路径。这使得容器能够共享和访问宿主机上的数据。<本地路径>
: 宿主机上的文件路径,这个路径的数据将被挂载到容器中。<容器内路径>
: 容器内的目标路径,宿主机上的<本地路径>
将映射到这里。
-
<镜像ID>
: 这是用于创建容器的基础镜像。这可以是任何有效的镜像 ID,或者从 Docker Hub 上拉取的镜像名称和标签。
示例解析:
假设您希望运行一个基于 Ubuntu 的容器,容器名为 myubuntu
,并希望将宿主机的 /home/user/data
目录挂载到容器的 /data
目录,并在后台运行:
bash
docker run -itd --privileged --name myubuntu -v /home/user/data:/data ubuntu:latest
在这个例子中:
- 使用了最新版的 Ubuntu 镜像(
ubuntu:latest
)。 - 容器被命名为
myubuntu
。 - 宿主机的
/home/user/data
目录被挂载到容器内的/data
目录。 - 容器在后台运行,且配置为交互式,有一个分配的终端。
这个命令将允许你运行一个 Ubuntu 容器,同时能够在宿主机和容器之间共享 /home/user/data
目录中的文件,这对于数据持久化和数据交换非常有用。