Я читал и изучал Docker и пытаюсь правильно выбрать настройку Django для использования. Пока что есть:
Я понимаю, что Dockerfiles
используются в Docker Compose
, но я не уверен, если это хорошая практика, чтобы поместить все в один большой Dockerfile с несколькими FROM
командами для разных изображений?
Я хочу использовать несколько разных изображений, которые включают в себя:
uwsgi
nginx
postgres
redis
rabbitmq
celery with cron
Посоветуйте, пожалуйста, как лучше настроить этот тип среды с помощью Docker .
Если это помогает, я на Mac, поэтому использую boot2docker .
Некоторые проблемы у меня были:
- Docker Compose не совместим с Python3
- Я хочу создать контейнер для своего проекта, поэтому, если один большой Dockerfile не идеален, я чувствую, что мне нужно разбить его с помощью Docker Compose.
- Я в порядке, чтобы сделать проект Py2 & Py3 совместимым, поэтому я склоняюсь к django-compose
docker
docker-compose
dockerfile
development-environment
boot2docker
Аарон Лелевье
источник
источник
Ответы:
Ответ ни один.
Docker Compose (в данном документе называемый compose) будет использовать Dockerfile, если вы добавите команду build в ваш проект
docker-compose.yml
.Ваш рабочий процесс Docker должен создавать подходящее
Dockerfile
для каждого изображения, которое вы хотите создать, а затем использовать compose для сборки изображений с помощьюbuild
команды.Вы можете указать путь к вашим отдельным файлам Docker, используя,
build /path/to/dockerfiles/blah
где/path/to/dockerfiles/blah
находится BlahDockerfile
.источник
docker-compose
в производстве или только Dev? Спасибо за вашу помощь.docker-compose.yml
использовать только общедоступное изображение (извлечение изображения из концентратора Интернета / докера), то не нужно Dockerfile для запуска командыdocker-compose up
.Dockerfile
Dockerfile - это простой текстовый файл, содержащий команды, которые пользователь может вызвать для сборки изображения.
Пример, Dockerfile
Docker Compose
Docker Compose
это инструмент для определения и запуска мультиконтейнерных приложений Docker.
Определите сервисы, из которых состоит ваше приложение,
docker-compose.yml
чтобы они могли работать вместе в изолированной среде.запустите приложение одной командой, просто запустив
docker-compose up
Пример, docker-compose.yml
источник
image: redis
но это от dockerhub? локальный каталог? и т. д. ... для такого новичка, как я, сбивает с толку понимание того, что на самом деле происходитПохоже также, что с 1.11 Compose считается безопасным для производства , так как https://docs.docker.com/v1.11/compose/production/ больше не имеет предупреждения о том, что его нельзя использовать в таких продуктах, как https: // docs. .docker.com / v1.10 / compose / production / do .
источник
docker-compose существует для того, чтобы вам приходилось писать кучу команд, которые вам бы пришлось делать с помощью docker-cli.
Docker-compose также позволяет легко запускать несколько контейнеров одновременно и автоматически соединять их вместе с какой-либо формой сетевого взаимодействия.
Цель docker-compose - функционировать как docker cli, но выполнять несколько команд намного быстрее.
Чтобы использовать docker-compose, вам нужно закодировать команды, которые вы выполняли ранее, в
docker-compose.yml
файл.Вы не просто скопируете, вставите их в файл yaml, есть специальный синтаксис.
После создания вы должны передать его в docker-compose cli, и у вас будет возможность проанализировать файл и создать все различные контейнеры с правильной конфигурацией, которую мы указали.
Таким образом, у вас будут отдельные контейнеры, скажем, например, один есть,
redis-server
а второй -node-app
и вы хотите, чтобы он был создан с использованиемDockerfile
в вашем текущем каталоге.Кроме того, после создания этого контейнера вы должны отобразить некоторый порт из контейнера на локальную машину, чтобы получить доступ ко всему, что работает внутри него.
Итак, для вашего
docker-compose.yml
файла вы бы хотели начать первую строку примерно так:version: '3'
Это говорит Docker о версии, которую
docker-compose
вы хотите использовать. После этого вы должны добавить:Пожалуйста, обратите внимание на отступ, очень важно. Кроме того, обратите внимание, что для одного сервиса я собираю изображение, но для другого сервиса я предлагаю
docker-compose
заглянуть в текущий каталог, чтобы создать образ, который будет использоваться для второго контейнера.Затем вы хотите указать все различные порты, которые вы хотите открыть в этом контейнере.
Обратите внимание на тире, тире в файле yaml - это то, как мы указываем массив. В этом примере я сопоставляю
8081
свою локальную машину с8081
контейнером следующим образом:Таким образом, первый порт - это ваша локальная машина, а другой - порт в контейнере, вы также можете различать два, чтобы избежать путаницы, например:
Разрабатывая
docker-compose.yml
подобный файл, он будет создавать эти контейнеры, по существу, в одной и той же сети, и они будут иметь свободный доступ для общения друг с другом любым удобным для них способом и обмена таким количеством информации, как они захотят.Когда два контейнера создаются с использованием,
docker-compose
нам не нужны никакие объявления портов.Теперь в моем примере нам нужно выполнить настройку кода в приложении Nodejs, которое выглядит примерно так:
Я использую этот пример выше, чтобы вы знали, что может быть какая-то конкретная конфигурация, которую вам придется сделать в дополнение к
docker-compose.yml
файлу, который может относиться к вашему проекту.Теперь, если вы когда-нибудь обнаружите, что работаете с приложением Nodejs и выполнили повтор, вы хотите убедиться, что знаете о порте по умолчанию, который использует Nodejs, поэтому я добавлю это:
Итак, Docker увидит, что приложение Node ищет
redis-server
и перенаправит это соединение в этот работающий контейнер.Все время
Dockerfile
только содержит это:Итак, если раньше вам нужно было запустить
docker run myimage
экземпляр всех контейнеров или служб внутри файла, вы можете вместо этого запустить его,docker-compose up
и вам не нужно указывать изображение, потому что Docker будет искать в текущем рабочем каталоге и искатьdocker-compose.yml
файл внутри там.Раньше
docker-compose.yml
нам приходилось иметь дело с двумя отдельными командамиdocker build .
иdocker run myimage
, но вdocker-compose
мире, если вы хотите восстановить свои изображения, вы пишетеdocker-compose up --build
. Это говорит Docker снова запускать контейнеры, но перестраивать его, чтобы получить последние изменения.Так что
docker-compose
облегчает работу с несколькими контейнерами. В следующий раз, когда вам нужно будет запустить эту группу контейнеров в фоновом режиме, вы можете сделать этоdocker-compose up -d
и остановить ихdocker-compose down
.источник
docker-compose up
хотя бы один сервис в моей ситуации? Другое слово, сравните сdocker run xxx
, какую выгоду, если я буду использоватьdocker-compose up
?docker-compose
для отдельных контейнеров6379
является портом Redis по умолчанию).В своем рабочем процессе я добавляю Dockerfile для каждой части моей системы и настраиваю его так, чтобы каждая часть могла запускаться отдельно. Затем я добавляю docker-compose.yml, чтобы собрать их вместе и связать их.
Самое большое преимущество (на мой взгляд): при связывании контейнеров вы можете определить имя и пропинговать ваши контейнеры этим именем. Поэтому ваша база данных может быть доступна с именем
db
и больше не по ее IP.источник
«лучше» относительно. Все зависит от ваших потребностей. Docker compose предназначен для организации нескольких контейнеров. Если эти образы уже существуют в реестре Docker, то лучше перечислить их в файле композиции. Если эти изображения или некоторые другие изображения должны быть собраны из файлов на вашем компьютере, вы можете описать процессы создания этих изображений в Dockerfile.
Использование нескольких FROM в одном файле Docker не очень хорошая идея, потому что есть предложение удалить эту функцию. 13026
Если, например, вы хотите докеризировать приложение, которое использует базу данных и имеет файлы приложения на вашем компьютере, вы можете использовать файл компоновки вместе с файлом докера следующим образом
докер-compose.yml
Dockerfile
источник
Dockerfile и Docker Compose - это две разные концепции в Dockerland. Когда мы говорим о Docker, первое, что приходит на ум, это оркестровка, виртуализация на уровне ОС, образы, контейнеры и т. Д. Я постараюсь объяснить каждый из них следующим образом:
Изображение: изображение - это неизменяемый общий файл, который хранится в надежном реестре Docker. Образ Docker состоит из ряда слоев, доступных только для чтения. Каждый слой представляет инструкцию, которая дается в Dockerfile изображения. Изображение содержит все необходимые двоичные файлы для запуска.
Контейнер: экземпляр изображения называется контейнером . Контейнер - это просто исполняемый двоичный файл образа, который должен запускаться операционной системой хоста. Работающее изображение - это контейнер.
Dockerfile: Dockerfile - это текстовый документ, который содержит все команды / инструкции по сборке, которые пользователь может вызвать в командной строке для сборки образа. Это будет сохранено как
Dockerfile
. (Обратите внимание на строчную букву 'f'.)Docker-Compose: Compose - это инструмент для определения и запуска многоконтейнерных приложений Docker. С Compose вы используете файл YAML для настройки сервисов вашего приложения (контейнеров). Затем с помощью одной команды вы создаете и запускаете все службы из вашей конфигурации. Файл Compose будет сохранен как
docker-compose.yml
.источник
Представьте, что вы менеджер компании-разработчика программного обеспечения и только что купили новый сервер. Просто железо.
Подумайте,
Dockerfile
как набор инструкций, которые вы скажете своему системному администратору, что устанавливать на этот новый сервер. Например:/var/www
)В отличие от
docker-compose.yml
этого, вы должны представить себе набор инструкций, которые вы скажете своему системному администратору, как сервер может взаимодействовать с остальным миром. Например,(Это не точное объяснение, но достаточно хорошее для начала.)
источник
Dockerfiles предназначены для создания образа, например, из голой Ubuntu, вы можете добавить
mysql
вызываемыйmySQL
на одном изображении, аmywordpress
на втором - вызываемомmywordpress
.Составьте файлы YAML, чтобы взять эти изображения и выполнить их связно. например, если в вашем
docker-compose.yml
файле есть сервисный вызовdb
:и сервис под названием worpress, такой как:
затем внутри контейнера mywordpress вы можете использовать его
db
для подключения к контейнеру mySQL. Это волшебство возможно, потому что ваш хост докер создает сетевой мост (сетевое наложение).источник
В мире микросервисов (имеющих общую общую кодовую базу) каждый микросервис будет иметь некоторое значение,
Dockerfile
тогда как на корневом уровне (как правило, за пределами всех микросервисов и где находится ваш родительский POM) вы определяетеdocker-compose.yml
чтобы сгруппировать все микросервисы в полноценное приложение.В вашем случае «Docker Compose» предпочтительнее «Dockerfile». Подумайте «приложение» Подумайте «Составить».
источник
Dockerfile - это файл, который содержит текстовые команды для сборки изображения.
Docker compose используется для запуска мультиконтейнерной среды.
В вашем конкретном сценарии, если у вас есть несколько служб для каждой упомянутой вами технологии (служба 1, использующая reddis, служба 2, использующая rabbit mq и т. Д.), То вы можете иметь Dockerfile для каждой из служб и общий docker-compose.yml для запуска все "Dockerfile" как контейнеры.
Если вы хотите, чтобы все они были в одном сервисе, docker-compose будет приемлемым вариантом.
источник