gpt4 book ai didi

docker - 如何在 GCE 和容器镜像上使用持久化存储

转载 作者:行者123 更新时间:2023-12-02 20:04:34 26 4
gpt4 key购买 nike

我有一个 docker 镜像上传到 GCP 容器注册表,其中包含一个在 TomEE 和 postgres 上运行的 Web 应用程序,用于数据持久性。我创建了一个计算引擎实例,并使用如下命令在端口 8443 上公开了 HTTPS 访问。

gcloud beta compute instances create-with-container MY_VM --tags MY_TAG --machine-type=n1-standard-2 --container-image IMAGE_ID
gcloud compute firewall-rules create MY_VM-8443 --allow tcp:8443 --source-ranges 0.0.0.0/0 --target-tags MY_TAG

这可以部署应用程序并使其可以通过端口 8443 上的 GCE 实例的公共(public)地址访问,但是当重新启动 GCE 实例时,应用程序创建到容器的 postgres 数据库的任何数据都将丢失。我想为 postgres 数据安装一个永久磁盘到容器中,这样数据就不会丢失,并且能够根据我对文档的阅读内容为 GCE 支持的备份目的拍摄快照。

根据 GCE 的文档,我认为这是一个两步过程。
  • 创建一个磁盘并将其附加到 GCE 实例。
  • 在创建 GCE 实例时使用此选项将附加的磁盘挂载到 docker 容器: --container-mount-host-path mount-path=/mnt/disks/appdata,host-path=/var/lib/postgresql/data,模式=rw

  • 我被困在第一步。我创建了一个磁盘,将它附加到 GCE 实例,格式化新磁盘,挂载它,并更新/etc/fstab,以便在启动时按照 GCE“添加或调整永久磁盘大小”操作指南重新挂载磁盘。所有步骤都适用于 fstab 更改。当我使用以下命令停止并重新启动 GCE 实例时,/etc/fstab 的内容没有保留(尝试了整个过程几次)......
    gcloud compute instances stop MY_VM
    gcloud compute instances start MY_VM

    为了验证我得到了这个过程是否正确,我尝试使用使用如下命令创建的非容器 GCE 实例进行相同的磁盘设置。这可以按预期工作,当实例停止并启动时,/etc/fstab 将恢复并安装磁盘。
    gcloud compute instances create test-host --tags test-server --machine-type=f1-micro

    为了完整起见,这里是用于设置附加磁盘的命令类型。
    gcloud beta compute ssh MY_VM
    sudo lsblk # List the attached disks
    sudo mkfs.ext4 -m 0 -F -E lazy_itable_init=0,lazy_journal_init=0,discard /dev/sdb
    sudo mkdir -p /mnt/disks/appdata
    sudo mount -o discard,defaults /dev/sdb /mnt/disks/appdata
    sudo chmod a+w /mnt/disks/appdata
    sudo cp /etc/fstab /etc/fstab.backup
    sudo blkid /dev/sdb # Get the block ID for the disk
    sudo vi /etc/fstab # Add the line below
    UUID=[UUID_VALUE] /mnt/disks/appdata ext4 discard,defaults 0 2

    /etc/fstab 对基于 GCE 容器的实例有限制吗?

    如果这应该工作,我该如何调试/etc/fstab 在重新启动时丢失?

    是否有更好的方法向 GCE 实例中运行的容器添加持久存储?

    最佳答案

    由于您正在运行基于容器的 GCE 实例,因此您必须以不同的方式创建和挂载卷。并不是说/etc/fstab 对基于 GCE 容器的实例有限制,它只是一种不同的方法。

    要在容器中创建和挂载卷,您必须使用 docker 命令。您可以通过运行以下命令来创建卷:

    $docker 卷创建 [volume_name]

    我附上了官方 docker 页面上关于如何在容器中创建卷的文章 here .它还包括有关如何从容器备份和恢复数据卷的步骤。文章建议使用卷,因为备份它们更容易。

    编辑:根据我的研究,这似乎是 Docker 的一个问题。您可以阅读有关该问题的更多信息 here .

    关于docker - 如何在 GCE 和容器镜像上使用持久化存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50769879/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com