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仅在将主机目录路径用于卷时才保留数据)
【Dockerfile-容器路径上的touch文件】恕我直言, 你应该使用你的图片作为代码的构建。你的映像不应是可变的, 并且必须反映代码生命周期中的实例。用数据定义路径, 这些路径将是你在主机级别上的挂载。

    推荐阅读