В книге он говорит о том, что разработчики docker считают, что наиболее правильным в работе контейнеров использовать один процесс на один контейнер.Всё верно. Это основная парадигма при использовании контейнеризации. Ноги растут из 12 factors. Можно одной картинкой
Подскажите, значит ли это, что если я хочу развернуть веб сервер то мне надо минимум 3 контейнераТак и есть. Дальнейший запуск всех приложений осуществляется одной командой. Поскольку она получается довольно длинной (как будто Ява приложение запускаешь), предпочтительно использовать для этих целей docker-compose. Там единственный файл в формате yaml, в котором можно описать, что в какой последовательности запускать и в случае необходимости перезапускать, сколько и каких ресурсов железа выделять каждому приложению и много много ещё чего.
Или это все непринципиально и все можно сложить в один контейнер и будет работать так же хорошо.Можно и так сделать. Правда проще и разумнее всего не заморачиваться в этом случае с контейнерами.
upstream api {
server 127.0.0.1:7777;
}
server {
listen 80;
listen [::]:80;
server_name example.com;
root /home/iam/project/dist;
location / {
try_files $uri $uri/ /index.html;
}
location /api/ {
proxy_pass http://api/;
}
location /static/ {
try_files $uri @cdn_uploads;
}
location @cdn_uploads {
root /home/iam/cdn/uploads;
rewrite ^/static(/.*)$ $1 break;
}
}
route 192.168.10.0 255.255.255.0 client_ip1
route 192.168.20.0 255.255.255.0 client_ip2
route 192.168.30.0 255.255.255.0 client_ip3
push "route 192.168.20.0 255.255.255.0"
push "route 192.168.30.0 255.255.255.0"
iptables -A FORWARD -o tun0 -s 192.168.10.0/24 -j ACCEPT # Из сети 192.168.10.0/24 можно подключаться куда угодно
iptables -A FORWARD -o tun0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT # разрешить пакеты по уже установленным соединениям
iptables -A FORWARD -j REJECT # Остальное запрещаем