Например есть образ PHP + Nginx
Но мне еще нужна OS CentOS
Это мне нужно сделать например docker pull PHPNginx и docker pull CentOS что бы создать два образа? Ведь считается правильным - ОДИН КОНТЕЙНЕР = ОДИН СЕРВИС!
Tyranron: На продакшине стоит эта система. Или это не важно? Я не совсем понимаю, если я в докере соберу сервер, например nginx nodejs php и прочие, то потом я смогу развернуть это на продакшине? На продакшине имеется в виду не в докере. Или в докере я тестирую и разрабатываю только приложение?
chelkaz: докер - это не виртуальная машина, а изоляция процессов и их окружения.
Осмысление этого является ключевым для понимания docker way "один процесс - один контейнер".
Тому, что внутри контейнера - не важно какая ОС бежит снаружи контейнера, потому что все нужное есть в самом контейнере.
Но при этом некорректно приравнивать внутренности контейнера к обычной ОС. Тот CentOS, который в официальном Docker-образе, и тот CentOS, который обычная серверная ось - немного разные штуки. Хотя бы потому, что на обычной ОС бежит очень много процессов в фоне (апдейты ОС'и, стандартные кроны, SSH-сервер), которые запускаются при старте ОСи. В контейнере же ничего такого не происходит. В контейнере выполняется лишь тот процесс, который Вы укажете явно.
Не получится разрабатывать и тестировать в Docker'е, а на продакшене запускать без Docker'а. Вы получите заведомо разные среды выполнения, что сводит на нет одну из основных прелестей Docker - стандартизацию среды выполнения.
Если Вам просто нужен CentOS на деве, тесте и проде, то просто юзайте себе виртуальные машины для дева и теста. Vargrant Вам в этом поможет.
Docker же имеет смысл использовать, если Вы и на продакшене будете запускать в Docker'е. И в этом случае уже не имеет значения, образ строится на CentOS, либо на чем-то другом.
chelkaz: нет, никто (надеюсь) на продакшн всю среду в Docker'е не настраивает.
На продакшне ставят Docker, и в Docker'е запускают конкретные приложения (процессы): Nginx, PHP-FPM образы, и т.п.
Эти же образы до продакшена разрабатывают и тестируют, после чего отправляют в Docker registry как конкретную готовую самодостаточную версию приложения.
То-есть на деве, тесте и проде работают с одними и теми же образами.
Повторюсь:
Docker-образ - не виртуальная машина, и не операционная система. А всего лишь одно приложение, изолированной в своей личной среде.