使用容器进行 R 开发
完成 。
在本部分中,您将了解如何为容器化应用程序设置开发环境。这包括:
- 添加本地数据库并持久化数据
- 配置 Compose 以在您编辑和保存代码时自动更新正在运行的 Compose 服务
您需要克隆一个新的存储库来获取包含连接到数据库的逻辑的示例应用程序。
更改到要克隆存储库的目录并运行以下命令。
$ git clone https://github.com/mfranzon/r-docker-dev.git
要尝试 Shiny 应用程序和本地数据库之间的连接,您必须修改Dockerfile更改COPY指令:
-RUN src/ . +RUN src_db/ .
您可以使用容器来设置本地服务,例如数据库。在本部分中,您将更新compose.yaml文件以定义数据库服务和用于保存数据的卷。
在克隆存储库的目录中,compose.yaml在 IDE 或文本编辑器中打开文件。
在该compose.yaml文件中,您需要取消注释用于配置数据库的属性。您还必须挂载数据库密码文件,并在shiny-app服务上设置一个环境变量,指向该文件在容器中的位置。
以下是更新后的compose.yaml文件。
services: shiny-app: build: context: . dockerfile: Dockerfile ports: - 3838:3838 environment: - POSTGRES_PASSWORD_FILE=/run/secrets/db-password depends_on: db: condition: service_healthy secrets: - db-password db: image: postgres restart: always user: postgres secrets: - db-password volumes: - db-data:/var/lib/postgresql/data environment: - POSTGRES_DB=example - POSTGRES_PASSWORD_FILE=/run/secrets/db-password expose: - 5432 healthcheck: test: [ "CMD", "pg_isready" ] interval: 10s timeout: 5s retries: 5 volumes: db-data: secrets: db-password: file: db/password.txt
笔记
要了解有关 Compose 文件中的说明的更多信息,请参阅 。
在使用 Compose 运行应用程序之前,请注意此 Compose 文件指定了一个password.txt文件来保存数据库的密码。您必须创建此文件,因为它不包含在源存储库中。
在克隆存储库的目录中,创建一个名为 的新目录db,并在该目录内创建一个名为 的文件password.txt,其中包含数据库的密码。使用您喜欢的 IDE 或文本编辑器,将以下内容添加到password.txt文件中。
mysecretpassword
保存并关闭password.txt文件。
您的目录中现在应该有以下内容r-docker-dev 。
├── r-docker-dev/ │ ├── db/ │ │ └── password.txt │ ├── src/ │ │ └── app.R │ ├── src_db/ │ │ └── app_db.R │ ├── requirements.txt │ ├── .dockerignore │ ├── compose.yaml │ ├── Dockerfile │ ├── README.Docker.md │ └── README.md
现在,运行以下docker compose up命令来启动您的应用程序。
$ docker compose up --build
现在打开浏览器测试您的数据库连接:
http://localhost:3838
您应该会看到一条弹出消息:
DB CONNECTED
按ctrl+c终端停止您的应用程序。
使用 Compose Watch 在您编辑和保存代码时自动更新正在运行的 Compose 服务。有关 Compose Watch 的更多详细信息,请参阅 。
文件中的第 15 至 18 行compose.yaml包含当当前工作目录中的文件发生更改时触发 Docker 重建映像的属性:
|
|
运行以下命令以使用 Compose Watch 运行您的应用程序。
$ docker compose watch
现在,如果您修改您的图像,app.R您将实时看到更改,而无需重新构建图像!
按ctrl+c终端停止您的应用程序。
在本部分中,您了解了如何设置 Compose 文件以添加本地数据库并保留数据。您还了解了如何在更新代码时使用 Compose Watch 自动重建和运行容器。
相关信息:
在下一节中,您将了解如何使用 GitHub Actions 设置 CI/CD 管道。
