Как это обычно заведено, знакомство с системой начинается с момента, когда что-то сломалось. Так началось моё знакомство с Docker сегодня утром. Разберём простейшие команды, которые необходимы для работы с Docker.
Зачем вообще нужен Docker?
Одно из самых лучших применений Docker - это установка в него MySQL. Ведь на одну и ту же систему нельзя установить несколько MySQL серверов разных версий. А если устанавливать их в Docker контейнеры, то нет ограничений.
К примеру, можно установить сразу чистую MySQL (нескольких разных версий одновременно), MariaDB и PostgreSQL в разные контейнеры. И получать доступ к базам через разные порты. К примеру, MySQL будет в контейнере, который подключен к порту TCP 3306, MariaDB в порту 3310 и PostgreSQL в 3312 и т.д. Именно такое использование Docker можно обнаружить на виртуальных хостингах.
Выполнение простейшей bash команды внутри контейнера
Для начала научимся смотреть список контейнеров Docker, которые есть в системе. Делается это командой:
docker ps -a
В выводе можно увить список контейнеров, их статус, к каким портам они подключены. Нас интересует значение в столбце "CONTAINER ID". По этому значению попробуем обратиться к контейнеру и выполнить в нём произвольную bash команду. Для это используем такую конструкцию:
docker exec -it id_контейнера bash_команда
Попробуем выполнить команду вывода списка файлов "ls -l". В моём случае (у моего контейнера id = 24bab04158f3) команда получится такой:
docker exec -it 24bab04158f3 ls -l
Если на экране появился список фалов и папок в корневой директории контейнера, то всё сделано верно.
Включение/выключение контейнера
Теперь попробуем выключить контейнер:
docker stop id_контейнера
И включить контейнер:
docker start id_контейнера
Автоматическое включение Docker контейнера
Иногда Docker контейнеры выключаются. К примеру, если на системе обновить Docker, то все контейнеры выключатся, если не указана полтика их включения. Есть несколько разных политик. Попробуем применить политику "always" к контейнеру, которая заставляет его включаться, если он выключился (только если не вручную):
docker update --restart=always id_контейнера
А теперь попробуем отключить все политики рестарта, чтобы во время остановки контейнер продолжал быть выключенным:
docker update --restart=no id_контейнера
Есть ещё политика "on-failure", которая перезапускает контейнер, если он остановился, выдав ошибку ("error code" будет больше нуля). А политика "unless-stopped" похожа на "always", но в отличии от "always" перезапуска при рестарте Docker не будет.
Насторйки Docker контейнера
Существует команда для проверки настроек Docker контейнера. К примеру, измените политику рестарта (из предыдущего параграфа) и сможете найти соответствующую строчку с внесёнными изменениями, посмотрев настройки контейнера. Делается инспекция такой командой:
docker inspect id_контейнера
Через update можно устанавливать ещё и ограничение на потребление ресурсов. Например, ограничение на количество CPU:
docker update --cpus 5 id_контейнера
Ограничение на ОЗУ:
docker update --memory 8G id_контейнера
Ограничение на ОЗУ+подкачка:
docker update --memory-swap 18G id_контейнера