Docker Compose与Dockerfile – 哪个更好?
我一直在阅读和学习Docker ,并试图正确select使用Django的设置。 到目前为止,要么是:
Docker Compose或Dockerfile
我明白Dockerfiles
用在Docker Compose
,但我不确定是否将所有内容放在一个大的Dockerfile中,并将多个FROM
命令放在不同的图像上?
我想要使用几个不同的图像,其中包括:
uwsgi nginx postgres redis rabbitmq celery with cron
请告知使用Docker设置这种types的环境的最佳实践。
如果有帮助,我在Mac上,所以使用boot2docker 。
我有一些问题:
- Docker Compose与Python3不兼容
- 我想集装箱我的项目,所以如果一个大的Dockerfile是不理想的,那么我觉得我需要分解使用Docker Compose
- 我可以让项目Py2&Py3兼容,所以我倾向于Django-compose
答案是不是。
如果将build命令添加到项目的docker-compose.yml
Docker Compose(以下简称compose)将使用docker-compose.yml
。
你的Docker工作stream程应该是为你想要创build的每个镜像构build一个合适的Dockerfile
,然后使用build
命令来Dockerfile
镜像。
你可以使用build /path/to/dockerfiles/blah
来指定你的个人Dockerfiles的build /path/to/dockerfiles/blah
其中/path/to/dockerfiles/blah
是blah的Dockerfile
所在的Dockerfile
。
Dockerfile
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
Docker撰写
Docker撰写
-
是定义和运行多容器Docker应用程序的工具。
-
在
docker-compose.yml
定义组成应用程序的服务,以便它们可以在隔离的环境中一起运行。 -
只需运行
docker-compose up
让一个应用程序运行在一个命令中
例如, docker-compose.yml
version: '3' services: web: build: . ports: - "5000:5000" volumes: - .:/code - logvolume01:/var/log links: - redis redis: image: redis volumes: logvolume01: {}
Compose文件描述了容器的运行状态 ,留下了如何构build容器到Dockerfiles的细节 。 http://deninet.com/blog/1587/docker-scratch-part-4-compose-and-volumes
在开发中使用Compose定义应用程序时 , 可以使用此定义在不同的环境(如CI,分段和生产)中 运行应用程序 。 https://docs.docker.com/compose/production/
也似乎Compose 从1.11开始就被认为是安全的 ,因为https://docs.docker.com/v1.11/compose/production/不再有像https::// docs一样在生产中使用它的警告.docker.com / v1.10 / compose / production / does。
在我的工作stream程中,我为系统的每个部分添加一个Dockerfile,并对其进行configuration,使得每个部分都可以单独运行。 然后我添加一个docker-compose.yml将它们连接在一起并链接它们。
最大的优势(在我看来):当连接容器时 ,你可以定义一个名称并用这个名字ping你的容器。 因此,您的数据库可能可以通过名称db
访问,不再通过IP访问。