显示导航

365bet地区使用docker为您的365bet地区应用提供外部服务

365bet地区了解如何在具有Docker容器的365bet地区应用程序中使用Postgresql数据库

s伊万·洛佩斯·塞尔吉奥·德尔阿莫

365bet地区版本 3.3.2

训练

365bet地区培训由创建并积极维护365bet地区框架的人们开发和交付

入门

365bet地区如果您进行任何真正的365bet地区开发,您将需要连接到外部服务数据库服务,例如ElasticSearch Redis等

365bet地区通常,您需要在开发计算机上安装这些服务以复制生产环境。例如,在MacOS上进行开发的情况下,365bet地区应用程序会连接到MSSQL数据库。在开发环境中安装此类外部服务可能很困难或不可能

365bet地区在许多其他方面,Docker可以帮助我们简化这种情况。在本指南中,您将编写一个365bet地区应用程序,该应用程序连接到在docker容器上运行的PostgreSQL数据库。您不会在计算机上安装Postgres,而是拉一个PostgreSQL映像来创建一个容器使用该图像并启动容器,您将修改365bet地区应用程序以连接到在容器中运行的PostgreSQL数据库

如何完成指南

要开始,请执行以下操作

要么

365bet地区指南存储库包含两个文件夹

  • 初始初始项目通常是一个简单的365bet地区应用程序,其中包含一些其他代码,可以帮助您快速入门

  • 完成一个完整的示例它是按照指南中介绍的步骤进行操作并将这些更改应用于文档的结果。初始

要完成指南,请转到初始

  • 光盘进入grails指南grails docker外部服务初始

并按照下一节中的说明进行操作

您可以直接前往完成的例子如果你光盘进入grails指南grails docker外部服务完成

编写指南

安装和配置Docker

如果您尚未安装Docker,则需要安装它.

根据您的环境,您可能需要将Docker的可用内存增加到GB或更多。

Docker首选项

提示获取风筝

Kitematic是用于管理Docker容器的出色桌面应用程序。首次单击“打开Kitematic”时,它将提示您下载并安装它。然后,您可以使用Kitematic来查看容器的输出,管理其设置等。

风筝

域类

创建域类这将帮助您验证是否在docker容器中运行的PostgreSQL数据库中创建了数据库架构

365bet地区应用程序域演示书groovy
演示进口 常规转换CompileStatic

