在java web项目中,本地开发经常会需要在本地使用docker启动数据库等之类的服务。gradle提供了一个插件,允许通过gradle task启动docker的容器。在这里我们介绍的一个gralde插件com.avast.gradle.docker-compose
简单使用
引入插件
plugins { id "com.avast.gradle.docker-compose" version "0.16.11" }
定义task以及config
比如在我们项目的根目录下面,我们建立docker-compose.yml文件
version: '3.1' services: postgres: image: postgres restart: always container_name: spring-security-postgresql ports: - "15432:5432" environment: POSTGRES_DB: learn_gradle POSTGRES_USER: user POSTGRES_PASSWORD: password PGDATA: /var/lib/postgresql/data/pgdata volumes: - postgres-data:/var/lib/postgresql/data/pgdata volumes: postgres-data:
然后在build.gradle
文件里面定义相应的task以及配置
dockerCompose { useComposeFiles = ["${rootProject.projectDir}/docker-compose.yml"] }
此外如果我们想在每次bootRun
之前先启动数据库之类的操作,可以在build.gradle
添加task的依赖
bootRun.dependsOn composeUp
单独gradle文件
以上文件组织方式会有一个问题,就是以后插件越来越多的时候,build.gradle
文件会膨胀难以维护。这时我们可以把额外插件的配置放在单独的文件里面,然后只需要在build.gradle
里面引入即可。
创建单独的gradle文件
在gradle目录下面,我们创建docker-compose目录,然后在docker-compose目录下面创建docker-compose.yml
文件与docker-compose.gradle
文件
// docker-compose.gradle apply plugin: 'docker-compose' dockerCompose { useComposeFiles = ["${rootProject.projectDir}/gradle/docker-compose/docker-compose.yml"] } bootRun.dependsOn composeUp
在build.gradle文件引入
plugins { id "com.avast.gradle.docker-compose" version "0.16.11" } apply from: "${rootProject.projectDir}/gradle/docker-compose/docker-compose.gradle"
关于插件的使用
- 启动
./gradlew composeUp // 或者task 缩写 ./gradlew cU
- 暂停
./gradlew composeDown // 或者task 缩写 ./gradlew cD