Utiliser docker-compose
et multiple Dockerfile
dans des répertoires séparés
Ne renommez pas votreDockerfile
en Dockerfile.db
ou Dockerfile.web
, il peut ne pas être pris en charge par votre IDE et vous perdrez la coloration syntaxique.
Comme l'a dit Kingsley Uchnor , vous pouvez en avoir plusieurs Dockerfile
, un par répertoire, qui représentent quelque chose que vous voulez construire.
J'aime avoir un docker
dossier qui contient chaque application et sa configuration. Voici un exemple de hiérarchie de dossiers de projet pour une application Web qui possède une base de données.
docker-compose.yml
docker
├── web
│ └── Dockerfile
└── db
└── Dockerfile
docker-compose.yml
exemple:
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
exemple d'utilisation de la ligne de commande:
# 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
Si vous avez besoin de fichiers des dossiers précédents lors de la création de votre Dockerfile
Vous pouvez toujours utiliser la solution ci-dessus et placer votre Dockerfile
dans un répertoire tel que docker/web/Dockerfile
, tout ce dont vous avez besoin est de définir la construction context
dans votre docker-compose.yml
comme ceci:
version: '3'
services:
web:
build:
context: .
dockerfile: ./docker/web/Dockerfile
ports:
- "5000:5000"
volumes:
- .:/code
De cette façon, vous pourrez avoir des choses comme ça:
config-on-root.ini
docker-compose.yml
docker
└── web
├── Dockerfile
└── some-other-config.ini
et un ./docker/web/Dockerfile
comme ça:
FROM alpine:latest
COPY config-on-root.ini /
COPY docker/web/some-other-config.ini /
Voici quelques commandes rapides de tldr docker-compose . Assurez-vous de vous référer à la documentation officielle pour plus de détails.