Docker Compose vs. Dockerfile – quel est le meilleur?

Je lisais et apprenais Docker et essayais de choisir correctement la configuration de Django à utiliser. Jusqu’à présent, il y a soit:

Docker Compose ou Dockerfile

Je comprends que les Dockerfiles Docker Compose sont utilisés dans Docker Compose , mais je ne suis pas sûr qu’il soit recommandé de tout placer dans un grand fichier Docker avec plusieurs commandes FROM pour les différentes images?

Je souhaite utiliser plusieurs images différentes, notamment:

 uwsgi nginx postgres redis rabbitmq celery with cron 

Veuillez indiquer les meilleures pratiques pour configurer ce type d’environnement avec Docker .

Si cela aide, je suis sur un Mac, donc en utilisant boot2docker .

Quelques problèmes que j’ai rencontrés:

  1. Docker Compose n’est pas compatible avec Python3
  2. Je veux conteneuriser mon projet, donc si un grand fichier Dockerfile n’est pas idéal, alors je pense que je devrais le décomposer en utilisant Docker Compose
  3. Je suis d’accord pour rendre le projet compatible Py2 & Py3, alors je me penche vers django-compose

    La réponse est non plus.

    Docker Compose (ci-après appelé composition) utilisera le fichier Docker si vous ajoutez la commande de génération au docker-compose.yml de votre projet.

    Votre stream de production Docker doit consister à créer un Dockerfile approprié pour chaque image que vous souhaitez créer, puis à utiliser composer pour assembler les images à l’aide de la commande build .

    Vous pouvez spécifier le chemin d’access à vos fichiers Docker individuels à l’aide de build /path/to/dockerfiles/blah/path/to/dockerfiles/blah est l’emplacement du Dockerfile de blah.

    Dockerfile

    entrer la description de l'image ici

    Un fichier Docker est un fichier texte simple qui contient les commandes qu’un utilisateur peut appeler pour assembler une image.

    Exemple, Dockerfile

     FROM ubuntu:latest MAINTAINER john doe RUN apt-get update RUN apt-get install -y python python-pip wget RUN pip install Flask ADD hello.py /home/hello.py WORKDIR /home 

    Docker Compose

    entrer la description de l'image ici

    Docker Compose

    • est un outil pour définir et exécuter des applications Docker multi-conteneurs.

    • Définissez les services qui composent votre application dans docker-compose.yml pour qu’ils puissent être exécutés ensemble dans un environnement isolé.

    • faire fonctionner une application en une seule commande en exécutant docker-compose up

    Exemple, docker-compose.yml

     version: '3' services: web: build: . ports: - "5000:5000" volumes: - .:/code - logvolume01:/var/log links: - redis redis: image: redis volumes: logvolume01: {} 

    Le fichier Compose décrit le conteneur dans son état en cours d’exécution , laissant les détails sur la manière de créer le conteneur sur Dockerfiles . http://deninet.com/blog/1587/docker-scratch-part-4-compose-and-volumes

    Lorsque vous définissez votre application avec Compose in development, vous pouvez utiliser cette définition pour exécuter votre application dans différents environnements, tels que les CI, le stockage intermédiaire et la production . https://docs.docker.com/compose/production/

    Il semble également que Compose soit considéré comme étant sûr de la production à partir de la version 1.11 , car https://docs.docker.com/v1.11/compose/production/ n’a plus d’avertissement de ne pas l’utiliser en production comme https: // docs. .docker.com / v1.10 / composer / production / do .

    Dans mon stream de travail, j’ajoute un fichier Dockerfile pour chaque partie de mon système et le configure pour que chaque partie puisse s’exécuter individuellement. Ensuite, j’ajoute un docker-compose.yml pour les rassembler et les lier.

    Le plus grand avantage (à mon avis): en liant les conteneurs , vous pouvez définir un nom et envoyer un ping à vos conteneurs avec ce nom. Par conséquent, votre firebase database peut être accessible avec le nom db et non plus par son adresse IP.

    Les dockerfiles doivent par exemple construire une image à partir d’un ubuntu, vous pouvez append mysql appelé “mySQL” sur une image et mywordpress sur une deuxième image appelée “mywordpress”.

    composer des fichiers YML, c’est prendre ces images et les parsingr de manière cohérente. Par exemple, si vous avez dans votre fichier docker-compose.yml un appel de service “db”: services: db: image: mySQL — image que vous avez créée.

    et un service appelé worpress tel que:

    wordpress: image: mywordpress

    puis dans le conteneur mywordpress, vous pouvez utiliser “db” pour vous connecter à votre conteneur mySQL. cette magie est possible car votre hôte docker crée un pont netowrk (réseau excessif).