惯用法管理Docker中的持久数据存储

时间:2017-06-20 20:58:14

标签: python docker docker-compose dockerfile

设置

我的本​​地机器上有10多个图像,未来可能会有数TB的图像,在这种情况下它将被托管,即aws。这些图像将被提供给某个网站,也可作为机器学习管道的输入。

现在我在我的本地机器上开发。源代码位于path/to/src,数据位于path/to/images。我已经使用Docker设置了Dockerfile个环境:

FROM bamos/openface
ADD . /face-off
WORKDIR /face-off    
RUN pip install -r requirements.txt    
EXPOSE 5000    
CMD [ "python", "app.py" ]

docker-compose档案:

version: '2'
services:
  web:
    build: .
    image: face-off-web
    command: python app.py
    ports:
        - "5000:5000"
    volumes:
        - .:/face-off
  redis:
    image: "redis:alpine"

问题

由于我在Docker容器中开发,我需要访问path/to/images中的所有图片。现在让我们保持简单,并说我使用预先指定的磁盘路径读取图像。我认为我的选择是:

  1. 一种显而易见的方法是将所有图像移动到path/to/src,但这对我来说似乎很脏。

  2. 另一种可能性是ADD Dockerfile中的目录。那么我需要将两个目录移动到path/to/project所在的Dockerfile。然后将src移至path/to/project/src,将数据移至path/to/project/data。但这又有点像选项1。

  3. 使用docker-compose以某种方式显示数据。尽管阅读docker volume上的文档,我现在还不知道如何做到这一点。

  4. 处理此问题的惯用方法是什么?如果方式是选项3,有人可以解释一下吗?

1 个答案:

答案 0 :(得分:2)

  
      
  1. 使用docker-compose以某种方式显示数据。尽管阅读了有关码头卷的文档,我现在还不知道该怎么做。
  2.   

对于您的用例,您希望将主机路径安装到容器中,就像您已经使用项目工作目录一样。只需为图像添加另一行:

version: '2'
services:
  web:
    build: .
    image: face-off-web
    command: python app.py
    ports:
      - "5000:5000"
    volumes:
      - .:/face-off
      - /images/on/host:/path/in/container
  redis:
    image: "redis:alpine"

在旁注上,请使用buildimage,而不是两者。