Docker介绍
Docker 官网 (opens new window) | Docker 下载地址 (opens new window) | Docker 概述 (opens new window)
Docker 介绍
Docker 是一个用于开发、发布和运行应用程序的开放平台。Docker 使您能够将应用程序从基础设施中分离出来,以便快速交付软件。使用 Docker,您可以像管理应用程序一样管理基础架构。通过利用 Docker 的方法快速交付、测试和部署代码,您可以显著减少编写代码和在生产环境中运行代码之间的延迟。
# Docker 架构
Docker 使用 客户端-服务器架构。Docker 客户端与 Docker 守护进程进行对话,该守护进程完成了构建,运行和分发 Docker 容器的繁重工作。Docker 客户端和守护程序可以 在同一系统上运行,或者您可以将 Docker 客户端连接到远程 Docker 守护程序。Docker 客户端和守护程序在 UNIX 套接字或网络接口上使用 REST API
进行通信。另一个 Docker 客户端是 Docker Compose,它使您可以处理由一组容器组成的应用程序。
# The Docker daemon
Docker 守护程序(Dockerd)侦听 Docker API 请求并管理 Docker 对象,例如图像,容器,网络和卷。守护程序还可以与其他守护程序通信以管理 Docker 服务。
# The Docker client
Docker 客户端(Docker)是许多 Docker 用户与 Docker 交互的主要方式。当您使用诸如之类的命令时 Docker run,客户端会将这些命令发送到 Dockerd,以执行这些命令。该 Docker 命令使用 Docker API。Docker 客户端可以与多个守护程序通信。
# Docker registries
Docker 注册表存储 Docker 镜像。Docker Hub (opens new window) 是任何人都可以使用的公共注册表,并且默认情况下,Docker 已配置为在 Docker Hub (opens new window) 上查找镜像。您甚至可以运行自己的私人注册表。
# Images
Image 镜像 是一个只读模板,带有创建 Docker 容器的说明。通常,一个镜像基于另一个镜像,并进行一些额外的定制。例如,您可以构建一个基于 ubuntu
的镜像,然后安装 Apache web 服务器和您的应用程序,以及使应用程序运行所需的配置细节。
您可以创建自己的镜像,也可以只使用其他人创建并发布在注册表中的镜像。要构建自己的镜像,需要创建一个 Dockerfile,该文件使用简单的语法来定义创建和运行镜像所需的步骤。Dockerfile 中的每条指令都会在镜像中创建一个层。当你改变 Dockerfile 并重建镜像时,只有那些已经改变的层才会被重建。与其他虚拟化技术相比,这是镜像如此轻量级、小巧和快速的部分原因。
# Containers
Containers 容器 是镜像的可运行实例。您可以使用 Docker API 或 CLI 创建、启动、停止、移动或删除容器。您可以将容器连接到一个或多个网络,将存储附加到其上,甚至可以根据其当前状态创建新镜像。
默认情况下,容器相对较好地与其他容器及其主机隔离。您可以控制容器的网络、存储或其他底层子系统与其他容器或主机的隔离程度。
容器是由它的镜像
以及在创建或启动它时提供给它的任何配置选项定义
的。当容器被删除
时,任何未存储在持久存储中的状态更改都会消失
。
docker run
指令案例。下面的命令运行一个ubuntu
容器,以交互方式连接到本地命令行会话,并运行/bin/bash
docker run -i -t ubuntu /bin/bash
当您运行此命令时,会发生以下情况(假设您使用默认的注册表配置):
- 如果你在本地没有
ubuntu
镜像,Docker 会从你配置的注册表中提取它,就像你手动运行docker pull ubuntu
一样。 - Docker 创建一个新容器,就像您手动运行
docker container create
命令一样。 - Docker 为容器分配一个读写文件系统,作为它的最后一层。这允许运行中的容器在其本地文件系统中创建或修改文件和目录。
- Docker 创建了一个网络接口,将容器连接到默认网络,因为您没有指定任何网络选项。这包括为容器分配一个 IP 地址。默认情况下,容器可以使用主机的网络连接连接到外部网络。
- Docker 启动容器并执行
/bin/bash
由于容器以交互方式运行并连接到您的终端(由于-i
和-t
标志),因此您可以使用键盘提供输入,同时将输出记录到您的终端。 - 当输入
exit
终止/bin/bash
命令时,容器会停止,但不会被移除。您可以重新启动或删除它。
# Docker 底层技术
Docker 是用 Go 编程语言 (opens new window) 编写的,并利用了 Linux 内核的几个特性来实现其功能。Docker 使用 namespaces
的技术来提供容器的隔离工作空间。当你运行一个容器时,Docker 会为这个容器创建一组命名空间。
这些 namespaces
提供了一层隔离。各个容器都在单独的 namespaces
中运行,其访问仅限于该名称空间。