思路
-
创建文件夹,如下,这样通过
faas-cli new --list
命令就可以看到springboot
模板mkdir -p template/springboot faas-cli new --list
-
cd template/springboot
-
touch Dockerfile
-
mkdir function
-
touch template.yml
下面着重介绍template.yml、function、Dockerfile的内容。
template.yml
当使用faas new event-springboot --lang springboot
新建模板文件时,openfaas
会使用template.yml
中的内容提示用户。
language: springboot
welcome_message: |
You have created a function using the java8 and maven3 and springboot template
function
function
文件夹是部署的代码,里面的代码部署后,可以直接访问。如果需要自定义部署的代码,只需要将你的代码放到这个文件夹中。例如模板代码,部署后直接可以调用。
注:m2
中的settings.xml
配置好拉取依赖的仓库,在Dockerfile
中要使用项目的maven
配置打包代码,并启动代码
Dockerfile
# maven和jdk作为基础镜像
FROM maven:3.6.3-openjdk-8 as builder
# 指定容器的一个目录,容器启动时执行的命令会在该目录下执行
WORKDIR /home/app
# 将当前目录下的所有文件拷贝到镜像的/home/app目录下
COPY . /home/app/
# 进入function中,在pom.xml所在目录执行maven打包
RUN cd function && mvn clean package -U -DskipTests --settings ./m2/settings.xml
# maven打包后,所有的依赖会下载到target目录下,
RUN cp /home/app/function/target/*.jar ./application.jar
# 通过pom.xml中的spring-boot-maven-plugin插件(spring-boot-jarmode-layertools)
# 从application.jar中提取文件,生成docker镜像里面的各个文件
RUN java -Djarmode=layertools -jar application.jar extract
# 使用of-watchdog做代理,将请求转发到springboot工程里
FROM openfaas/of-watchdog:0.7.6 as watchdog
# jdk运行环境
FROM openjdk:8-jre-slim as ship
# 为了安全起见,在生产环境运行容器时不要用指root帐号和群组
RUN addgroup --system app \
&& adduser --system --ingroup app app
# 从of-watchdog镜像中复制二进制文件fwatchdog,这是容器的启动进程
COPY --from=watchdog /fwatchdog /usr/bin/fwatchdog
# 赋予可执行权限
RUN chmod +x /usr/bin/fwatchdog
WORKDIR /home/app
# 前面提取命令执行成功后取得的文件,用于镜像中启动应用所需
COPY --from=builder /home/app/dependencies/ ./
COPY --from=builder /home/app/spring-boot-loader/ ./
COPY --from=builder /home/app/snapshot-dependencies/ ./
COPY --from=builder /home/app/application/ ./
# 指定容器的运行帐号
user app
# 指定容器的工作目录
WORKDIR /home/app/
# fwatchdog收到web请求后的转发地址,java进程监听的就是这个端口
ENV upstream_url="http://127.0.0.1:8082"
# 运行模式是http
ENV mode="http"
# 拉起业务进程的命令,这里就是启动java进程
ENV fprocess="java org.springframework.boot.loader.JarLauncher"
# 容器对外暴露的端口,也就是fwatchdog进程监听的端口
EXPOSE 8080
# 健康检查
HEALTHCHECK --interval=5s CMD [ -e /tmp/.lock ] || exit 1
# 容器启动命令,这里是执行二进制文件fwatchdog
CMD ["fwatchdog"]