118

我一直在阅读和学习Docker,并试图正确选择使用Django设置。到目前为止,有两种情况:Docker Compose与Dockerfile - 哪个更好?

Docker ComposeDockerfile

据我所知,DockerfilesDocker Compose使用,但我不知道这是否是很好的做法,把一切都放在一个大Dockerfile多FROM命令的不同图片?

我想用几个不同的图像,包括:

uwsgi 
nginx 
postgres 
redis 
rabbitmq 
celery with cron 

请告知什么是在建立这种类型的使用泊坞窗环境的最佳实践。

如果有帮助,我在Mac上,所以使用boot2docker

若干问题我有:

  1. 泊坞撰写不符合Python3兼容
  2. 我想containerize我的项目,因此,如果一个大Dockerfile 不理想的话,我觉得我会需要打破它使用泊坞撰写
  3. 我确定,使该项目的Py2 & PY3兼容,所以我向倾斜Django的组成
+1

此事将得到更好的表述为“如果我跑我的应用程序作为单个还是多个容器?“看起来这取决于应该考虑缩放和关注问题(每个服务一个容器)的问题。这些可能有所帮助:http://stackoverflow.com/questions/30534939/should-i-use-separate-docker-containers-for-my-web-app/30535869#30535869和https://www.quora.com/ What-is-the-the-having-having-multiple-Docker-containers-on-a-server-as-opposite-to-just-running-the-one-application-on-the-server?srid = ttRm –

回答

79

ŧ他的回答既不是。

如果将build命令添加到项目的docker-compose.yml中,Docker Compose(以下简称compose)将使用Dockerfile。

您的Docker工作流程应该为您想要创建的每个图像构建一个合适的Dockerfile,然后使用撰写来使用build命令组装图像。

您可以使用build /path/to/dockerfiles/blah指定单个Dockerfiles的路径,其中/path/to/dockerfiles/blah是blah的Dockerfile所在的路径。

+2

你在生产中使用'docker-compose'还是只使用dev?谢谢你的帮助。 –

+8

这取决于你对风险的偏好,我将它用于生产,但是我的预算再次很少到不存在。 – booyaa

+3

@booyaa请你详细说明一下吗? –

48

撰写文件描述的 容器运行状态,,留下了如何构建的 容器细节Dockerfileshttp://deninet.com/blog/1587/docker-scratch-part-4-compose-and-volumes

当您在开发与撰写您的应用定义您可以使用此 定义在不同的环境,如 CI,分期和生产运行应用程序。 https://docs.docker.com/compose/production/

它也似乎撰写被认为是生产安全为1.11,因为https://docs.docker.com/v1.11/compose/production/不再有警告不要将其用于生产像https://docs.docker.com/v1.10/compose/production/一样。

+0

感谢您提出问题。你能否在1.11处增加一些固定的生产安全? –

17

在我的工作流程中,我为系统的每个部分添加一个Dockerfile,并对其进行配置,使每个部分都可以单独运行。然后我添加一个docker-compose.yml将它们放在一起并链接它们。

最大的好处(在我看来):当linking the containers,你可以定义一个名称和ping你的容器与这个名字。因此,您的数据库可能会以名称db访问,而不再是其IP。

111

Dockerfile

enter image description here

甲Dockerfile是包含用户可以调用来组装图像的命令的简单文本文件。

实施例,Dockerfile

FROM ubuntu:latest 
MAINTAINER john doe 

RUN apt-get update 
RUN apt-get install -y python python-pip wget 
RUN pip install Flask 

ADD hello.py /home/hello.py 

WORKDIR /home 

泊坞撰写

enter image description here

泊坞撰写

  • 是定义和运行多容器Docker应用程序的工具。

  • docker-compose.yml中定义组成您的应用的服务,以便它们可以在隔离的环境中一起运行。

  • 得到一个应用程序运行一个命令docker-compose up

例如在一个命令运行,搬运工,compose.yml

version: '3' 
services: 
    web: 
    build: . 
    ports: 
    - "5000:5000" 
    volumes: 
    - .:/code 
    - logvolume01:/var/log 
    links: 
    - redis 
    redis: 
    image: redis 
volumes: 
    logvolume01: {} 
+9

@sg答案是这个问题是基于对Docker与Docker Compose缺乏理解而形成的。简单地解释两者如何相互作用可能是我能想到的最佳答案。 – mpowered