Docker:项目中有多个Dockerfile

问题描述 投票:209回答:6

当您有一个用于数据库的Dockerfile,一个用于应用程序服务器的Dockerfile等时,如何组织属于项目的Dockerfile?您是否在源代码中创建了某种层次结构?一个大型企业项目不能仅包含一个Dockerfile?

docker
6个回答
7
投票

作者注

此答案已过时。无花果不再存在,并已由Docker compose取代。


原始答案

我只是为每个组件创建一个包含Dockerfile的目录。示例:

[构建容器时,只需提供目录名称,Docker将选择正确的Dockerfile。


278
投票

newer versions(>=1.8.0) of docker中,您可以执行此操作

docker build -f Dockerfile.db .
docker build -f Dockerfile.web .

大节省。

编辑:根据raksja的评论更新版本

编辑:来自@vsevolod的评论:通过提供文件.Dockerfile扩展名(而不是名称),可以在VS代码中突出显示语法。 Prod.Dockerfile,Test.Dockerfile等。


123
投票

在单独的目录中使用docker-compose和多个docker-compose

不要将您的Dockerfile]重命名为DockerfileDockerfile.db,您的IDE可能不支持它,您将失去语法高亮显示。

作为Dockerfile.web,您可以有多个Kingsley Uchnor said,每个目录一个,代表您要构建的内容。

我希望有一个Dockerfile文件夹,其中包含每个应用程序及其配置。这是具有数据库的Web应用程序的示例项目文件夹层次结构。

docker

docker-compose.yml docker ├── web │   └── Dockerfile └── db    └── Dockerfile 示例:

docker-compose.yml

[version: '3' services: web: # will build ./docker/web/Dockerfile build: ./docker/web ports: - "5000:5000" volumes: - .:/code db: # will build ./docker/db/Dockerfile build: ./docker/db ports: - "3306:3306" redis: # will use docker hub's redis prebuilt image from here: # https://hub.docker.com/_/redis/ image: "redis:alpine" 命令行用法示例:

docker-compose

如果构建Dockerfile时需要以前文件夹中的文件,则>]

您仍然可以使用上述解决方案,并将# The following command will create and start all containers in the background # using docker-compose.yml from current directory docker-compose up -d # get help docker-compose --help 放置在诸如Dockerfile的目录中,您需要像在docker/web/Dockerfile中那样设置内部版本context

docker-compose.yml

这样,您将可以拥有这样的东西:

version: '3'
services:
  web:
    build:
      context: .
      dockerfile: ./docker/web/Dockerfile
    ports:
     - "5000:5000"
    volumes:
     - .:/code

和这样的config-on-root.ini docker-compose.yml docker └── web    ├── Dockerfile    └── some-other-config.ini

./docker/web/Dockerfile

FROM alpine:latest COPY config-on-root.ini / COPY docker/web/some-other-config.ini / 。请确保参考Here are some quick commands from tldr docker-compose了解更多详细信息。

[在Intellij中,我简单地将Docker文件的名称更改为* .Dockerfile,并将文件类型* .Dockerfile与docker语法相关联。

[添加一个抽象层,例如,在此项目official documentation中的YAML文件,看起来像]

https://github.com/larytet/dockerfile-generator

简短的Python脚本/ make可以从配置文件生成所有Dockerfile。

[在需要使用多个dockerfile的项目中工作时,只需在单独的目录中创建每个dockerfile。例如,

app /db /

以上每个目录都将包含其dockerfile。构建应用程序时,docker将搜索所有目录并构建所有dockerfile。


8
投票

[在Intellij中,我简单地将Docker文件的名称更改为* .Dockerfile,并将文件类型* .Dockerfile与docker语法相关联。


3
投票

[添加一个抽象层,例如,在此项目official documentation中的YAML文件,看起来像]


1
投票

[在需要使用多个dockerfile的项目中工作时,只需在单独的目录中创建每个dockerfile。例如,

热门问题
推荐问题
最新问题