个性化阅读
专注于IT技术分析

Dockerfile-容器路径上的touch文件

docker-compose.yml文件:

web:
  build: ./code
  ports:
    - "80:80"
  volumes:
    - ./mount:/var/www/html

./code中的dockerfile:

FROM wordpress
WORKDIR /var/www/html
RUN touch test.txt

这是我用来建立简单WordPress博客的生产环境(为简单起见, 在docker-compose.yml和Dockerfile中省略了其他服务)。

这是我在做什么:

  • 在容器目标/ var / www / html上绑定安装主机目录
  • 在构建期间创建test.txt文件

什么不起作用:

  • 当我检查容器上的/ www / var / html时, 找不到test.txt文件

我的理解:

  • 绑定安装在运行时发生
  • 在这种情况下, 文件被创建, 但是当你安装主机目录时, Dockerfile中的命令将被覆盖
  • 使用卷挂载时, 它可以工作

我不明白的是:

  • 如何使用绑定安装来持久存储数据, 将最新代码放入容器的方式是什么?
  • 一个人如何创建一个脚本, 可以让我在运行时实现这一目标?
  • 考虑到必须使用绑定安装, 我还能如何实现此目的(AWS ECS仅在将主机目录路径用于卷时才保留数据)

#1


你的数据将在运行时保留。运行时存储在/ var / www / html中的所有内容都将保留在主机./mount目录中。

在构建时, 一切都发生在容器映像内的docker层。

如果你想先做任何事, 然后再创建脚本, 请将ADDit添加到映像中, 并在容器启动时使用CMD或ENTRYPOINT运行脚本。

综上所述

  • 如何使用绑定安装来持久存储数据, 将最新代码放入容器的方式是什么?

你将最新代码添加到映像中(即git clone, COPY, ADD或适合你的代码)。容器不应该是可变的, 因此你应保持代码版本化并定义持久文件夹(例如用于上传)

  • 一个人如何创建一个脚本, 可以让我在运行时实现这一目标?

如果要在运行时执行此操作, 请将外壳程序脚本添加到映像, 然后再运行它。虽然, 这不是此用例的最佳方法。

  • 考虑到必须使用绑定安装, 我还能如何实现此目的(AWS ECS仅在将主机目录路径用于卷时才保留数据)

恕我直言, 你应该使用你的图片作为代码的构建。你的映像不应是可变的, 并且必须反映代码生命周期中的实例。用数据定义路径, 这些路径将是你在主机级别上的挂载。

赞(4)
未经允许不得转载:srcmini » Dockerfile-容器路径上的touch文件

评论 抢沙发

评论前必须登录!