docker-machine和docker-compose有什么区别?

时间:2016-07-27 20:55:57

标签: docker-compose docker-machine

我想我不明白。首先,我创建了docker-machine:

$ 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“web”图片:

$ docker exec -it project_web_1 bash

并且有一个代码,但没有改变。

什么是泊坞机?有什么意义?为什么docker在更改后不同步文件?看起来像docker + docker-machine + docker-compose对于本地开发来说是痛苦的: - )

感谢。

1 个答案:

答案 0 :(得分:50)

Docker 是一个命令行工具,它使用containerization来管理多个图像和容器和卷等 - 容器基本上是一个轻量级的虚拟机。有关详尽的文档,请参阅https://docs.docker.com/

直到最近Docker还没有在原生Mac或Windows操作系统上运行,因此创建了另一个工具 Docker-Machine ,它创建了一个虚拟机(使用另一个工具,例如 Oracle VirtualBox ),在该VM上运行Docker,并帮助在主机操作系统和Docker VM之间进行协调。

由于Docker未在您的实际主机操作系统上运行, docker-machine 需要处理IP地址,端口和卷等。它的设置保存在环境变量中,这意味着每次打开新shell时都必须运行这样的命令:

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

Docker-Compose 本质上是Docker本身之上的更高级别的脚本界面,使得(表面上)可以更轻松地管理同时启动多个容器。它的配置文件(docker-compose.yml)令人困惑,因为它的一些设置被传递到较低级别的docker进程,而有些只在较高级别使用。

我同意这是一团糟;我的建议是从单个Dockerfile开始,并使用docker-machinenew beta native Mac/Windows Docker运行它,并忽略docker-compose,直到您对较低级别的工具感到满意为止。