在我的应用程序中,我有5个docker容器,每个容器都是从Dockerfile构建的映像开始的。以下是结构:
-projectdir
-docker
-application1
-Dockerfile
-script.sh
-application2
-Dockerfile
-script.sh
-application3
-Dockerfile
-application4
-Dockerfile
-script.sh
-application5
-Dockerfile
script.sh被复制到应用程序1,2和4中的Dockerfile中。问题是我必须在每个应用程序目录中放置相同的script.sh.有没有办法使用包含单个script.sh的共享文件夹并从中复制?我正在使用docker-compose来构建和运行容器。
答案 0 :(得分:5)
您可以定义一个专用于将脚本保存在volume(作为data volume container)
的容器scripts:
volumes:
- /path/to/scripts
application1:
volumes_from:
- scripts
application2:
volumes_from:
- scripts
/path/to/scripts
文件夹将在每个应用程序中共享
scripts
Dockerfile应该创建/path/to/scripts
并复制其中的script.sh
。
答案 1 :(得分:2)
从Docker 1.5开始,您可以在Dockerfile的构建上下文中指定路径。以下是有效的:
-projectdir
-docker
-script.sh
-application1
-Dockerfile
-application2
-Dockerfile
...
您可以使用以下内容进行构建:
$ cd docker
$ docker build -f application1/Dockerfile .
不幸的是,我不认为您可以使用Compose执行此操作,因此您可能必须使用单独的脚本来构建和标记您可以在Compose中使用的图像。