如何将PostgreSQL卷附加到使用SBT本机打包程序生成的Docker映像上?

时间:2019-07-02 08:42:16

标签: scala docker playframework sbt sbt-native-packager

我希望能够使用暴露PostgreSQL实例的Docker卷在pre-prod环境中部署我的应用程序以进行集成测试。我正在使用Scala v2.12.8和Play v2.7。

看看SBT本机打包程序的environment settings,似乎可以定义dockerExposedVolumes来附加数据库。

使用普通的Docker撰写文件,我会做类似的事情:

   version: "3"
   services:
     db:
       image: postgres
       environment:
         - POSTGRES_USER=postgres
         - POSTGRES_PASSWORD=postgress
         - POSTGRES_DB=postgres
       ports:
         - "5433:5432"
       volumes:
         - pgdata:/var/lib/postgresql/data
       networks:
         - suruse
   volumes: 
     pgdata:

此配置取自此SO answer

我尝试搜索配置示例,但到目前为止没有发现任何有用的信息。现在我想知道我应该如何定义一个新的Docker卷,然后将其完全暴露给SBT创建的Docker映像?


解决方案

最终版本。我已经对其进行了全面测试,并且可以将数据库暴露在TCP端口5433上。

# https://docs.docker.com/samples/library/postgres/
version: "3"
services:
  app-pgsql:
    image: postgres:9.6
    restart: always
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=yourPasswordHere
      - POSTGRES_DB=yourDatabaseNameHere
      - POSTGRES_INITDB_ARGS="--encoding=UTF8"
    ports:
      - "5433:5432"
    volumes:
      - pgdata:/var/lib/postgresql/data
volumes: 
  pgdata:
    driver: local

使用sbt dockerComposeUp -useStaticPorts启动docker compose,然后使用docker ps -a检查容器是否实际暴露。另外,使用dockerComposeUpdockerComposeInstances提供的命令检查日志文件。

1 个答案:

答案 0 :(得分:1)

有一个 sbt插件可以帮助您实现这一目标:

sbt-docker-compose

这样您就可以将数据库添加到docker compose文件中,并且可以在sbt中运行所有内容。

这是Docker标准。这是Postgres的说明:

[run_postgresql_docker_compose][2]

该示例中的docker-compose.yml

version: '3'
services:
mydb:
image: postgres
volumes:
- db-data:/var/lib/postgresql/data
ports:
         - 5432:5432/tc

volumes:
db-data:
driver: local

由于这是Docker的一种标准方式,您将找到更多示例。