5.3.10.1. 单一 UberJAR 部署

在 CUBA Studio 打开项目,点击 CUBA > Deployment > UberJAR Settings 主菜单项或者双击项目树中 Project > Deployment 的条目,按照如下介绍配置选项:

  • 勾选 Build Uber JAR

  • 勾选 Single Uber JAR,如果默认没勾选。

  • 点击 Logback configuration file 旁边的 Generate 按钮。

  • 点击 Custom Jetty environment file 旁边的 Generate 按钮,在弹出框输入数据库库连接信息。如果需要在应用程序中使用标准的 PostgreSQL 容器,需要修改数据库 URL 字段,从 localhost 改为 postgres

Studio 会在 build.gradle 文件添加 buildUberJar 任务,执行这个任务创建 JAR 文件:

  1. gradle buildUberJar

创建 CUBA app 的 Docker 镜像(image)需要基于 OpenJDK。推荐使用 Dockerfile 来记录 Docker 需要知道的关于程序运行的信息 - 基础 Docker 镜像、项目代码地址、任何需要的依赖以及启动服务需要的命令。

  • 在项目中创建 docker-image 目录。

  • 拷贝 Uber JAR 文件到这个目录。

  • 创建 Dockerfile 文件,按照下面简单内容:

  1. ### Dockerfile
  2. FROM openjdk:8
  3. COPY . /usr/src/cuba-sales
  4. CMD java -Dapp.home=/usr/src/cuba-sales/home -jar /usr/src/cuba-sales/app.jar
  • FROM 指令用来初始化一个新的镜像构建,并且设置 Base Image 用来做之后的步骤。

  • COPY 指令从 <src> 拷贝新文件或者目录到 Docker 容器的文件系统的 <dest> 路径。可以指定多个 <src> 源,但是这些目录需要是构建源目录(the context of the build)的相对路径。

  • CMD 指令的主要作用是给执行(executing)容器提供默认参数。这些默认参数可以包含一个可执行文件,或者不包含可执行文件,但是这种情况下还需要指定一个 ENTRYPOINT 指令。

了解更多 Dockerfile 指令的介绍,可以查看 Dockerfile 参考

构建 Docker 镜像:

  • docker-image 目录打开终端窗口。

  • 运行 docker build 命令。命令非常简单 - 带一个可选的 tag 名称,使用 -t 指定;还有一个参数是包含 Dockerfile 的目录,. 表示当前目录。

  1. docker build -t cuba-sample-sales .

如果没有 openjdk:8 镜像文件,docker 客户端会先拉取(pull)基准镜像然后再创建新镜像。

如需定义和运行多容器 Docker 应用程序,可以使用 Docker Compose tool。通过 Compose,使用一个 YAML 文件来配置多个应用服务,因此这些服务可以通过 Compose 一起启动。

docker-compose.yml 文件内容类似如下:

  1. version: '2'
  2. services:
  3. postgres:
  4. image: postgres:9.6.6
  5. environment:
  6. - POSTGRES_PASSWORD=cuba
  7. - POSTGRES_USER=cuba
  8. - POSTGRES_DB=sales
  9. ports:
  10. - "5433:5432"
  11. networks:
  12. - sales-network
  13. web:
  14. image: cuba-sample-sales
  15. ports:
  16. - "8080:8080"
  17. networks:
  18. - sales-network
  19. networks:
  20. sales-network:

这个 compose 文件定义了两个服务,webpostgres

web 服务:

  • 使用了从当前目录的 Dockerfile 构建的镜像。

  • 将容器曝露的 8080 端口转发到宿主机的 8080 端口。

postgres 服务使用了从 Docker Hub 拉取的公共 Postgres 镜像。

启动应用程序,进入包含 docker-compose.yml 文件的目录并且运行:

  1. docker-compose up

当任务启动任务完成后,可以通过 http://localhost:8080/app 访问应用程序。