在ACI上为Carto / Postgresql设置持久数据

时间:2018-06-18 18:18:33

标签: postgresql docker azure-container-service cartodb azure-container-instances

我的主要目标是在保持数据的同时快速轻松地启动和运行映像。我认为ACI是最好的方法。假设这是真的......

[Edit2]似乎可能存在一个更基本的问题是无法像在docker中那样指定主机名。我将在一个单独的主题中提出这个问题。我能够附加存储空间。

[原帖] 我想使用ACI来设置Docker Hub上的图像。我能够按照简单的教程here进行操作,但我需要附加存储空间。

具体来说,这是我正在使用的图片:https://hub.docker.com/r/sverhoeven/cartodb/

这些是如何设置持久数据的说明,但我认为它们不会直接转换为ACI。这取自"持久数据"该docker hub页面的一部分

  

要保留PostgreSQL数据,PostGreSQL数据目录(/ var / lib / postgresql)必须保留在Cartodb Docker容器之外。...

制作一个临时容器

docker create --name cartodb_pgdata sverhoeven/cartodb

将Postgresql数据目录(cartodb_pgdata)保存到本地目录。 **我们如何使用ACI做到这一点?

docker cp cartodb_pgdata:/var/lib/postgresql $PWD/cartodb_pgdata docker rm -f cartodb_pgdata

将cartodb_pgdata的所有权设置为文件系统上的(uid = 105)用户。 **我们如何使用ACI做到这一点?

sudo chown -R 105.105 $PWD/cartodb_pgdata 

在此之后,CartoDB容器将有一个在重新启动后保持填充的数据库。可以使用

启动CartoDB容器
docker run -d -p 80:80 -h cartodb.example.com -v $PWD/cartodb_pgdata:/var/lib/PostgreSQL sverhoeven/cartodb

有很多问题我无法找到解决方案,例如:

  • 我不知道是使用emptyDir还是Azure文件共享。
  • 我不知道如何编辑所有权
  • 我不知道如何设置ACI以在启动容器时调用特定的docker run命令

1 个答案:

答案 0 :(得分:1)

您应该使用Azure文件共享,因为emptyDir不是持久存储。基本上您需要的是在容器组中添加文件共享卷并将其挂载到/ var / lib / PostgreSQL。默认情况下,文件共享卷将以777权限挂载。

由于您在创建容器时已经传递了卷信息,例如progressLayout.setVisibility(View.VISIBLE); 通过CLI转换为基础az container create等效项。没有必要指定docker命令。

如何挂载文件共享: https://docs.microsoft.com/en-us/azure/container-instances/container-instances-volume-azure-files