Postgres Dockerfile 探索——VOLUME 语句使用

唠叨

我正在查看示例 dockerfile 以查看如何使用 VOLUME,我遇到以下几行 - https://github.com/docker-library/postgres/blob/master/Dockerfile-alpine.template

ENV PGDATA /var/lib/postgresql/data
# this 777 will be replaced by 700 at runtime (allows semi-arbitrary "--user" values)
RUN mkdir -p "$PGDATA" && chown -R postgres:postgres "$PGDATA" && chmod 777 "$PGDATA"
VOLUME /var/lib/postgresql/data

这里使用卷的目的是什么,这是我的理解-请确认

  1. 在图像文件系统中创建 $PGDATA 指向的目录。
  2. 将它与 VOLUME 映射,以便稍后通过公开容器可以使用的预定义目录,作为填充内容的一部分创建的任何内容通过 docker-entrypont.sh。

如果未定义 VOLUME 指令怎么办?除非未定义 VOLUME,否则某人找出在哪里保留自定义更改可能会更费力

尤金·迈耶

卷在此处定义,因此当您启动容器(从此映像之外)时,会创建一个新的匿名卷。

卷将保存您在这方面的合理数据,因此这是您在正常/软 docker 映像生命周期中“坚持”所需的全部内容。

通常,当 docker 镜像的维护者已经知道应该保存的数据的位置(如这里)时,将使用VOLUMEDockerfile装饰文件夹如前所述,这将在运行时创建一个匿名卷,但也会让您知道(使用docker inspect或读取 Dockerfile )用于持久性的卷所在的位置。

在生产中,您通常会在挂载到此文件夹的 docker-compose 文件中使用命名卷/路径挂载

docker-compose.yml 作为命名卷

volumes:
  mydbdata:/var/lib/postgresql/data

docker-compose.yml 作为路径

volumes:
  ./local/path/data:/var/lib/postgresql/data

VOLUME在 Dockerfile中定义这样的定义实际上有缺点,我不会在这里详细说明,但主要原因是“生命周期”。

没有VOLUMEDockerfile运行

docker-compose up -d
# do something, manipulate the data
docker-compose down

# all your data would be lost when starting again
docker-compose up -d

不仅会删除正在运行的容器,还会删除所有数据库数据,这可能不是您想要的(您只是想重新创建容器)。

随着VOLUME在Dockerfile中,不久容量会甚至在坚持docker-compose down

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章