Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Если у вас НЕ высоконагруженный сервис — вы конечно можете отдать весь low-level на откуп «контейнерному облаку».
А идея о том, что «отдать контейнер в облако — и пусть оно там все автоматом деплоится и конфигурится» — это пока утопия.
Действительно высоконагруженые сервисы без облака нынче не мыслимы…
А идея о том, что «отдать контейнер в облако — и пусть оно там все автоматом деплоится и конфигурится» — это пока утопия.
С чего вы это взяли? Бред же… Это уже давно стандарт ;)
То есть вы отдаете свой контейнер, в котором запакован ваш код, в какое-то мифическое облако, а оно самостоятельно по очереди выключает воркеры из балансера, запускает новые контейнеры и добавляет их в балансер. Сами контейнеры находят внешние сервисы, которые обслуживают стейт(базы, кэша, whatever) и подключают приложения к этим базам.
Я все правильно понимаю?
То есть вы отдаете свой контейнер, в котором запакован ваш код, в какое-то мифическое облако, а оно самостоятельно по очереди выключает воркеры из балансера, запускает новые контейнеры и добавляет их в балансер. Сами контейнеры находят внешние сервисы, которые обслуживают стейт(базы, кэша, whatever) и подключают приложения к этим базам.
Первоначальная настройка понятно — машина с php+php-fpm, mysql, rabbit, все настроили, пошли данные.
Mysql и rabbitmq мы не будем обновлять скорее всего никогда, там данные внутри. Они же потеряются при обновлении докер контейнера?
Через Docker Hub. Докачиваются новые слои или обновленные, и готово.Очень плохой совет. Нести в свой внутренний контур кучу левого софта, запускаемого с правами рута, — просто безумие. С безопасностью у докера всё не просто плохо: её нет. Никакой.
Libcontainer 1.6.0, as used in Docker Engine, allows local users to escape containerization («mount namespace breakout») and write to arbitrary file on the host system via a symlink attack in an image when respawning a container.
С другой стороны можно некоторые вещи делать наоборот, например админ собирает контейнер с системой, содержащей нужные настройки и передает разрабам, а они свой проект запускают уже внутри. при таком раскладе они будут тестировать ПО в окружении идентичному боевому.
То же ядро, память, файловая система, а дистрибутивы, библиотеки и пользователи — разные.
Docker — это инструмент объекто-ориентированного проектирования
Если вкратце, у Docker несколько драйверов для работы с файловой системой, обычно это AUFS, и все файлы контейнеров лежат в /var/lib/docker/aufs/diff/. В /var/lib/docker/containers/ служебная информация, а не сами файлы контейнеров.Давно не используется по умолчанию. Используется devicemapper + lvm thin pool.
Контейнеры исполняются механизмом ядра под названием Cgroups. Служба docker запускает контейнер по команде, полученной от клиентского приложения (например, docker), и останавливает его когда в контейнере освобождается поток стандартного ввода-вывода.Процесс в контейнере исполняется, как любой другой процесс в linux. Другое дело, что для контейнера создаются нужные namespaces (netns, utsname, pid, ipc), а также создаются и конфигурируются контрольные группы (cgroups), которые ограничивают потребление ресурсов, управляют шедулингом и т. п.
Соответственно, Docker может и зависнуть. Если вы дали команду скачать образ, единственный способ прервать процесс скачивания — перезапустить службу. Авторы уже давно обсуждают что с этим делать, но воз и ныне там.После нажатия ctrl+c у вас отваливается клиент к докеру, т. к. словил SIGHUP. Образ продолжает качаться. И, если вы пытаетесь запустить docker pull того же образа повторно, то он будет висеть в ожидании, пока сервер не скачает этот образ по команде, полученной при предыдущем запуске docker pull.
Мифы и рецепты Docker