Меня все еще смущают контейнеры и образы Docker

Я знаю, что контейнеры - это форма изоляции между приложением и хостом (управляемый запущенный процесс). Я также знаю, что образы контейнеров - это в основном пакет для среды выполнения (надеюсь, я понял это правильно). Меня сбивает с толку, когда говорят, что образ Docker не сохраняет состояние. Итак, если я создам образ Docker с базой данных (например, PostgreSQL), не будут ли все данные уничтожены, когда я остановлю контейнер и перезапущу его? Зачем мне использовать базу данных в контейнере Docker?

Мне также сложно понять LXC. На другой странице вопроса я вижу:

Контейнеры LinuX (LXC) - это метод виртуализации на уровне операционной системы для запуска нескольких изолированных систем (контейнеров) Linux на одном управляющем хосте (хост LXC).

Что именно это означает? Означает ли это, что я могу иметь несколько версий Linux, работающих на одном хосте, если хост поддерживает LXC? Что еще до этого?


person u84six    schedule 17.10.2018    source источник
comment
Чтобы ответить на ваш первый вопрос, ознакомьтесь с Где хранить данные на вводной странице MySQL Docker. Короче говоря, вы записываете данные в место за пределами контейнера, доступное для Docker.   -  person Mako212    schedule 18.10.2018
comment
См. Также страницу управления данными приложения   -  person Mako212    schedule 18.10.2018
comment
Итак, когда вы используете контейнер базы данных и его необходимо масштабировать по запросу, каков процесс масштабирования среды выполнения и хранилища? Вы запускаете несколько контейнеров за балансировщиком нагрузки, а также добавляете дополнительные тома по мере необходимости? Существуют ли инструменты, специально разработанные для масштабирования контейнеров Docker db?   -  person u84six    schedule 18.10.2018
comment
Я не эксперт по Docker, но рой Docker (состоящий из реплик контейнера) автоматически балансирует нагрузку.   -  person Mako212    schedule 18.10.2018


Ответы (1)


LXC и Docker, оба совершенно разные. Но мы говорим, что оба держатели контейнеров.

Есть два типа контейнеров:

1. Контейнеры приложений. Их главный девиз - предоставлять зависимости приложений. Это контейнеры Docker (облегченные контейнеры). Они запускаются на вашем хосте как процесс и выполняют все, что вы хотите. Они буквально не нуждаются в образе ОС / загрузке. Они приходят и уходят за считанные секунды. Вы не можете запускать несколько процессов / служб внутри контейнера докеров. При желании вы можете запускать несколько процессов внутри контейнера докеров, но это трудоемко. Здесь будут использоваться общие ресурсы (ЦП, диск, память, оперативная память).

2. Системные контейнеры: Это толстые контейнеры, значит, они тяжелые, им нужны образы ОС для запуска, в то же время они не такие тяжелые, как виртуальные машины, они очень похожи на виртуальные машины, но немного отличаются по архитектуре.

Здесь, скажем, Ubuntu в качестве хост-машины, если у вас установлен и настроен LXC на вашем хосте ubuntu, вы можете запустить контейнер Centos, Ubuntu (с версией Differnet), RHEL, Fedora и любой вариант Linux поверх. хоста Ubuntu. Вы также можете запускать несколько процессов внутри контейнера LXC. Здесь также будет делаться обмен ресурсами.

Итак, если у вас есть огромное приложение, работающее в одном контейнере LXC, оно требует больше ресурсов, одновременно если у вас есть другое приложение, работающее внутри другого контейнера LXC, которое требует меньше ресурсов. Контейнер с меньшими требованиями будет совместно использовать ресурсы с контейнером с большей потребностью в ресурсах.

Отвечая на ваш вопрос:

Итак, если я создам образ Docker с базой данных (например, PostgreSQL), не будут ли удалены все данные, когда я остановлю контейнер и перезапущу его?

Вы не будете создавать образ докера базы данных с некоторыми данными (это не рекомендуется). Вы запускаете / создаете контейнер из образа и присоединяете / монтируете к нему данные.

Итак, когда вы останавливаете / перезапускаете контейнер, данные никогда не будут потеряны, если вы прикрепите эти данные к тому, поскольку этот том находится где-то, кроме контейнера докеров (может быть сервер NFS или сам хост).

Означает ли это, что на одном хосте может работать несколько версий Linux, если хост поддерживает LXC? Что еще к этому нужно?

Да, ты можешь это сделать. На нашем производстве используются контейнеры LXC.

person RajNikhil Marpu    schedule 23.07.2019