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