Хорошо, давайте сломаем эту эволюцию Docker.Это дико, как все меняется.
Помните, когда Docker чувствовал себя... борется с громоздким осьминогим? Так много команд, так много концепций. построить, бежать, толкнуть, тянуть, объемы, сети... моя голова вращалась.должен, но это всегда чувствовало себя немного хрупким, немного... наполненным трением.Моя история терминала была просто беспорядокdocker ps -a
Отчаянно пытаясь вспомнить этоОдинкомандование на прошлой неделе.
Затем, медленно, вещи начали нажимать. Не один большой момент эуреки, а серия небольших «аха!» открытий. Маленькие трюки, оптимизации, корректировки рабочего процесса. Хаки, я думаю? И, честно говоря, они настолько вошли в мою повседневную рутину, что я уже почти не думаю о них.Как я делаю вещи.
Вот игровые модификаторы, которые застряли:
Оригинальное название: Terminal Aliases: The Sanity Savers
Первая большая победа?Aliases.Серьезно. ♂️ Почему я потратил месяцы, пишуdocker-compose up -d --build
илиdocker ps
вновь и вновь? устанавливать простые псевдонимы в моей.bashrc
или.zshrc
Это было откровение.
# My sanity savers
alias dcu='docker-compose up -d'
alias dcd='docker-compose down'
alias dcb='docker-compose build'
alias dcr='docker-compose run --rm' # For running one-off commands
alias dps='docker ps'
alias dpa='docker ps -a'
alias di='docker images'
alias dip='docker image prune -f' # Prune dangling images
alias dvp='docker volume prune -f' # Prune unused volumes
alias dsp='docker system prune -af' # The big cleanup! 💥
Только типографияdcu
О, миллисекунды сэкономлены! Это звучит тривиально, но умножайте это десятками раз в день... это добавляет.
Получите последний чешский лист Docker отсюда:Докер Cheatsheet
2 Могучий.dockerignore
Название: Slimming Down Builds
Затем пришли.dockerignore
Еще один «дух» момент. я знал о.gitignore
Конечно, но сначала я не понимал, насколько важно.dockerignore
это для производительности build.My early Docker builds wereТак медленноПотому что строительный контекст посылалВсегоПерейти к Docker Daemon.node_modules
, журналы, временные файлы, локальные артефакты... все!
Создание правильного.dockerignore
файл, перечисляя все мусор, который мне не нуженВнутриВнезапно, сборки были быстрее.Изображения были меньше (иногда резко так).Это было похоже на то, что вы поставили блендеры на Docker, говоря ему: "Просто сосредоточьтесь наЭТОМеньше беспорядков, быстрее обратная связь.Поцелуй шеф-повара!
Многоступенчатые здания: Lean, Mean Production Machines ➡️
Multi-stage builds... в порядке, это чувствовало себя немного более продвинутым вначале. Концепция блестящая, однако.
- Шаг 1: Используйте базовое изображение со всеми инструментами построения, компиляторами, SDK и зависимостями, необходимыми для создания артефакта приложения (например, компилированный бинарный или пакетный JavaScript).
- Шаг 2: Начните новое, чистое, минимальное базовое изображение (например, альпийское или неуверенное).
- Копирование: только копировать окончательный артефакт с первого этапа в этот чистый второй этап.
Вместо того, чтобы отправлять изображения, раздутые с помощью инструментов построения и зависимостей разработчиков (которые также являются риском для безопасности!), Я отправляю изображения, содержащиетолькоПотребовалось немного времени, чтобы обернуть голову вокруг синтаксиса, но вау, разница в размере изображения и позе безопасности огромна.
Docker Compose Overrides: Taming Environments ️
Давайте поговоримDocker Compose override
Файлы. Управление различными средами, которые использовались, чтобы быть болью. Dev нуждается в томах, монтированных для перезагрузки живого кода, порты дебаг открыты. Prod нуждается в различных переменных окружающей среды, возможно, более строгие ограничения ресурсов, возможно, другая точка входа.docker-compose.yml
было беспорядочно, включая комментируемые разделы или сложныеif
условия, основанные на переменных окружающей среды.
Открытьdocker-compose.override.yml
был чистый блаженство. У вас есть ваша базаdocker-compose.yml
с общей конфигурацией. Затем вы создаетеdocker-compose.override.yml
(который обычно игнорируется через.gitignore
) для ваших локальных модификаций разработки – монтаж кодовых каталогов, раскрытие различных портов, добавление дебютных инструментов.override
Вы даже можете иметь конкретные файлы, такие какdocker-compose.prod.yml
Используйте его-f
Флаг :docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d
Чистое разделение забот. Больше никаких случайных совершений настроек dev!
Регулярная чистка: держите систему чистой ✨
И наконец, привычкаregular cleanupDocker может накапливатьстолькоУгрожающие изображения (разглашенные слои из предыдущих builds), неиспользованные объемы, остановленные контейнеры, старые build caches... Мое дисковое пространство загадочно исчезло.
Войти в ритм периодического бегаdocker system prune -af
(агрессивный подход) или более целенаправленныйdocker image prune
,docker volume prune
,docker network prune
, иdocker builder prune
чувствует себя как цифровое отключение. Он поддерживает бесперебойную работу, предотвращает странные проблемы с кешированием («почему мои изменения не появляются?!»), и освобождает драгоценные гигабайты. Чистое рабочее пространство, чистый ум, не так ли? ♂️ Бегущийdsp
(Мой прозвище дляdocker system prune -af
) теперь является удовлетворительной, почти терапевтической, рутиной.
Так что да, это уже не просто «хаки».Они укоренились.Они мышечная память.Алисы летают из моих пальцев без размышлений..dockerignore
является одним из первых файлов, которые я создаю. Многоступенчатые сборки являются стандартными для всего, что потенциально может быть живым. Композиционные перекрытия плавно справляются с различиями в окружающей среде.
Docker перешел от того, что громоздкий бабочка к мощному, упрощенному помощнику. Это выходит из моего пути сейчас.Строительства быстрее, развертывания более плавные, мое дисковое пространство счастливее, и честно говоря,Я ЯЭто не только о самой Docker; это о том, как овладение этими мелкими деталями упростило весь мой рабочий процесс разработки и развертывания.