В книге он говорит о том, что разработчики docker считают, что наиболее правильным в работе контейнеров использовать один процесс на один контейнер.
Всё верно. Это основная парадигма при использовании контейнеризации. Ноги растут из
12 factors. Можно одной картинкой
В некоторых случаях можно от неё отходить - суть не догма. Это случаи когда в контейнере с приложением надо держать планировщик (crontab), утилиту мониторинга, либо что-то ещё не относящееся к основному процессу.
Подскажите, значит ли это, что если я хочу развернуть веб сервер то мне надо минимум 3 контейнера
Так и есть. Дальнейший запуск всех приложений осуществляется одной командой. Поскольку она получается довольно длинной (как будто Ява приложение запускаешь), предпочтительно использовать для этих целей docker-compose. Там единственный файл в формате yaml, в котором можно описать, что в какой последовательности запускать и в случае необходимости перезапускать, сколько и каких ресурсов железа выделять каждому приложению и много много ещё чего.
Или это все непринципиально и все можно сложить в один контейнер и будет работать так же хорошо.
Можно и так сделать. Правда проще и разумнее всего не заморачиваться в этом случае с контейнерами.