2016-07-27 105 views
14

我想我不明白。首先,我创建了泊坞窗机:docker-machine和docker-compose有什么区别?

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

然后我写了Dockerfile和码头工人,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 exec -it project_web_1 bash 

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

什么是码头机?什么感觉?为什么docker在更改后不会同步文件?它看起来像码头+码头机+码头构成痛苦在本地发展的一个:...)

谢谢。

回答

37

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

直到最近泊坞窗未对原生Mac或Windows操作系统上运行,所以其他工具创建,多克尔 - 机,它创建了一个虚拟机(使用另一个工具,如甲骨文VirtualBox的),运行多克在该虚拟机上,并帮助协调主机操作系统和Docker虚拟机。

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

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

多克尔 - 撰写本质上是泊坞窗顶部的更高级别的脚本接口本身,使其更容易(表面上)管理同时启动几个容器。它的配置文件(docker-compose.yml)令人困惑,因为它的一些设置传递给了低级docker进程,有些仅用于较高级别。

我同意这是一团糟;我的建议是从一个Dockerfile开始,让它运行于docker-machinenew beta native Mac/Windows Docker,并忽略docker-compose,直到您对低级工具感觉更舒适。

+0

我通常在linux上运行,所以我放弃了docker-machine,现在看起来好多了:-) – User

+0

我的评论似乎很晚,但无论如何:我可以在Windows Env变量中设置docker-machine env属性来不输入他们每次打开一个shell?这有什么影响吗? – Dedyshka

+0

你不能硬编码它们,因为它们可能会改变。 (虚拟网络接口地址,就是这样的事情。)在Linux上,我编写了一个登录脚本,将上面的'eval'设置为shell环境,但我不知道如何在Windows中发挥这种魔力。 – AlexChaffee