习惯性的方式pipe理Docker中的持久数据存储
设置
我在本地机器上有10多个镜像,未来可能会有数TB的镜像,在这种情况下,它将被托pipe在aws上。 这些图像将被提供给一些网站,也是一个机器学习pipe道的input。
现在我正在开发我的本地机器。 源代码位于path/to/src
,数据位于path/to/images
。 我已经使用Dockerfile
build立了一个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是:
-
一个显而易见的方法是将所有的图像移动到
path/to/src
,但这对我来说似乎很脏。 -
另一种可能是在
Dockerfile
ADD
目录。 那么我需要将这两个目录移动到Dockerfile
所在的path/to/project
。 然后将src移动到path/to/project/src
和data到path/to/project/data
。 但是这个味道又像选项1一样。 -
使用
docker-compose
以某种方式带来数据。 尽pipe阅读了docker volume
上的文档,但我现在不知道该怎么做。
处理这个问题的惯用方法是什么? 如果方式是选项3,有人可以解释一下吗?
- 使用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立或图像不是两个。