docker-machine 和 docker-compose 有什么区别?
What is the difference between docker-machine and docker-compose?
我想我不明白。首先,我创建了 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 + docker-machine + docker-compose 是本地开发的痛点:-)
谢谢。
Docker 是使用 containerization to manage multiple images and containers and volumes and such -- a container is basically a lightweight virtual machine. See https://docs.docker.com/ 获取大量文档的命令行工具。
直到最近 Docker 才在原生 Mac 或 Windows OS 上 运行,因此创建了另一个工具, Docker-Machine,它创建一个虚拟机(使用另一个工具,例如 Oracle VirtualBox),运行s Docker 在该 VM 上,并帮助协调主机 OS 和 Docker VM。
因为 Docker 不是 运行ning 在您的实际主机 OS 上,docker-machine 需要处理带有 IP 地址、端口和卷等。并且它的设置保存在环境变量中,这意味着你每次打开新的 shell:
时都必须 运行 这样的命令
eval $(docker-machine env default)
docker-machine ip default
Docker-Compose 本质上是 Docker 本身之上的更高级别的脚本接口,使它更容易(表面上)管理启动多个容器同时。它的配置文件 (docker-compose.yml
) 令人困惑,因为它的一些设置被传递到较低级别的 docker 进程,而一些设置仅在较高级别使用。
我同意这是一团糟;我的建议是从单个 Docker 文件开始,然后使用 docker-machine
或 new beta native Mac/Windows Docker 获取它 运行,然后忽略 docker-compose
直到你觉得更多对较低级别的工具感到满意。
我想我不明白。首先,我创建了 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 + docker-machine + docker-compose 是本地开发的痛点:-)
谢谢。
Docker 是使用 containerization to manage multiple images and containers and volumes and such -- a container is basically a lightweight virtual machine. See https://docs.docker.com/ 获取大量文档的命令行工具。
直到最近 Docker 才在原生 Mac 或 Windows OS 上 运行,因此创建了另一个工具, Docker-Machine,它创建一个虚拟机(使用另一个工具,例如 Oracle VirtualBox),运行s Docker 在该 VM 上,并帮助协调主机 OS 和 Docker VM。
因为 Docker 不是 运行ning 在您的实际主机 OS 上,docker-machine 需要处理带有 IP 地址、端口和卷等。并且它的设置保存在环境变量中,这意味着你每次打开新的 shell:
时都必须 运行 这样的命令eval $(docker-machine env default)
docker-machine ip default
Docker-Compose 本质上是 Docker 本身之上的更高级别的脚本接口,使它更容易(表面上)管理启动多个容器同时。它的配置文件 (docker-compose.yml
) 令人困惑,因为它的一些设置被传递到较低级别的 docker 进程,而一些设置仅在较高级别使用。
我同意这是一团糟;我的建议是从单个 Docker 文件开始,然后使用 docker-machine
或 new beta native Mac/Windows Docker 获取它 运行,然后忽略 docker-compose
直到你觉得更多对较低级别的工具感到满意。