Docker
Docker 是一个用于开发、发布和运行应用程序的开放平台。他能够使开发者将应用程序与基础架构分离,以便快速交付软件。
架构
Docker 基于 C/S 架构,Docker Client 通过 RESTAPI、UNIX 套接字或网络接口等与 Docker Daemon 进行通信,而 Docker Daemon 负责构建、运行和分发 Docker 容器,整体的架构图如下:
- Docker Daemon(Docker 守护进程): 监听 Docker API 请求(由 Docker Client 发起)来管理 Docker Images,还可以与其他 Daemon 进行通信来管理 Docker 服务,他可以在本机或者远程服务器上部署
- Docker Client(Docker 客户端): 用户与 Docker Daemon 进行通信的命令行接口(CLI),他使用 Docker API 来与 Docker Daemon 进行通信,并且一个客户端可以和多个 Docker Daemon 进行通信
- Docker Compose(Docker 编排工具): Docker 官方提供的编排工具,他允许你使用一组容器来构建应用程序
- Docker Registry(Docker 仓库): 用于托管 Docker Images 的平台,DockerHub 是公开的注册表,并且默认情况下,Docker 会在 DockerHub 上查找映像
- Docker Object(Docker 对象): Docker Object,这包括映像(image)、容器(container)、网络(network)、卷(volume)、插件(plugin)和其他对象
- Docker Image: 映像只是一个只读模版(read-only template),其中包含了创建 Docker 容器的说明。通常一个映像基于另一个映像并进行一些额外的定义,官方会提供了一些基础镜像作为底包
- Docker Container: 容器是映像的运行实例,可以通过 Docker API 来创建、启动、停止和删除容器。也可以将容器连接到一个或多个网络,并为其附加存储甚至可以根据其当前状态创建新映像
底层技术
Docker 使用 Go 语言编写,利用 Linux 内核提供的名为 namespaces 的特性来提供隔离工作区(这个隔离工作区称为容器),每当运行一个容器时,Docker 会为该容器创建一组命名空间。这些命名空间提供了一个隔离层,容器的每个方面都在单独的命名空间中允许,其访问权限、依赖等都局限于该命名空间。
安装
Docker 官方推荐的安装方式是Docker Desktop,不过它需要桌面环境,这对于 MacOS、Windows 来说没任何问题,而对于 Linux 来说多多少少有问题因此也提供了Docker Engine这样基于命令行的安装方式。
Tips
实际上 Docker Desktop 就是封装了 Docker Engine 并提供了 GUI 界面来管理
用户入门手册
用户使用 Docker 的基本流程是:
- 首先获取一个 image,他是创建容器的模版,Docker 默认从 DockerHub 上获取 image,我们也可以浏览
hub.docker.com
来查看可用的 image - 通过
docker run [options] [image] [command]
来创建并运行一个容器,而对于网络、挂载等都可以通过 options 来指定- 如果想要与容器进行交互命令就需要指定
-it
参数 - 如果要挂载卷或本地目录就需要
-v [source]:[target]
来实现
- 如果想要与容器进行交互命令就需要指定
参考
- Docker Guides: Docker 用户指南
- Docker Manuals: Docker 各个组件的参考手册
- Docker Reference: Docker 命令和 API 索引
- Docker 从入门到实践