Докер сочинять и файла Docker - что лучше?
Я читал и узнал о настройки, и я пытаюсь правильно выбрать настройку Django для использования. Пока есть либо:
Я понимаю, что Dockerfiles
в Docker Compose
, но я не уверен, что это хорошая практика, чтобы положить все в один большой Dockerfile с несколькими FROM
команды для разных образов?
Я хочу использовать несколько разных изображения, которые включают в себя:
uwsgi
nginx
postgres
redis
rabbitmq
celery with cron
пожалуйста, сообщите о том, что является лучшей практикой в настройке этого типа среды с помощью настройки.
если это поможет, я нахожусь на Mac, поэтому использую boot2docker.
некоторые вопросы у меня было:
- Docker Compose не совместим с Python3
- я хочу контейнеризировать свой проект, так что если один большой Dockerfile не идеально, тогда я чувствую, что мне нужно будет разбить его с помощью Docker Compose
- я в порядке, чтобы сделать проект Py2 & Py3 совместимым, поэтому я склоняюсь к django-compose
6 ответов:
ответ ни тот, ни другой.
Docker Compose (здесь называется compose) будет использовать Dockerfile, если вы добавите команду build в
docker-compose.yml
.ваш рабочий процесс Докера должен быть построен подходящий
Dockerfile
для каждого изображения, которое вы хотите создать, затем используйте compose для сборки изображений с помощью .вы можете указать путь к вашим отдельным Dockerfiles с помощью
build /path/to/dockerfiles/blah
здесь/path/to/dockerfiles/blah
это где бла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 Compose
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