🐳 Изменение даты внутри контейнера Docker

Как поменять дату и время внутри Docker

by itisgood

Обзор

Контейнеры Docker – это легкий способ упаковки, управления, распространения и развертывания приложений.

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

Это очень удобно для запуска контейнеров на любой системе, поскольку они переносимы.

Иногда нам нужно изменить дату и время внутри контейнера Docker.

В этом руководстве мы узнаем, как изменить дату и время в контейнере Docker.

Важность изменения даты внутри контейнера

Изменение даты внутри контейнера имеет множество преимуществ.

Оно помогает протестировать поведение приложения и отладить ошибки, связанные со временем.

Это также позволяет тестировать функции, зависящие от времени, и обеспечивает соответствие требованиям и аудит.

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

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

Использование пакета alpine-libfaketime

Мы можем использовать пакет alpine-libfaketime для установки времени и даты внутри контейнера Docker.

Кроме того, он помогает манипулировать системными часами для конкретного процесса.

Библиотека alpine-libfaketime использует технику обертывания времени, чтобы изменить восприятие времени для процесса без фактического изменения системных часов.

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

Все инструкции по установке alpine-libfaketime можно поместить в Dockerfile.

Чтобы продемонстрировать это, давайте проверим Dockerfile для обновления даты:

FROM groovy:alpine
COPY --from=trajano/alpine-libfaketime /faketime.so /lib/faketime.so
ENV LD_PRELOAD=/lib/faketime.so DONT_FAKE_MONOTONIC=1

Приведенный выше Dockerfile загружает alpine-libfaketime в процессы контейнера с помощью переменной окружения LD_PRELOAD, когда alpine-libfaketime уже установлен.

Это позволяет манипулировать или изменять системные часы по умолчанию.

Более того, мы можем использовать команду faketime для установки даты и времени для определенного процесса или группы процессов.

Вот команда для создания образа:

$ docker build -f fakedemo-java.Dockerfile . -t fakedemo

Это приведет к успешной сборке образа.

Давайте рассмотрим команду для запуска вышеупомянутого образа:

$ docker run --rm -e FAKETIME=+15d fakedemo groovy -e "print new Date();"
WARNING: Using incubator modules: jdk.incubator.vector, jdk.incubator.foreign
Mon Mar 13 18:35:06 GMT 2023

В результате выполнения приведенной выше команды мы видим, что дата контейнера увеличилась на 15 дней.

Таким образом, разработчики могут легко обновлять время контейнера для целей тестирования и разработки.

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

Пакет tzdata предоставляет информацию о часовых поясах для различных регионов мира.

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

Для демонстрации создадим Dockerfile для установки библиотеки tzdata:

FROM ubuntu:latest
RUN apt-get update \
&&  apt-get install -y tzdata \
&&  ln -fs /usr/share/zoneinfo/America/New_York /etc/localtime \
&&  dpkg-reconfigure --frontend noninteractive tzdata
CMD ["date"]

В приведенном выше Dockerfile мы установили пакет tzdata и создали символическую ссылку между файлом часового пояса для нужного региона и файлом /etc/localtime внутри контейнера.

Затем, используя команду dpkg-reconfigure, мы обновили часовой пояс.

Наконец, часовой пояс по умолчанию в докер-контейнере обновится до часового пояса /America/New_York.

Давайте рассмотрим команду для сборки образа:

$ docker build -t timezone .

Чтобы запустить контейнер с помощью образа временной зоны, нужно выполнить следующую команду:

$ docker run --rm  --name timezone timezone
Sun Feb 26 13:38:40 EST 2023

В приведенном выше выводе видно, что часовой пояс контейнера был изменен на EST с часового пояса UTC по умолчанию.

Заключение

В этой статье мы рассмотрели различные способы изменения даты и времени в контейнере Docker.

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

Сначала мы рассмотрели важность изменения даты и времени.

После этого мы обновили время с помощью библиотеки alpine-libfaketime и tzdata.

см. также:

 

You may also like

Leave a Comment