Прочитал несколько статей, посмотрел видео и хочу разобраться правильно ли я понял.
Сейчас использую виртуальные машины для разработки, ставлю туда веб сервер, базу данных итд
1) Правильно понимаю что докер позволит ускорить процесс начальной настройки, я просто скачиваю нужный контейнер например с postgres и у меня сразу будет ип адрес сервера и я могу подключаться и создавать БД, тоже самое и веб сервер с php например ?
2) Можно будет купив на хостинге linux сервер, быстро переносить туда локальные контейнеры докера, которые при разработке крутились у меня на локальной машине, сейчас для этого нужно полностью с нуля настраивать linux, ставить туда все приложения, с докером я ставлю только докер, а сам веб сервер и база данных будет легко и быстро переноситься с локального компа на удаленный сервер ?
Что значит "преимущества"? Сравнивать докер с виртуалками это как сравнивать лыжи с автомобилем. Да, и то и другое позвляет быстрее передвигаться, но это в принципе несравнимые вещи, предназначенные для разных задач с разной целью.
Виртуалки делают для долговременного существования, это именно виртуальные сервера. В то же время docker - это инструмент и сопутствующий инструментарий для запуска приложений. Это просто разные вещи для разных целей.
В зависимости от того, что требуется, может быть уместно использование или виртуалок, или контейнеров. Причём контейнеры можно запускать на виртуалках, то есть они друг другу никак не противоречат.
Основное, что дает докер - это изоляцию частей вашей системы друг от друга. За счет этого гораздо проще всё настраивать.
- БД настраивается в отдельном докер-контейнере. В большинстве случаев вы используете стандартный образ и подаете ему только настройки.
- nginx настраивается в отдельном контейнере вместе с certbot'ом, который будет обновлять вам сертификат ssl.
- бэкенд поднимаетя в отдельном контейнере на стандартном порту (и порт не будет конфликтовать с другими бэкендами в других контейнерах на том же порту.
- другие какие-то бэкенды и админки будут рядом сидеть в отдельны контейнерах и не будут конфликтовать друг с другом версиями библиотек. интерпретаторов и чего угодно
- компиляция и сборка тоже делаются в контейнере, который не запускается в прод, но обеспечивает иоляцию этого процесса так, что другие разработчики легко приступят к работе без долгой и уникальной настройки своего рабочего места.
Весь набор нужных контейнеров для проекта конфигурируется docker-compose файлом и в большинстве случаев при правильной настойке чтобы поднять дев-стенд или продакшн вам достаточно будет склонировать репу на комп и скомандывать docker-compose up.
Про слои и переиспольование почитайте в документации к докеру. Докер-образы наследуются накладывая свои изменения слоями. Это экономит место на диске и упрощает всю систему минимизируя число возможных состояний.
Вся файловая система контейнера не примонтированная извне будет стёрта и забыта при перезапуске контейнера. Так можно быть уверенным, что ваш бэкенд не оставляет лишних неучтенных побочных эффектив. Это упрошает отладку и поиск проблем.
А для веб разработки, когда я все делаю один докер тоже имеет смысл ?
И по экономии места, в докере задаются какие то ограничения на максимальный размер занимаемого места на диске или все ограничено физическим диском ?
Основное преимущество докера - это не про "быстро переносить" (потому что столь же легко и быстро можно мигрировать между серверами и виртуалки), а про "написал конфиг, запустил - и на новом месте получилось то же самое". Ну и про переиспользование слоёв для экономии места. И про "поменял версию образа, перезапустил - и оно само обновилось".
Ну то есть я хочу понять, допустим возьмём базу данных, я скачал контейнер допустим с postgres 14 все там настроил все работает, потом захотел перейти на postgres 15, скачиваю новый контейнер и моментально мигрирую на новую версию без никаких глюков, если эти глюки не зависят от моего корявого кода ?
Про слои не понял, что имеется ввиду можно на примере с той же бд.
И про связь например php и posgres они будут в независимых контейнерах и мне надо будет просто их связать, или надо будет полностью все что относиться к одному веб серверу ставить в один контейнер, как сейчас делаю на виртуалке ?
сергей кузьмин, то есть базу данных лучше оставить на виртуалке или физическом сервере, а php, apachi, nginx в докер и все это поместить в три разных контейнера ?
winser, да конечно или даже использовать то облачное что гугль и остальные вендоры раздают (выбор огромный: у гугля https://cloud.google.com/products/databases
не помню линка у амазон и микрософт
у них бак естественно в виртуалках не в контейнерах