Docker с нуля для чайника
Изучаю Docker и не много разобрался могу создать контейнер, свой image и так же удалять их... но полного понимания нет. С помощью docker хотел запустить несколько сайтов с разными версиями php
Помогите ответить на мои вопросы:
При создании контейнеров нужно каждому контейнеру задавать свой порт? Для примера: Создаю три контейнера
docker run -d -p 87:80 site:v1
docker run -d -p 88:80 site:v2
docker run -d -p 89:80 site:v3
Или же для каждого контейнера можно не указывать порт
docker run -d site:v1
docker run -d site:v2
docker run -d site:v3
Если нужно указывать порты то как получается для 80 и 3306 портов надо будет указывать каждому контейнеру нужно будет указывать два своих порта, а если три порта используется то соответственно каждому три порта?
Хочу для всех своих сайтов использовать свои NS записи вопрос как правильно поднять DNS в docker? Его нужно поднимать в каждом контейнере так же как и apache?
Подскажите пожалуйста как можно задать размеры дискового пространства к примеру для сайта хочу выделить место в 5Гб и не хочу что бы вышло за пределы этих размеров.
Подскажите пожалуйста для чего нужен docker-compose? Правильно ли я понимаю что с его помощью собираются разные image для контейнера?
Вопросы возможно для Вас глупые, но в docker я новичок и разбираюсь с ним.
Всё крутится у меня на ОС Ubuntu 22.04
Ответы (1 шт):
Я и сам начинающий докерист, но попробую ответить.
- При создании контейнеров нужно каждому контейнеру задавать свой порт?
А как вы иначе будете обращаться к php на этих контейнерах с вашей хост-машины - по одному и тому же порту? Каждый из них должен быть виден на разных портах хост машины, чтобы вы могли к ним раздельно обращаться. Так что да, нужно будет сделать маппинг 80 порта каждого из контейнеров на разные порты хост машины, как у вас в коде и сделано.
Если нужно указывать порты то как получается для 80 и 3306 портов надо будет указывать каждому контейнеру нужно будет указывать два своих порта, а если три порта используется то соответственно каждому три порта?
Да, именно так. В параметрах вызова докера можно указать сколько угодно параметров -p с маппингом портов, например для двух маппингов:
docker run -d -p 87:80 -p 3306:3306 site:v1
- Хочу для всех своих сайтов использовать свои NS записи вопрос как правильно поднять DNS в docker? Его нужно поднимать в каждом контейнере так же как и apache?
DNS сервер не нужно поднимать в каждом контейнере. А если у вас есть доступ к какому-то готовому DNS серверу, то ни в одном контейнере не нужно поднимать, можете на том доступном вам DNS сервере всё прописать. В общем, достаточно одного DNS сервера, на котором вы пропишете все нужные записи и пропишете везде где нужно обращения к этому DNS серверу.
Apache поднимают на каждом сервере только потому, что PHP с ним сильно интегрирован и его скорее всего нельзя установить отдельно от апача. В теории можно было бы иметь один веб-сервер, который бы обслуживал всё, что вам нужно, но сам веб-сервер настолько небольшой и настолько интегрированный с конкретным движком (например, PHP), что проще и удобнее поднимать в каждом контейнере свой веб-сайт.
А вот с DNS всё по-другому и нет нужды делать в каждом контейнере свой DNS сервер. Хотя в теории вы могли бы сделать отдельные DNS сервера и объединить их потом в общую иерархию, но обычно так никто не делает, достаточно одного DNS сервера на организацию (плюс его копия/резерв, если сетка серьёзная).
- Подскажите пожалуйста как можно задать размеры дискового пространства к примеру для сайта хочу выделить место в 5Гб и не хочу что бы вышло за пределы этих размеров.
--storage-opt size=5G
Сейчас в докер такая опция добавлена, но это работает вроде бы не на любой дисковой системе.
- Подскажите пожалуйста для чего нужен docker-compose? Правильно ли я понимаю что с его помощью собираются разные image для контейнера?
Он позволяет согласованно запускать несколько контейнеров. Не всё можно сделать в рамках одного контейнера. Например, в одном контейнере у вас БД, в другом веб-сайт, в третьем message queue какая-нибудь. И вы не хотите их собирать в один контейнер, хотите иметь возможность администрировать и перезапускать их по отдельности. А может и масштабировать - добавлять в конфигурацию дополнительные сервера БД, например, или потом захотите добавить ещё какой-то сервис, не останавливая остальные т.п. Докер-композ позволяет согласованно настроить и запустить контейнеры в нужном вам сочетании и в нужном порядке. Буквально жмёте одну кнопку - и у вас запустились все нужные контейнеры. То есть это следующий уровень абстракции сверху над отдельными контейнерами.