Докер сочинять и файла Docker - что лучше?


Я читал и узнал о настройки, и я пытаюсь правильно выбрать настройку Django для использования. Пока есть либо:

Docker Compose или Dockerfile

Я понимаю, что Dockerfiles в Docker Compose, но я не уверен, что это хорошая практика, чтобы положить все в один большой Dockerfile с несколькими FROM команды для разных образов?

Я хочу использовать несколько разных изображения, которые включают в себя:

uwsgi
nginx
postgres
redis
rabbitmq
celery with cron

пожалуйста, сообщите о том, что является лучшей практикой в настройке этого типа среды с помощью настройки.

если это поможет, я нахожусь на Mac, поэтому использую boot2docker.

некоторые вопросы у меня было:

  1. Docker Compose не совместим с Python3
  2. я хочу контейнеризировать свой проект, так что если один большой Dockerfile не идеально, тогда я чувствую, что мне нужно будет разбить его с помощью Docker Compose
  3. я в порядке, чтобы сделать проект Py2 & Py3 совместимым, поэтому я склоняюсь к django-compose
6 179

6 ответов:

ответ ни тот, ни другой.

Docker Compose (здесь называется compose) будет использовать Dockerfile, если вы добавите команду build вdocker-compose.yml.

ваш рабочий процесс Докера должен быть построен подходящий Dockerfile для каждого изображения, которое вы хотите создать, затем используйте compose для сборки изображений с помощью .

вы можете указать путь к вашим отдельным Dockerfiles с помощью build /path/to/dockerfiles/blah здесь /path/to/dockerfiles/blah это где бла Dockerfile жизни.

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

Docker Compose

enter image description here

Docker Compose

  • это инструмент для определения и запуска приложений докеров с несколькими контейнерами.

  • определите службы, которые составляют ваше приложение в 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 описание в контейнер в рабочем состоянии, оставляя детали о том, как построить контейнер до 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/ делает.

в моем рабочем процессе я добавляю Dockerfile для каждой части моей системы и настраиваю его, чтобы каждая часть могла работать индивидуально. Затем я добавляю docker-compose.yml, чтобы объединить их и связать их.

большое преимущество (на мой взгляд): когда связывание контейнеры, вы можете определить имя и пинговать ваши контейнеры с этим именем. Поэтому ваша база данных может быть доступна с именем db и больше не по своему IP.

dockerfiles должны построить образ, например, из Голой кости ubuntu, вы можете добавить mysql под названием "mySQL" на одном изображении и mywordpress на втором изображении под названием "mywordpress".

составьте файлы YML, чтобы взять эти изображения и запустить их слаженно. например, если у вас есть в вашем docker-compose.yml-файл вызова службы " db" : сервисы: децибел: изображение: mySQL - - - изображение, которое вы построили.

и сервис под названием worpress такие как:

wordpress: изображения: mywordpress

затем внутри контейнера mywordpress вы можете использовать" db " для подключения к контейнеру mySQL. это волшебство возможно, потому что ваш хост docker создает мост netowrk (сеть чрезмерно).

"лучше" - понятие относительное. Все зависит от того, какие у вас потребности. Docker compose предназначен для организации нескольких контейнеров. Если эти образы уже существуют в реестре docker, то лучше перечислить их в файле compose. Если эти образы или некоторые другие образы должны быть построены из файлов на вашем компьютере, то вы можете описать процессы построения этих образов в файле Dockerfile.

Я понимаю, что Dockerfiles используются в Docker Compose, но я не уверен если это хорошая практика, чтобы положить все в один большой Dockerfile с несколькими командами FROM для разных изображений?

использование нескольких из одного файла dockerfile не очень хорошая идея, потому что есть предложение удалить эту функцию. 13026

если, например, вы хотите докеризировать приложение, которое использует базу данных и имеет файлы приложений на вашем компьютере, вы можете использовать файл compose вместе с файлом dockerfile в качестве следует

docker-compose.в формате YML

mysql:
  image: mysql:5.7
  volumes:
    - ./db-data:/var/lib/mysql
  environment:
    - "MYSQL_ROOT_PASSWORD=secret"
    - "MYSQL_DATABASE=homestead"
    - "MYSQL_USER=homestead"
  ports:
    - "3307:3306"
app:
  build:
    context: ./path/to/Dockerfile
    dockerfile: Dockerfile
  volumes:
    - ./:/app
  working_dir: /app

Dockerfile

FROM php:7.1-fpm 
RUN apt-get update && apt-get install -y libmcrypt-dev \
  mysql-client libmagickwand-dev --no-install-recommends \
  && pecl install imagick \
  && docker-php-ext-enable imagick \
  && docker-php-ext-install pdo_mysql \
  && curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer