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