Dockerfile

Dockerfile 类型识别策略

代码主目录下有 Dockerfile 文件,Rainbond 会识别代码语言类型为 Dockerfile ,此策略优先级最高,当代码同时符合其他语言类型识别策略时,依然以Dockerfile为主。

编译原理

识别为 Dockerfile 类型的源码将使用类似于 docker build -t xxx/xxx . 的命令进行镜像构建,因此此方式是灵活性最高的源码编译方式,理论上可以应用于所有开发语言的支持(如果 Docker 支持)。

构建过程支持 docker multi-stage(多阶段构建)和 ARG 参数指定。

Dockerfile 规范

Dockerfile 是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像。

Rainbond 在源码检测阶段会读取 Dockerfile 定义的如下参数:

参数类型名称说明
ENV环境变量识别为服务可设置的环境变量配置
ARG构建参数识别为构建可设置的参数配置
EXPOSE暴露端口识别为服务的端口配置
VOLUME持久化存储识别为服务的共享持久化存储配置

Dockerfile 的定义方式详见官方文档: https://docs.docker.com/engine/reference/builder/

在此给出 Dockerfile 编译部署 Golang 源码的用例:

  1. FROM muninn/glide:alpine AS build-env
  2. ADD . /go/src/app
  3. WORKDIR /go/src/app
  4. RUN glide install
  5. RUN go build -v -o /go/src/app/app-server
  6. FROM alpine
  7. RUN apk add -U tzdata
  8. RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
  9. COPY --from=build-env /go/src/app/app-server /usr/local/bin/app-server
  10. EXPOSE 80
  11. CMD ["app-server"]

完整示例代码

私有仓库如何处理?

如果你的 Dockerfile 使用私有镜像仓库的镜像,那么当你直接使用该 Dockerfile 构建时,会由于权限问题,无法拉取到正确镜像进行构建。此时你可以在团队管理中,选择镜像仓库授权信息,填写该私有镜像仓库的域名、用户名和密码,保存后再次构建,即可构建成功。如下图所示:

private-repo-dockerfile.png