Подтвердить что ты не робот

В чем разница между докер-машиной и докер-составом?

Я думаю, что не понимаю. Во-первых, я создал докер-машину:

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

Затем я написал Dockerfile и docker-compose.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

Наконец, я создал и запустил изображение:

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

Я проверил ip своей виртуальной машины

$ docker-machine ip dev

и успешно открыл сайт в моем браузере. Но когда я внес некоторые изменения в свой код, ничего не произошло. Поэтому я вошел в систему "dev":

$ docker-machine ssh dev

и я не нашел свой код! Поэтому я зашел на изображение "веб-сайта" докера:

$ docker exec -it project_web_1 bash

и был код, но он не изменился.

Для чего нужна докер-машина? В чем смысл? Почему docker не синхронизирует файлы после изменений? Похоже, что docker + docker-machine + docker-compose - это боль в a... s для локального развития: -)

Спасибо.

4b9b3361

Ответ 1

Docker - это инструмент командной строки, который использует containerization для управления несколькими изображениями, контейнерами и томами и т.д. - контейнер в основном легкая виртуальная машина. См. https://docs.docker.com/ для подробной документации.

До недавнего времени Docker не запускался на родной Mac или ОС Windows, поэтому был создан еще один инструмент Docker-Machine, который создает виртуальную машину (используя еще один инструмент, например Oracle VirtualBox), запускает Docker на этой виртуальной машине и помогает координировать работу между ОС хоста и VM Docker.

Так как Docker не работает на вашей основной операционной системе, докер-машине необходимо иметь дело с IP-адресами и портами и томами и т.д. И его настройки сохраняются в переменных среды, а это значит, что вы должны запускать такие команды каждый раз, когда вы открываете новую оболочку:

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

Docker-Compose - это, по сути, более высокоуровневый скриптовый интерфейс поверх самого Docker, что упрощает (якобы) управление запуском нескольких контейнеров одновременно. Его конфигурационный файл (docker-compose.yml) запутан, так как некоторые его параметры передаются в процесс докеров на нижнем уровне, а некоторые используются только на более высоком уровне.

Я согласен, что это беспорядок; мой совет - начать с одного файла Docker и запустить его либо с помощью docker-machine, либо с помощью новой бета-версии Mac/Windows Docker и игнорировать docker-compose, пока вы не почувствуете себя более комфортно с инструментами нижнего уровня.