Quelle est la différence entre docker-machine et docker-composer?

je pense que je ne comprends pas. Tout d'abord, j'ai créé docker-machine:

$ docker-machine create -d virtualbox dev
$ eval $(docker-machine env dev)

puis j'ai écrit Dockerfile et docker-composer.yml:

FROM python:2.7
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
RUN pip install -r requirements.txt
ADD . /code/


version: '2'
services:
  db:
    image: postgres
  web:
    build: .
    restart: always
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    links:
      - db

enfin, j'ai construit et démarré l'image:

$ docker-compose build --no-cache
$ docker-compose start

j'ai vérifié l'ip de ma machine virtuelle

$ docker-machine ip dev

et ouvert avec succès le site dans mon navigateur. Mais quand j'ai fait quelques changements dans mon code - rien ne s'est passé. Donc je me suis connecté à la machine" dev":

$ docker-machine ssh dev

et je n'ai pas trouvé mon code! Si Je me suis connecté au panneau "web" de l'image:

$ docker exec -it project_web_1 bash

et il y avait un code, mais inchangée.

à quoi sert la docker-machine? Quel est le sens? Pourquoi docker ne synchronise pas les fichiers après les changements? On dirait que docker + Docker-machine + docker-composer est douloureux en a...s pour le développement local: -)--7-->

Merci.

21
demandé sur User 2016-07-27 23:55:57

1 réponses

Panneau est l'outil de ligne de commande qui utilise la conteneurisation pour gérer plusieurs images et conteneurs et volumes et ainsi de suite -- un conteneur est essentiellement une machine virtuelle légère. Voir https://docs.docker.com/ pour une documentation complète.

Jusqu'à récemment Docker ne fonctionnait pas sur Mac natif ou Windows OS, donc un autre outil a été créé, Menu Fixe-Machine, qui crée une machine virtuelle (en utilisant encore un autre outil, par exemple Oracle VirtualBox), exécute Docker sur cette VM, et aide à coordonner entre L'OS hôte et la VM Docker.

Depuis le menu fixe n'est pas en cours d'exécution sur votre système d'exploitation hôte, menu fixe-machine doit traiter des adresses IP, des ports et des volumes, etc. Et ses paramètres sont sauvegardés dans les variables d'environnement, ce qui signifie que vous devez exécuter des commandes comme celle-ci chaque fois que vous ouvrez un nouveau shell:

eval $(docker-machine env default)
docker-machine ip default

Menu Fixe-Ecrire est essentiellement un interface de script de niveau supérieur en plus du Docker lui-même, ce qui rend plus facile (ostensiblement) de gérer le lancement de plusieurs conteneurs simultanément. Son fichier de configuration (docker-compose.yml) est déroutant car certains de ses paramètres sont transmis au niveau inférieur du processus docker, et certains ne sont utilisés qu'au niveau supérieur.

je suis d'accord que c'est un gâchis; mon conseil est de commencer avec un seul Dockerfile et faire fonctionner soit avec docker-machine ou nouvelle version bêta natif de Mac/Windows Docker, et d'ignorer docker-compose jusqu'à ce que vous vous sentiez plus à l'aise avec les outils de niveau inférieur.

45
répondu AlexChaffee 2016-07-28 13:18:21