관리 메뉴

피터의 개발이야기

[Docker] Docker 컨테이너에서 한국 시간(KST)을 적용하는 방법 본문

DevOps/Docker

[Docker] Docker 컨테이너에서 한국 시간(KST)을 적용하는 방법

기록하는 백앤드개발자 2024. 12. 13. 22:30
반응형

ㅁ 들어가며

 Docker 컨테이너에서 한국 시간(KST)을 적용하는 아래의 방법을 정리하였다.

ㅇ 간단한 설정: -e TZ=Asia/Seoul 옵션 사용
ㅇ 여러 컨테이너 관리: docker-compose.yml 환경변수 추가
ㅇ 이미지 빌드 시 적용: Dockerfile에 타임존 설정

ㅇ 컨테이너 내부 직접 설정

 


ㅁ 컨테이너 실행 시 환경변수 설정

컨테이너를 실행할 때 -e 옵션을 사용하여 TZ(Timezone) 환경변수를 설정한다.

docker run -d -e TZ=Asia/Seoul [이미지 이름]

ㅇ -e 옵션을 사용하여 TZ(Timezone) 환경변수를 설정

ㅇ 컨테이너 실행 시 한국 시간으로 설정된다.

 

docker run -e TZ=Asia/Seoul --rm nginx date

ㅇ 컨테이너 내부에서 date 명령을 실행하면 KST로 출력된다.

 


ㅁ docker-compose.yml 파일에서 설정

version: '3'
services:
  app:
    image: nginx
    environment:
      - TZ=Asia/Seoul

ㅇ environment로 TZ 값을 Asia/Seoul로 설정

 


Dockerfile에 설정

ubuntu인 경우

docker run -e TZ=Asia/Seoul --rm ubuntu dat

ㅇ ubuntu의 경우 환경변수가 적용되지 않는다.

ㅇ 이런 경우 Dockerfile에 타임존 관련 설정을 추가해야 한다.

 

FROM ubuntu:latest

RUN apt-get update && apt-get install -y tzdata
RUN ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime && echo "Asia/Seoul" > /etc/timezone

ㅇ Dockerfile에 이미지 빌드 시 타임존 설정을 미리 설정한다.

 

$ cat Dockerfile
FROM ubuntu:latest

RUN apt-get update && apt-get install -y tzdata
RUN ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime && echo "Asia/Seoul" > /etc/timezone

$ docker build -t time-test .
[+] Building 0.0s (7/7) FINISHED                                                                                                                                                                                                                                                                                                docker:desktop-linux
 => [internal] load build definition from Dockerfile                                                                                                                                                                                                                                                                                            0.0s
 => => transferring dockerfile: 238B                                                                                                                                                                                                                                                                                                            0.0s
 => [internal] load metadata for docker.io/library/ubuntu:latest                                                                                                                                                                                                                                                                                0.0s
 => [internal] load .dockerignore                                                                                                                                                                                                                                                                                                               0.0s
 => => transferring context: 2B                                                                                                                                                                                                                                                                                                                 0.0s
 => [1/3] FROM docker.io/library/ubuntu:latest                                                                                                                                                                                                                                                                                                  0.0s
 => CACHED [2/3] RUN apt-get update && apt-get install -y tzdata                                                                                                                                                                                                                                                                                0.0s
 => CACHED [3/3] RUN ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime && echo "Asia/Seoul" > /etc/timezone                                                                                                                                                                                                                                  0.0s
 => exporting to image                                                                                                                                                                                                                                                                                                                          0.0s
 => => exporting layers                                                                                                                                                                                                                                                                                                                         0.0s
 => => writing image sha256:2646bf9b98500b8f8b0d755db83049225d906c083c821cfd8b603544cb375a9c                                                                                                                                                                                                                                                    0.0s
 => => naming to docker.io/library/time-test                                                                                                                                                                                                                                                                                                    0.0s

What's next:
    View a summary of image vulnerabilities and recommendations → docker scout quickview
   
$ docker run --rm time-test date
Fri Dec 13 22:12:13 KST 2024

 

 

Alpine인 경우

FROM alpine:latest

ENV TZ=Asia/Seoul
RUN apk add --no-cache tzdata && \
    cp /usr/share/zoneinfo/$TZ /etc/localtime && \
    echo $TZ > /etc/timezone

ㅇ Alpine에 맞는 타임존 설정을 Dockerfile에 추가한다.

 

 


심볼릭 링크를 사용한 수동 설정

ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime

ㅇ 컨테이너 내부에서 /etc/localtime 파일을 한국 시간대로 연결한다.

컨테이너를 재시작하면 설정이 초기화된다.

 

ㅁ 마무리

 가장 간단한 설정-e TZ=Asia/Seoul 옵션 사용을 사용하는 방법이다. 여러 컨테이너 관리을 관리하는 경우 docker-compose.yml 환경변수 추가하면 된다. 환경변수가 적용되지 않는다면, 이미지 빌드 시 적용 시 Dockerfile에 타임존 설정 추가할 수 있다. 각 방법은 상황에 따라 적합하게 선택하여, 지속적인 타임존을 관리할 수 있다.

 

 

ㅁ 함께 보면 좋은 사이트

Alpine 리눅스에서 timezone 설정하기

https://wiki.alpinelinux.org/wiki/Setting_the_timezone

[Docker] Container 시간 Time Zone 설정

Docker timezone 설정하기

반응형
Comments