项目中有多个Dockerfiles

时间:2014-12-10 19:58:29

标签: docker

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

5 个答案:

答案 0 :(得分:219)

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

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

大豁免。

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

答案 1 :(得分:73)

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

  

不要将您的Dockerfile 重命名为Dockerfile.dbDockerfile.web,您的IDE可能不支持它,您将失去语法突出显示功能。

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

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

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命令行用法示例:

# 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时需要先前文件夹中的文件

您仍然可以使用上述解决方案并将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。请务必参阅official documentation了解详情。

答案 2 :(得分:2)

添加一个抽象层,例如像这个项目https://github.com/larytet/dockerfile-generator中的YAML文件,它看起来像

centos7: base: centos:centos7 packager: rpm install: - $build_essential_centos - rpm-build run: - $get_release env: - $environment_vars

简短的Python脚本/ make可以从配置文件

生成所有Dockerfiles

答案 3 :(得分:2)

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

答案 4 :(得分:1)

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

应用程序/ 分贝/

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