本篇文档对 官方文档第一章
Docker overview的部分内容进行了总结、翻译,并加入其它 Docker 概念描述
Docker是一个开发、发布、运行应用的开放平台。Docker使你可以从你的基础设施中分离应用,因此你可以更快速的交付应用。你也可以像管理应用程序一样管理你的基础设施
一、Docker 平台(Docker platform)
Docker 提供了将应用包装进独立环境中,并在独立环境中运行的能力。这个运行时的独立环境被称为 容器
独立性允许了你在一台主机上同时运行很多容器
容器是轻量级的,且包含运行应用所需要的全部依赖。因此你不需要关注当前主机上装了哪些依赖
你可以轻松分享容器,并确保每位被分享者得到一致的容器、以一致的方式运行
Docker 提供了工具和平台来管理容器:
- 使用容器开发你的应用
- 让你的应用容器成为独立的发布、测试单元
- 将应用作为一个容器或组织好的服务,发布到生成环境。不论是在物理机、云服务,你的应用都将以一致的方式运行
二、我能用 Docker 做什么?
- 快速、一致性的交付应用
- 响应式部署和扩展,实现负载均衡
- 更好的性能
三、Docker 体系概念
3.1 Docker 守护进程(Docker daemon)
Docker守护进程(dockerd) 监听 Docker API 请求,管理 Docker对象(如:镜像、容器、网络、卷)。一个Docker守护进程可与其它Docker进程沟通,来管理 Docker 服务
3.2 Docker 客户端(Docker Client)
Docker客户端(docker)是大多使用 Docker 的主要方式。当你使用命令行,如 docker run ,客户端像 dockerd 发送命令。 Docker 命令调用 Docker API。docker客户端 可以与多个docker守护进程沟通
3.3 Docker 桌面程序(Docker Desktop)
帮助你简单使用 Docker 的应用程序,可用于构建、分享应用和微服务。Docker桌面程序 包含了 Docker守护进程、Docker客户端、Docker Compose、Docker Content Trust、Kubernetes、Credential Helper
3.4 Docker 镜像库(Docker registries)
存放 Docker镜像,Docker Hub 是公共的镜像库。你也可以配置自己的私有镜像库
3.5 Docker 对象(Docker objects)
一堆东西的合集,镜像、容器、网络、卷、组合 等等
3.5.1 镜像
镜像是一个只读的用于创建 Docker 容器的指令模板
通常,一个镜像基于另一个镜像,然后在其基础上进行自定义。例如,你也许会基于 ubuntu 创建一个镜像,然后在此基础上安装 Apache web服务器和你的应用
为了创建一个镜像,你需要编写Dockerfile文件,用来描述创建镜像所需的每个步骤,然后执行它。Dockerfile中的每条指令,都会在镜像中创建一层 layer(层) 。当你修改Dockerfile并重新构建镜像时,只有改变了的层会重新构建。这是使得镜像轻便、快速的重要原因之一
3.5.2 容器
容器是一个镜像运行中的实例。你可以通过 Docker API 创建、启动、停止、移动、删除容器
你可以将容器连接到多个网络、向容器添加储存区,甚至基于容器当前的状态创建出一个新镜像
默认情况下,一个容器与其它容器、宿主机都是独立的。你可以控制如何独立一个容器的网络、储存或其它来自别的容器、宿主机的基础子系统
容器由镜像、以及创建或启动时提供的配置参数定义。当容器被删除时,任何没被储存的修改都不会保留
3.5.3 卷
每个容器有自己的文件系统,容器之间不会互相干扰,容器与宿主机也不会有文件交流
这导致,每次从镜像运行新的容器,都没有以前的文件记录
可以使用卷来解决容器内数据持续化的问题
通过使用卷 volume ,你可以指定宿主机上的目录(或命名券),与容器内目录映射。随后,容器中对目录内容的修改,也会反应在宿主机上
同样,宿主机上对目录内容的修改,也可快速更新至容器内(场景:开发模式,在容器外修改源代码,容器内监听到后快速更新)
3.5.4 网络
容器间使用网络进行通信,如果多个容器在同一网络,则它们可以互相通信,否则不行
docker network create 命令用于创建docker网络
3.5.5 组合(Docker Compose)
docker compose是一个用于定义如何运行多容器应用的工具
使用docker compose,我们可以创建一个yaml文件,来定义应用如何将各种服务(容器)组合起来
3.6 一个 docker run 命令行的例子
以下命令运行一个 ubuntu 容器,持续与当前命令行会话交互,并执行 /bin/bash
docker run -i -t ubuntu /bin/bash
执行此命令时,发生了如下事情:
- 如果你本地没有
ubuntu镜像,Docker 会从你配置的镜像库(registry)拉取。 相当于手动执行docker pull ubuntu - Docker 创建一个
容器。相当于执行docker container create - Docker 分配一个可读写文件系统给
容器,作为其最终层(layer)。这允许运行中容器在它的本地文件系统中创建或修改文件 - Docker 创建一个网络接口来连接
容器到默认网络。这将分配一个ip地址给容器。默认情况,容器可使用主机的网络功能来连接到其它网络 - Docker 启动
容器并执行/biin/bash。因为-i-t参数指定了容器以与终端交互式的方式运行,你可以用键盘输入命令,输出将打印在终端上 - 当你向终端
/bin/bash输入exit,容器停止但没有被删除。你可以再次启动或删除它