Docker
🤔 Зачем он лично мне
Docker позволяет без специальных настроек системы установить и настроить почти любой нужный сервис одной командой. По сути команда создает "виртуалку", в которой уже установлен нужный софт. Соответственно, и обновление сервиса это тоже просто "скачать новый образ и запустить". Если что-то из установленного больше не нужно – это "что-то" так же удаляется одной командой, не оставляя мусора. При этом на самом хосте нужен только docker и больше никаких дополнительных зависимостей.
🪄 Интересные инструменты
- micro - удобный консольный текстовый редактор, который удобно закидывать внутрь docker контейнера (упоминался в блоге)
- lazydocker – UI для Docker. Использую сам, упоминался в блоге
- dry – интересная альтернатива для 👆
- portainer – браузерный UI для управления всем Docker
- composerize – конвертировать docker run команду в docker-compose формат
- supdock –
alias 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 и ввожу команду заново. Контейнер вайпается