compose and docker-compose docker-machine

docker compose - and - ¿Cuál es la diferencia entre docker-machine y docker-compose?



install docker compose windows (1)

Docker es la herramienta de línea de comandos que utiliza la containerization para administrar múltiples imágenes y contenedores y volúmenes y, por lo tanto, un contenedor es básicamente una máquina virtual liviana. Consulte https://docs.docker.com/ para obtener una amplia documentación.

Hasta hace poco, Docker no se ejecutaba en sistemas operativos Mac o Windows nativos, por lo que se creó otra herramienta, Docker-Machine , que crea una máquina virtual (utilizando otra herramienta, por ejemplo, Oracle VirtualBox ), ejecuta Docker en esa VM y ayuda a coordinar El sistema operativo host y la máquina virtual Docker.

Dado que Docker no se está ejecutando en su sistema operativo host real, la máquina acopladora debe tratar con las direcciones IP, los puertos y los volúmenes, y demás. Y su configuración se guarda en variables de entorno, lo que significa que tiene que ejecutar comandos como este cada vez que abre un nuevo shell:

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

Docker-Compose es esencialmente una interfaz de scripts de nivel superior sobre Docker, lo que facilita (aparentemente) administrar el lanzamiento de varios contenedores simultáneamente. Su archivo de configuración ( docker-compose.yml ) es confuso ya que algunas de sus configuraciones se transfieren al proceso de la ventana acoplable de nivel inferior, y algunas se usan solo en el nivel superior.

Estoy de acuerdo en que es un desastre; Mi consejo es comenzar con un único Dockerfile y ponerlo en funcionamiento con docker-machine o con el nuevo beta nativo de Mac / Windows Docker , e ignorar docker-compose hasta que se sienta más cómodo con las herramientas de nivel inferior.

Creo que no lo entiendo. Primero, creé docker-machine:

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

Luego escribí Dockerfile y 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

Finalmente, construí y comencé la imagen:

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

Revisé la ip de mi máquina virtual

$ docker-machine ip dev

y abrió con éxito el sitio en mi navegador. Pero cuando hice algunos cambios en mi código, no pasó nada. Así que me conecté a la máquina "dev":

$ docker-machine ssh dev

¡Y no encontré mi código! Así que me conecté a la imagen "web" de la ventana acoplable:

$ docker exec -it project_web_1 bash

Y había un código, pero sin cambios.

¿Para qué sirve la máquina acopladora? ¿Cuál es el sentido? ¿Por qué docker no sincroniza archivos después de los cambios? Parece que docker + docker-machine + docker-compose son un problema para el desarrollo local :-)

Gracias.