2016-07-27 93 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