Поддержание инфраструктуры в актуальном состоянии – залог надежности и стабильности системы.
Устаревшие версии ПО, достигнув конца жизненного цикла (EOL), перестают обновляться. Разработчики больше не чинят в нем баги и уязвимости.
Поэтому, использование актуальных версий в среде, в которой работают приложения, обеспечивает их стабильность и безопасность. Docker не является исключением из этого правила.
- Основные этапы обновления Docker контейнеров
- Как автоматизировать обновление Docker контейнеров
- Советы по безопасности и надежности при обновлении контейнеров
Почему важно своевременно обновлять Docker контейнеры
Обновление контейнеров — это необходимая часть поддержки безопасности и эффективности приложений. В ходе работы могут появляться баги, уязвимости или новые функции, которых вы хотите воспользоваться.
Регулярное обновление помогает:
- устранить уязвимости
- улучшить производительность
- получить новые возможности приложений
Автоматизация этого процесса — ключ к снижению ручной работы и минимизации ошибок.
Основные этапы обновления Docker контейнеров
Обновление Docker контейнера обычно включает следующие шаги:
1. Обновление образа (Image)
Образ — это шаблон, на основе которого создается контейнер. Если вы не знакомы с понятием образ в Docker, у нас этому посвящена отдельная статья.
Для обновления нужно:
- проверить наличие новой версии образа;
- скачать новую версию образа с Docker Registry (например, Docker Hub);
- убедиться, что обновленная версия работает корректно.
Например:
[root@waky ~]# docker pull nginx:latest
latest: Pulling from library/nginx
d7ecded7702a: Pull complete
266626526d42: Pull complete
320b0949be89: Pull complete
d921c57c6a81: Pull complete
9def903993e4: Pull complete
52bc359bcbd7: Pull complete
e2f8e296d9df: Pull complete
Digest: sha256:1beed3ca46acebe9d3fb62e9067f03d05d5bfa97a00f30938a0a3580563272ad
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
[root@waky ~]#
2. Остановка и удаление старого контейнера
Перед запуском нового контейнера требуется остановить текущий и удалить его, чтобы избежать конфликтов и сохранить чистоту среды.
[root@waky ~]# docker stop nginx_container
nginx_container
[root@waky ~]# docker rm nginx_container
nginx_container
[root@waky ~]#
3. Запуск нового контейнера
Создайте и запустите контейнер на основе обновленного образа.
Например:
[root@waky ~]# docker run -d --name nginx_container -p 80:80 nginx:latest
525faa93809dc2c05b64b8ff6c7a7370a85cbadd4f62c4d3b103885bc81a1cea
[root@waky ~]#
Как автоматизировать обновление Docker контейнеров
Ручное обновление — это долго и подвержено ошибкам. Поэтому рекомендуется внедрять автоматизацию.
Использование скриптов
Создайте bash-скрипт, условно /usr/local/bin/container_update.sh, который будет автоматически выполнять все вышеизложенные шаги обновления. Содержимое файла:
#!/bin/bash
# Остановить и удалить старый контейнер
docker stop nginx_container
docker rm nginx_container
# Обновить образ
docker pull nginx:latest
# Запустить новый контейнер
docker run -d --name nginx_container -p 80:80 nginx:latest
Сделайте файл исполняемым и запланируйте запуск этого скрипта через cron или другой планировщик задач.
Использование Docker Compose
В одной из статей мы использовали docker-compose.yml файл похожего содержания:
services:
alpine:
image: alpine:latest
command: sh -c "apk add --no-cache curl wget && sleep infinity"
web:
image: nginx:latest
ports:
- "8080:80"
Если контейнеры, заданные в этом файле уже работают, чтобы бы их обновить достаточно в той же директории выполнить:
[root@waky my-app]# docker compose pull
[+] Pulling 2/2
✔ alpine Pulled
2.6s
✔ web Pulled
2.6s
[root@waky my-app]# docker compose up -d
[+] Running 2/2
✔ Container my-app-alpine-1 Running
0.0s
✔ Container my-app-web-1 Running
0.0s
[root@waky my-app]#
Это автоматически обновит контейнеры до новых версий.
Использование CI/CD инструментов
Инструменты автоматической сборки и деплоя, такие как Jenkins, GitLab CI, или GitHub Actions, позволяют автоматически обновлять контейнеры после внесения изменений в репозитории кода.
Каждый из таких инструментов является довольно комплексным и требует отдельной (и не одной) статьи. Однако было невозможно не упомянуть о наличии таких средств в контексте автоматизации работы с контейнерами.
Советы по безопасности и надежности при обновлении контейнеров
- Тестируйте обновления на тестовых серверах перед внедрением в продакшн.
- Используйте теги с конкретными версиями (например, nginx:1.21) вместо latest, чтобы избегать неожиданных изменений.
- Создавайте резервные копии данных, если контейнер работает с важной информацией.
- Внедряйте автоматическую проверку логов и состояния контейнеров после обновления.
Заключение
Обновление и автоматизация Docker контейнеров — важные процессы для поддержки безопасности, стабильности и эффективности ваших приложений.
Простые скрипты и Docker Compose помогут значительно упростить эти задачи, снизить риск ошибок и сделать управление инфраструктурой более удобным.