术语首先介绍几个术语。服务(service):一个应用容器,实际上可以运行多个相同镜像的实例。项目(project):由一组关联的应用容器组成的一个完整业务单元。可见,一个项目可以由多个服务(容器)关联而成,Compose 面向项目进行管理。场景下面,我们创建一个经典的 Web 项目:一个 Haproxy,挂载三个 Web 容器。
指令的一般格式为 INSTRUCTION arguments,指令包括 FROM、MAINTAINER、RUN 等。FROM格式为 FROM <image>或FROM <image>:<tag>。第一条指令必须为 FROM 指令。并且,如果在同一个Dockerfile中创建多个镜像时,可以使用多个 FROM 指令(每个镜像一次)。MAINTAINER格式为 MAINTAINER <name>,指定维护者信息。RUN格式为 RUN <command>
控制组是 Linux 容器机制的另外一个关键组件,负责实现资源的审计和限制。它提供了很多有用的特性;以及确保各个容器可以公平地分享主机的内存、CPU、磁盘 IO 等资源;当然,更重要的是,控制组确保了当容器内的资源使用产生压力时不会连累主机系统。尽管控制组不负责隔离容器之间相互访问、处理数据和进程,它在防止拒绝服务(DDOS)攻击方面是必不可少的。
数据卷是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特性:数据卷可以在容器之间共享和重用对数据卷的修改会立马生效对数据卷的更新,不会影响镜像卷会一直存在,直到没有容器使用*数据卷的使用,类似于 Linux 下对目录或文件进行 mount。创建一个数据卷在用 docker run 命令的时候,使用 -v 标记来创建一个数据卷并挂载到容器里。
Docker 利用容器来运行应用。容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。注:镜像是只读的,容器在启动的时候创建一层可写层作为最上层。