【问题标题】:What is the difference between docker-machine and docker-compose?docker-machine 和 docker-compose 有什么区别?
【发布时间】:2016-07-27 20:55:57
【问题描述】:

我想我不明白。首先,我创建了 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

并在我的浏览器中成功打开了该网站。但是当我对我的代码进行一些更改时 - 什么也没发生。所以我登录到“开发”机器:

$ docker-machine ssh dev

我没有找到我的代码!所以我登录到 docker “web” 图像:

$ docker exec -it project_web_1 bash

还有一个代码,但没有改变。

码头机器有什么用?有什么意义?为什么docker在更改后不同步文件?看起来 docker + docker-machine + docker-compose 在本地开发中很痛苦:-)

谢谢。

【问题讨论】:

    标签: docker-compose docker-machine


    【解决方案1】:

    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,直到您对较低级别的工具感到更舒服为止。

    【讨论】:

    • 我通常在 linux 上工作,所以我放弃了 docker-machine,现在看起来好多了:-)
    • 我的评论似乎迟到了,但无论如何:我可以在 Windows 环境变量中设置 docker-machine 环境属性,以便在每次打开 shell 时都不键入它们吗?这有什么影响吗?
    • 您不能对它们进行硬编码,因为它们可能会改变。 (虚拟网络接口地址之类的东西。)在 Linux 上,我编写了一个登录脚本,执行上述 eval 以将它们设置到 shell 环境中,但我不知道如何在 Windows 中实现该魔法。
    • 如果 docker 机器是用于 OSX/Windows 的,为什么会有 linux 版本? docs.docker.com/machine/install-machine/…
    • @Alston 因为(a)为什么不呢?你可以在 Linux 上运行虚拟机,那么为什么不用 Docker-Machine 在这些虚拟机上运行 Docker? (b) 它现在具有远程配置和管理功能,因此您可以使用 Linux 作为客户端来管理远程 docker-machine 实例(或集群或群等)。
    猜你喜欢
    • 2016-10-24
    • 2016-02-16
    • 2018-10-18
    • 1970-01-01
    • 2018-05-12
    • 1970-01-01
    • 1970-01-01
    • 2021-05-24
    • 2015-04-08
    相关资源
    最近更新 更多