Dockerfile - 在容器路径触摸文件

时间:2018-05-29 11:59:41

标签: wordpress docker docker-compose wordpress-theming dockerfile

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中的命令被覆盖
  • 使用卷装时,它可以正常工作

DON' 明白:

  • 有哪些方法可以将最新代码放入使用bind挂载来保存数据的容器中?
  • 如何创建一个可以让我在运行时实现此目的的脚本?
  • 考虑到我必须使用绑定装载(AWS ECS仅在您使用卷的主机目录路径时保留数据),我还能如何实现这一目标。

1 个答案:

答案 0 :(得分:0)

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

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

如果您想在任何事情之前做一些事情,可以创建一个脚本,ADD将其添加到您的图像中,并在容器启动时使用CMDENTRYPOINT来运行脚本。

总结

  • 有哪些方法可以将最新代码放入使用bind挂载来保存数据的容器中?

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

  • 如何创建一个可以让我在运行时实现此目的的脚本?

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

  • 考虑到我必须使用绑定装载(AWS ECS仅在您使用卷的主机目录路径时保留数据),我还能如何实现这一目标。
恕我直言,你应该使用你的图像作为你的代码的构建。您的图像不应该是可变的,必须反映代码生命周期中的实例。使用数据定义路径,这些路径将是您在主机级别的安装。