Перейти к основному содержимому

Docker

docker banner

🤔 Зачем он лично мне

Docker позволяет без специальных настроек системы установить и настроить почти любой нужный сервис одной командой. По сути команда создает "виртуалку", в которой уже установлен нужный софт. Соответственно, и обновление сервиса это тоже просто "скачать новый образ и запустить". Если что-то из установленного больше не нужно – это "что-то" так же удаляется одной командой, не оставляя мусора. При этом на самом хосте нужен только docker и больше никаких дополнительных зависимостей.

lazydocker

🪄 Интересные инструменты

  • 🔥 docker-compose – Упоминался в блоге (Ctrl + K = поиск). Удобное "склеивание" сервисов. Например nginx + mariadb + nodejs
  • micro - удобный консольный текстовый редактор, который удобно закидывать внутрь docker контейнера (упоминался в блоге)
  • lazydocker – UI для Docker. Использую сам, упоминался в блоге
  • dry – интересная альтернатива для 👆
  • portainer – браузерный UI для управления всем Docker
  • composerize – конвертировать docker run команду в docker-compose формат
  • supdockalias docker=supdock позволяет удобнее выполнять некоторые docker команды

⌨️ Полезные команды

# Смотреть логи всех сервисов через браузер
# Использует https://github.com/amir20/dozzle
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock -p 8888:8080 amir20/dozzle:latest

# получить лог и следить за обновлением
docker logs -fn 100 CONTAINER_NAME
docker-compose logs -f --tail 100

# вход в bash/sh контейнера (сервиса)
# чтобы посмотреть файлы, выполнить redis-cli, импортировать БД и т.д.
docker exec -it CONTAINER_NAME sh
docker-compose exec traefik sh

# инфа контейнера
# - узнать путь к volume контейнера (когда надо бекапнуть)
# - узнать ip контейнера. Полезно, когда хочешь с например REDIS GUI на своем компе подключиться к REDIS в контейнере на сервере (port forwarding)
docker inspect CONTAINER_NAME
# для IP искать .NetworkSettings.Networks.*.IPAddress

💡 Советы

Удобное создание Dockerfile

Когда нужно сделать Dockerfile, то делаю контейнер с базового image и внутри ввожу команды одна за одной, пока не получу желаемый результат. В процессе все эти команды выписываю в текстовый файл.

docker run --rm -it base_image_name sh

Если где-то зафейлился, то пишу exit и ввожу команду заново. Контейнер вайпается

Использование алиасов

Здесь можно найти кучу полезных алиасов, которые могут пригодиться.

Как минимум, я рекомендую сделать alias dc=docker-compose и посмотреть dip из ссылки выше

🧱 Юзаю/юзал сервисы

Список неполный. Просто каждому свое

  • traefik – альтернатива nginx для контейнеров. Сам делает SSL сертификаты и после первой настройки очень легко подключать новые сервисы не перезагружая traefik
  • watchtower – автообновление контейнера, когда обновился image
  • cloudflare-ddns – обновляет IP в CF. Прикручиваю к web сервисам, чтобы при переносе на новый хост не нужно было лезть в CF для обновления IP
  • telegram-bot-api для моего @video_screenshoter_bot (бот присылает скрины участков видео). Скидываешь боту гору порнушки с каналов, а он тебе присылает скрины и ты решаешь годнота или нет 👍. Без сервиса бот упирался в лимит размера файла
  • ispy agent – видеонаблюдение. Ctrl + K, писал о нем
  • ghost cms, pritunl vpn, outline vpn, mariadb, redis, laradock, luarocks, openresty...

Быстро развернуть веб файловый менеджер

tinyfilemanager – запустил и работаешь. admin:admin@123. Не открывает .mkv видео

# будет доступен по порту 12345
docker run -d -v $PWD:/var/www/html/data -p 12345:80 tinyfilemanager/tinyfilemanager:master

filestash – вроде admin:admin, нужно кликнуть Local для доступа к локальной файловой системе. Даже открывает mkv вроде

docker run -d -v $PWD:/var/www/html/data -p 12345:8334 machines/filestash

Еще есть filebrowser, самый популярный так то. Не помню пробовал ли

📒 Почитать