静态编译
  {
    标题

Gradle Docker插件

在本指南中,我们使用Gradle Docker插件一个用于管理Docker映像和容器的Gradle插件

要安装Gradle插件,请修改建立gradle:

建立gradle
buildscript存储库mavenLocal maven url"https repo grails org grails核心"依赖类路径"org grails grails gradle插件$grails版本"类路径"gradle插件com精力充沛的工作webdriver binaries webdriver binaries gradle插件"类路径"gradle插件com精力充沛的想法gradle插件"类路径"org grails插件休眠${gormVersion"发布"}"类路径"com bertramlabs插件资产管道gradle"类路径"com bmuschko gradle docker插件" (1)应用插入:"日食"应用插入:"理念"应用插入:"战争"应用插入:"组织grails grails网站"应用插入:"使用通电工作的webdriver二进制文件"应用插入:"充满活力的工作理念项目组成部分"应用插入:"资产管道"应用插入:"组织grails grails gsp"应用插入:"com bmuschko docker远程api" (1)
1 Gradle Docker插件

Gradle Docker任务

配置几个Gradle任务,这些任务使我们能够提取Docker映像并使用Gradle创建开始停止PostgreSQL容器

建立gradle
进口 com bmuschko gradle docker任务容器DockerCreateContainer
进口 com bmuschko gradle docker任务容器DockerStartContainer
进口 com bmuschko gradle docker任务容器DockerStopContainer
进口 com bmuschko gradle docker任务映像DockerPullImage任务pullPostgresImage类型DockerPullImage组'码头工人' (1)ext imageName'Postgres的' (2)imageTag'9.6.6'  (3)描述'拉PostgreSQL图像'仓库imageName标签imageTag任务createPostgresContainer类型DockerCreateContainer取决于pullPostgresImage组'码头工人'  (1)ext pgContainerName"演示Postgres" (4)dbName"演示数据库" (5)dbPort5432 (6)dbPassword'开发者密码'  (7)描述'创建PostgreSQL容器'containerName pgContainerName imageId"${pullPostgresImage imageName}:${pullPostgresImage标签}"portBindings"${dbPort}:5432"大约"邮递密码${dbPassword}",
        "POSTGRES数据库${dbName}",
    ]  []onError e如果e类simpleName ['BadRequestException', '冲突异常'记录器警告'容器已经存在' (8)
        } 其他 {
            任务开始PostgresContainer类型DockerStartContainer取决于createPostgresContainer组'码头工人' (1)描述'启动Postgres容器'containerId createPostgresContainer pgContainerName onError e如果e类simpleName'NotModifiedException'记录器警告'容器已经开始'  (8)
        } 其他 {
            onComplete记录器信息"Postgres正在监听端口${createPostgresContainer dbPort}"任务stopPostgresContainer类型DockerStopContainer组'码头工人' (1)描述'停止Postgres容器'containerId createPostgresContainer pgContainerName onError e如果e类simpleName'NotModifiedException'记录器警告'容器已停止' (8)
        } 其他 {
            
1 将相关任务归为一组将运行时的Gradle任务可视化gradlew任务全部
2 Docker映像名称
3 Docker映像标签
4 Docker容器名称
5 数据库名称
6 数据库端口
7 数据库用户的密码默认情况下,用户名是Postgres的
8 如果已创建或启动容器已成功启动或停止,并且调用Gradle任务,请不要失败

配置PostgreSQL

修改建立gradle并添加PostgreSQL依赖

建立gradle
提供"org postgresql postgresql jre"

配置数据源开发环境以使用Docker内部运行的PostgreSQL数据库

grails应用配置会议应用yml
数据源:
    方言: 组织休眠方言PostgreSQLDialect
    driverClassName: org postgresql驱动程序
    用户名: Postgres的
    密码: 开发者密码
    dbCreate: 更新
    网址: jdbc postgresql本地主机演示数据库

运行应用

在运行应用程序之前,首先启动PostgreSQL

gradlew startPostgresContainer

365bet地区然后启动365bet地区应用

gradlew bootRun

如果连接到数据库,将看到预期的数据库架构

数据库创建

bootRun取决于PostgreSQL

您可以配置bootRun任务取决于startPostgresContainer任务添加以下内容建立gradle:

bootRun取决于startPostgresContainer

这将创建下一个依赖路径

bootRun startPostgresContainer createPostgresContainer pullPostgresImage

对于持续集成环境,这样的路径可能是您感兴趣的

仅使用Docker

还有一个不需要使用Gradle插件的选项。通过这种方法,我们可以使用普通Docker构建一个Docker镜像并启动一个容器

定义Docker文件

创建以下Docker文件:

src主docker Dockerfile
来自postgres(1)VOLUME var lib postgresql数据(2)COPY设置sh docker入口点initdb d(3)暴露(4)
1 使用与以前相同的PostgreSQL映像和版本
2 定义一个卷来存储数据
3 将脚本复制到入口点目录AnySH要么sql启动容器时将执行此目录中的文件
4 露出港口

同时创建文件安装程序:

src主docker设置sh
bin bash echo创建数据库在执行用户postgres导出时执行所有操作PGUSER postgres为应用程序以及为dev和test psql创建数据库的特定用户(1)CREATE DATABASE dev demo db使用登录密码dev密码创建角色dev用户,将DATABASE dev demo db上的所有特权授予TO dev用户(2)创建数据库测试演示数据库,使用登录密码测试角色创建角色测试用户,将所有特权授予数据库测试演示数据库,以测试用户EOSQL回声回显数据库创建
1 创建用于开发环境的数据库用户和密码
2 为测试环境定义另一个数据库用户和密码

建立形象

创建这些文件后,我们来构建docker映像

docker build t postgres自定义src主docker

启动一个容器

根据我们刚刚创建的图像第一次创建和启动容器

docker run d p name demo postgres postgres自定义

从现在开始,每次我们要开始停止容器时,我们只需要执行

码头工人开始演示postgres码头工人停止演示postgres
请记住,您还需要更改yml应用程序使用在中定义的新凭据安装程序文件

将数据库开发环境配置替换为

grails应用配置会议应用yml
环境:
    发展:
        数据源:
            方言: 组织休眠方言PostgreSQLDialect
            driverClassName: org postgresql驱动程序
            用户名: 开发用户
            密码: 开发者密码
            dbCreate: 更新
            网址: jdbc postgresql本地主机dev demo db

帮助365bet地区

OCI赞助了本指南的创建OCI提供了几种365bet地区服务:

免费咨询

OCI 365bet地区团队包括365bet地区联合创始人Jeff Scott Brown和Graeme Rocher检查我们的365bet地区课程并向发展和维护365bet地区的工程师学习

Grails OCI团队