Docker 使用 C/S 框架。客户端负责与 Docker 守护进程(Daemon) 进行对话,而守护进程负责繁重的构建、运行、分发 Docker 容器的工作。Docker 客户端和守护进程可以在同一操作系统中运行,或者通过客户端与远程的 Docker 守护进程进行连接。Docker 客户端和守护进程之间通过使用 REST 接口,基于 UNIX socket 或网络接口进行通信。另外还有一个 Docker 客户端叫作 Docker Compose,让你可以同时管理多个容器。
守护进程(dockerd)负责监听 Docker 接口请求,并管理 Docker 对象,如镜像、容器、网络和卷。一个守护进程可以同时与其它多个守护进程通信来管理 Docker 服务。
客户端(docker)是用户与 Docker 通信的主要方式。当你使用命令如 docker run 时,客户端会将该命令发送给守护进程(dockerd)来执行。客户端(docker)命令调用 Docker 底层接口。客户端可以与多个守护进程通信。
Docker 桌面版是一款易安装环境,适用于 Mac、Windows,或Linux ,让你能够构建并共享容器化的应用和微服务。桌面版 Docker 包含 Docker 守护进程(dockerd),Docker 客户端(docker),Docker Compose,Docker 内容信赖(Docker Content Trust),k8s(Kubernetes) 和 凭据助手(Docker Helper)。更多信息请参考 Docker Desktop。
注册表用来存储 Docker 镜像。Docker Hub 是一个公共的注册表,任何人都可以使用,Docker 默认会从 Docker Hub 查找镜像。当然你也可以实现自己的注册表。
当你使用 docker pull 或 docker run 命令时,Docker 会从你配置的注册表拉取镜像。
当你使用 docker push 命令时,Docker 会将你的镜像推送至你配置的注册表。
当你使用 Docker时,你需要创建和使用镜像,容器,网络,卷,插件以及其它对象。这一节简单介绍这些对象的概念。
镜像是一个包含创建容器指令的只读模板。通常,一个镜像会包含另一个镜像来实现一些额外的定制。比如,你创建一个镜像可能是基于 ubuntu 操作系统,但要安装相应的 web 服务器和应用,以及能够让人的应用运行起来的具体配置。
你可以使用你自己创建的镜像或使用其他人创建并发布到注册表的镜像。要构建你自己的镜像,你需要创建 Dockerfile,Dockerfile 包含简单的语法,用以定义创建镜像和运行它的步骤。Dockerfile 中的每一条指令代表镜像中的一层(layer)。当你创建 Dockerfile 并重新构建镜像时,只有那些修改过的层会被重构。这是使得镜像与其他虚拟技术相比更经量,更高效的地方。
容器是镜像的可运行实例。你可以使用 Docker 接口(API)或命令行客户端(CLI)来创建,启动,停止,移动或删除一个容器。你可以将一个容器与其它一个或多个网络进行连接,挂载存储,甚至基于当前状态创建一个新的镜像。
默认情况下,一个容器能够与其它容器及其宿主机器很好的隔离。你可以在网络,存储或其它底层系统级别上控制如何与其它容器或宿主机器隔离。
容器在你创建或运行它时即已被其镜像,包括镜像中提供的配置项所定义。当一个容器被移除后,对于其任意未被持久化的修改将会消失。
docker run 命令
如下命令中,运行了一个 ubuntu 的容器,同时附带执行你本地命令的会话运行 /bin/bash。
docker run -i -t ubuntu /bin/bash
当执行上述命令时,会发生以下情况(假设你正在使用默认的注册表配置):
Docker 使用 Go 语言编写,利用 Linux 内核的一些特性来实现其功能。Docker 使用所谓的命名空间(namespace)来实现工作空间,即容器的隔离。当你运行一个容器,Docker 会为其创建一组命名空间。
命名空间提供了隔离层。容器的各个方面都单独运行于某个命名空间,且其访问也仅限于该命名空间。
本文系外文翻译,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系外文翻译,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。