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.