基于Docker的RStudio和PostgreSQL

285 阅读5分钟

这是关于Docker、PostgreSQL数据库和Anomaly数据集的两部分文章的第一部分。

背景介绍

在最近的LinkedIn帖子(原文Rami转帖)和推特中,我向互联网上的人询问他们最喜欢的异常检测问题的数据集,特别是在时间序列领域。我得到了很多回复,现在有大量的数据可以玩了,感谢那些回复的朋友们。

为了玩好这些数据,我想要一个更好的解决方案,而不是把数据保存为CSV文件、qs对象或R包。我想要一个数据库来存储原始输入数据、我处理过的数据和算法结果。虽然我过去曾以传统方式设置数据库,但这次我希望整个代码库是可移植和可复制的。

因此,我用Docker设置了所有的东西,而且工作得很顺利。如果你想学习如何做到这一点,请关注我接下来的文章。

  • 第一部分--(本帖)将教你如何为个人PostgreSQL数据库+RStudio的代码开发设置一个简单的可重复的基于Docker的工作流程。
  • 第二部分 - (下一篇)将是异常数据的ETL管道

你为什么要读这个?

在本教程结束时,你将能够快速设置一个基于Docker的个人¹PostgreSQL数据库。你将学会如何使用docker-compose快速部署PostgreSQL和RStudio。你将能够在R中访问数据库并立即开始开发。最重要的是,由于你继承了设置脚本和Docker的优点,整个过程将是完全可重复的。

本教程假设你熟悉Docker和Docker环境下的RStudio。如果你不熟悉,我建议先阅读 在R中的可重复性工作 首先。

概述

你将会启动两个Docker镜像。

  1. 一个PostgreSQL镜像。我选择postgres:13.3
  2. 一个RStudio镜像。我选择hatmatrix/blog:base ²

为了在容器寿命结束后永久地存储你的数据,你将挂载两个卷,每个容器一个。我选择了

  1. 对于PostgreSQL:$HOME/docker/volumes/postgres
  2. 对于R项目:$HOME/github

设置的概述³

除了容器内的PostgreSQL之外,这些路径都不是特别的,你可以根据自己的喜好定制其他的路径。默认情况下,postgres:13.3希望数据库位于/var/lib/postgresql/data。如果你选择其他数据库,请相应地修改。

我使用docker-compose来同时启动PostgreSQL和RStudio服务。这很方便,同时也确保PostgreSQL服务先运行,然后是RStudio。只需使用几个命令就可以轻松地启动或停止所有的服务。

首次设置

你需要在第一次设置PostgreSQL数据库的时候运行这些步骤。我把这些步骤存放在00-postgres-init.sh中。

1 - 目录设置

你需要一个本地目录来存储PostgreSQL数据库。第3-10行为你处理了这个问题。

medium.com/media/bb4f4…

2 - PostgreSQL的设置

现在是设置数据库的时候了。你至少需要两个步骤才能开始。

  1. 一个新的 "角色"(类似于登录),具有创建新数据库的权限。
  2. 至少有一个数据库可以使用。在我的脚本中,我做了两个:工作和反常。

为了操作数据库,你需要一个正在运行的PostgreSQL服务器来处理psql命令。你将使用docker run启动一个。你需要使用-v安装正确的卷。接下来,我们通过在docker exec中插入psql命令来创建角色和数据库。然后,我们停止该容器

medium.com/media/7782d…

综上所述,现在我有一个PostgresSQL数据库。

  • 存储在$HOME/docker/volumes/postgres
  • 有一个新的角色rahul和密码pass
  • 有2个数据库:work和anomaly

日常工作流程

tldr: 你如何开始工作?

  1. docker-compose.yml存储在本地目录下
  2. 如果你改变了我选择的图像/目录,请修改它
  3. 在shell中,运行docker-compose up -d

提示:要想在RStudio中直接启动浏览器(对我来说是火狐浏览器),请在存放docker-compose.yml的目录中运行此命令。

docker-compose up -d; firefox localhost:8787

pro_-protip_: 保存一个别名,并使该命令通用。-f参数指示docker-compose你想使用哪个文件。现在可以从系统的任何地方运行。

medium.com/media/23d23…

分解

docker-compose.yml里有什么?我们正在创建两个服务,一个叫db,另一个叫rstudio.⁴。

让我们先看看db的情况。如果你熟悉docker的运行参数,大部分参数看起来都很熟悉。这里的新内容是重启:除非停止的参数,它告诉Docker只在PostgreSQL当前停止的情况下启动它。

medium.com/media/1ede3…

第二个服务是rstudio。除了典型的参数外,这里有趣的参数是 depends_on,它告诉Docker只有_在_数据库启动和运行_后_才能运行这个镜像。太棒了

medium.com/media/40bbb…

通过R连接

用来测试你的连接。运行你的DBI::命令,_除了_一个关键的区别。

在进行连接时,确保主机的名字是你在docker-compose.yml中选择的数据库服务的名字。(在docker之外,你通常会使用localhost来连接到本地PostgreSQL服务器)。)

medium.com/media/f86ab…

这就是了!你现在就可以开始比赛了。你可以像平常一样使用数据库,使用

medium.com/media/854e1…

停止服务

你在这里有两个选择。

  1. docker-compose stop将停止服务,你可以用docker-compose start重新启动。
  2. docker-compose down也会删除容器。运行docker-compose up就可以再次启动了。

_8月8日编辑:_我刚刚知道,我原来的博文中的脚注并没有转到媒介上。它们在这里。

  1. 我强调 "个人",因为我没有在工作环境中设置适当的角色和授权等。但是,这对我个人使用来说已经足够好了。

  2. 这是我自己基于rocker/rstudio的图片。

  3. _归属:
    _DB图标:Pixel
    perfectFolder图标:
    Icongeek26RAM图标:
    FreepikStorage图标:Smashicons

  4. 这些只是标签,你可以随心所欲地称呼它们。

原文发表于 https://rsangole.netlify.app.


基于Docker的RStudio和PostgreSQL最初发表在MediumTowards Data Science,人们通过强调和回应这个故事继续对话。