Docker. Как его применять на вебсервере?
Вы читали кучу мануалов, но упустили самое главное - официальная документация. Как так? Там как раз и говорится как делать и почему. На вопросы уже поотвечали, но пройдусь ещё раз, раз столько времени на чтение ответов потратил :>
1) https://docs.docker.com/engine/userguide/dockervolumes/
2) https://docs.docker.com/engine/articles/host_integ...
3) Ответ простой - как хотите. Как лучше знаете только вы, звучит банально, но это так. Хотите хоть всё в один контейнер запихните, это ваше дело. Хотя рекомендуют 1 компонент на 1 контейнер. В этом есть своя логика - хочется обновить только mysql - обновляете этот контейнер и не думаете, поломался ли у вас uwsgi или nginx или ещё чего.
4) Напишите свой первый Dockerfile, станет куда яснее как выбирать. А пока доверяйте только официальным образам.
5) git? Этот вопрос - следствие непонимания вопроса 1)
6) Уже ответили. Самое простое, если не понимаете - не используйте dockerhub вообще. Или начните понимать. :) Или платите за приватные репозитории, чтобы не думать об этом.
Попробую на пальцах
базы данных - в нормальных контейнерах типа lxc/openvz или в отдельной впс. чисто потому что бекапы и репликация там в нормальном режиме с нормальным доступом, плюс опять же ip адрес статический, чего в докере нет и врядли будет.
докерные контейнеры - это повторимая виртуалка имени одного процесса. Тоесть, вы четко говорите в докерфайле что, зачем выполнять и что конкретно запускать в форграунде, т.е на первом плане, вариант service apache2 start не канает, контейнер остановится после ухода приложения в бекграунд, также почитайте про проблему docker pid 1 и почему это все запускается в обвязке из того же bash.
Докер очень сильно привязан к своему хабу и гиту, чтобы "git pull & start app одной кнопкой" на каком-то та внутреннем айпишнике из серой сети.