本文介绍 Dockerfile 和 Docker Compose 的指令以及用使用方法
Dockerfile
Dockerfile 是一个文本格式的配置文件,使用 Dockerfile 可以快速创建自定义的镜像
基本结构
Dockerfile 由一行行命令语句组成,支持以 # 开头的注释行。 Dockerfile 分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。
示例:基于 debian:jessie 基础镜像上安装 nginx 环境,制作一个新的 nginx 镜像
1 |
|
Dockerfile 指令说明
| 指令 | 说明 |
|---|---|
| FROM | 指定基础镜像,FROM [image]:[tag],每个 Dockerfile 的第一件指令必须是 FROM |
| MAINTAINER | 指定维护者信息,MAINTAINER [name] |
| RUN | 运行命令制作镜像,RUN [command] 或 RUN [“executable”, “param1”, “param2”] |
| LABEL | 指定生成镜像的元数据标签信息 |
| EXPOSE | 声明镜像内服务所监听的端口 |
| ENV | 指定环境变量,镜像生成过程中可以被后续 RUN 指令使用,镜像启动的容器中也会存在 |
| ADD | 复制URL的内容到容器, ADD [src] [dest] |
| COPY | 复制宿主中的内容到容器, COPY [src] [dest] |
| VOLUME | 创建数据卷挂载点,VOLUME [dir] |
| USER | 指定运行容器时的用户 |
| WORKDIR | 配置工作目录,为后续的 EVN,CMD 和 ENTRYPOINT 指令配置工作目录 |
| ARG | 指定镜像内使用的参数,这些参数在使用 docker build 命令时才传入 |
| ONBUILD | 配置当所创建的镜像作为其他镜像的基础镜像时,所执行的创建操作指令 |
| STOPSIGNAL | 容器退出的信号值 |
| HEALTHCHECK | 如何进行健康检查,HEALTHCHECK [OPTIONS] |
| SHELL | 指定使用 shell 时的默认 shell 类型 |
| ENTRYPOINT | 指定镜像的默认入口,每个 Dockerfile 只有一个 ENTRYPOINT 生效 |
| CMD | 指定启动容器默认执行的命令 |
Docker Compose
Compose 负责实现对容器集群的快速编排,可以定义和运行多个 Docker 容器的应用。
Compose 有两个重要的概念
- 服务: 一个应用的容器,实际上可以包括若干运行相同镜像的容器实例
- 项目:由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义
Compose 命令说明
Compose 有多个子命令,如下
| 命令 | 说明 |
|---|---|
| build | 构建项目中的服务容器 |
| help | 获得一个命令的帮助 |
| kill | 通过发送 SIGKILL 信号来强制停止服务容器 |
| logs | 查看服务器的输出 |
| pause | 暂停一个服务容器 |
| port | 打印某个容器端口所映射的公共端口 |
| ps | 列出项目中目前的所有容器 |
| pull | 拉取项目依赖的镜像 |
| restart | 重启项目中的服务 |
| rm | 删除所有(停止状态的)服务容器 |
| run | 在指定服务上执行一个命令 |
| scale | 设置指定服务运行的容器个数 |
| start | 启动已经存在的服务容器 |
| stop | 停止已经处于运行状态的容器。但不删除 |
| uppause | 恢复处于暂停状态中的服务 |
| up | 自动完成包括构建镜像,创建服务,启动服务并关联服务相关容器等一系列操作 |
| migrate-to-labels | 重新创建容器,并添加 label |
| version | 打印版本信息 |
Compose 模板文件
模板文件是使用 Compose 的核心,默认的模板文件名称为 docker-compose.yml,YAML格式。 文件由一系列的指定组成,也可以使用变量。
模板文件指令如下
| 指令 | 功能 |
|---|---|
| build | 指定服务镜像 Dockerfile 所在路径 |
| cap_add, cap_drop | 指定容器的内核能力分配 |
| *command | 覆盖容器启动的默认执行命令 |
| cgroup_parent | 指定父 cgroup 组,意味着将继承该组的资源限制 |
| container_name | 指定容器名称 |
| devices | 指定设备映射关系 |
| dns | 自定义 DNS 服务器。可以是一个值,也可以是列表 |
| dns_search | 配置 DNS 搜索域 |
| dockerfile | 指定额外编译镜像的 Dockerfile |
| env_file | 从文件中获取环境变量 |
| environment | 设置环境变量 |
| expose | 暴露端口 |
| extends | 基于其他模板文件进行扩展 |
| external_links | 链接到 docker-compose.yml 外部的容器 |
| extra_hosts | 指定额外的 host 名称映射信息 |
| image | 指定为容器名称或镜像 ID |
| labels | 为容器添加 Docker 元数据信息 |
| links | 链接到其他服务中的容器 |
| log_driver | 指定日志驱动类型 |
| log_opt | 日志驱动的相关参数 |
| net | 设置网络模式 |
| pid | 跟宿主系统共享进程命名空间 |
| ports | 暴露端口信息 |
| security_opt | 指定容器模板标签机制的默认属性 |
| ulimits | 指定容器的 ulimits 限制值 |
| volumes | 数据卷所挂载路径设置 |
| volumes_driver | 数据卷的插件驱动 |
| volumes_from | 从另一个服务或容器挂载数据卷 |
模板文件示例
示例1 redis 集群——服务 6 个 redis 节点
1 |
|
示例2, spark
1 |
|
用 docker-compose up 可以启动
服务起来后, 可以用 docker-compose scale worker=2 来动态扩展 worker 节点数