我正在使用docker-compose,并且想针对不同服务的构建步骤使用不同的Dockerfile。该文档似乎建议将不同的Dockerfile放在不同的目录中,但我希望它们都在同一个目录中(也许可以使用以下约定区分:Dockerfile.postgres,Dockerfile.main ...)。这可能吗?
编辑:我有方案包含此docker-compose文件:
main:
build: .
volumes:
- .:/code
environment:
- DEBUG=true
postgresdb:
extends:
file: docker-compose.yml
service: main
build: utils/sql/
ports:
- "5432"
environment:
- DEBUG=true
postgresdb
的Dockerfile在哪里:
FROM postgres
# http://www.slideshare.net/tarkasteve/developerweek-2015-docker-tutorial
ADD make-db.sh /docker-entrypoint-initdb.d/
主要是:
FROM python:2.7
RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
RUN pip install --upgrade pip
RUN pip install -r requirements.txt
ADD . /code/
现在可以使用,但是我想postgresdb
通过调用Python脚本来扩展Dockerfile,该脚本根据SQL Alchemy构建的模型在数据库中创建表(Python脚本称为python manage.py create_tables
)。我想将其添加到数据库的Dockerfile中,但是由于容器的隔离,我不能在那里使用SQL Alchemy,因为该图像基于postgres
图像而不是Python的图像,并且不包含该sqlalchemy
软件包...
我能做什么?我尝试在中使用该main
服务postgresdb
,但不幸的是,该服务没有传递python及其软件包,因此,我仍然无法编写用于创建Postgres数据库(通过shell脚本)及其表(通过a)的单个Dockerfile。 Python脚本)。
由于Docker处理构建上下文的方式,这是不可能的。
您将必须Dockerfile
在每个目录中使用和放置一个目录,该目录成为该服务的Docker构建上下文的一部分。
请参阅:Dockerfile
实际上,您将需要一个docker-compose.yml
看起来像这样的:
service1:
build: service1
service2:
build: service2
请参阅:docker-compose
更新:
为了解决您的特定用例-虽然我了解您正在尝试做什么以及为什么我本人不会自己这样做。隔离是一件好事,有助于管理期望和复杂性。我将根据您的应用程序的源代码或在应用程序容器本身中作为另一个容器执行“数据库创建”。
另外,您可以查看更多脚本化和模板驱动的解决方案,例如shitit(我没有经验,但听到过上帝的盛情)。
FWIW:关注分离ftw :)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句