习惯性的方式pipe理Docker中的持久数据存储

设置

我在本地机器上有10多个镜像,未来可能会有数TB的镜像,在这种情况下,它将被托pipe在aws上。 这些图像将被提供给一些网站,也是一个机器学习pipe道的input。

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

 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所有path/to/images 。 现在让我们保持简单,并说我使用预先指定的path读取图像到磁盘。 我认为我的select是:

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

  2. 另一种可能是在Dockerfile ADD目录。 那么我需要将这两个目录移动到Dockerfile所在的path/to/project 。 然后将src移动到path/to/project/src和data到path/to/project/data 。 但是这个味道又像选项1一样。

  3. 使用docker-compose以某种方式带来数据。 尽pipe阅读了docker volume上的文档,但我现在不知道该怎么做。

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

  1. 使用docker-compose以某种方式带来数据。 尽pipe阅读了Docker卷上的文档,但我现在不知道该怎么做。

对于你的用例,你想要在你的容器中安装一个主机path,就像你已经做了你的项目工作目录。 只需为图像添加另一行:

 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" 

在一个侧面说明,要么使用build立或图像不是两个。