本文介绍 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 节点数