如果您有一个数据库Dockerfile,一个用于应用程序服务器,等等,您如何组织属于项目的Dockerfiles?你是否在源代码中创建了某种层次结构? 一个大型企业项目不能只包含一个Dockerfile吗?
答案 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.db
或Dockerfile.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
放在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。