🐳 ИзмСнСниС Π΄Π°Ρ‚Ρ‹ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° 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.

см. Ρ‚Π°ΠΊΠΆΠ΅:

 

Loading

You may also like

Leave a Comment