Docker timezone 설정하기
프로젝트를 진행하면서 aws ec2에 띄워둔
docker container에서 로그를 요일별로 정리하여 파일로 저장하고 있었다.
근데 로그에 표시할 시간은 적절한 조치를 통해 한국 시간으로 표시하고 있었지만,
docker container 자체의 timezone이 UTC+0으로 설정되어 있었기 때문에
한국 시간을 기준으로 00시부터 새로운 로그파일이 생성되지 않는 문제가 있었다.
그래서 docker container의 timezone 자체를 Asia/Seoul로 설정하고자 한다.
Dockerfile의 설정을 통해서도 timezone을 지정해줄 수 있지만
현재 필자의 프로젝트는
EC2에 docker-compose를 통해
API 서버 & PostgreSQL 서버 & Redis 서버
로 배포되고 있었기 때문에
docker-compose 파일에서 설정하는 법
docker-compose.yml 파일에서 환경설정을 진행하도록 할 것이다.
변경 전 docker container의 timezone 확인
TIMEZONE 변경 전 api 서버에서 Date() 함수를 실행해본 모습이다.
사진에서 확인할 수 있듯이 UTC+0으로 timezone이 설정되어있는 모습이다.
UTC ? GMT ?
위 사진을 보고 왜 GMT+0인데 왜 UTC+0이라고 하는거지?
하는 의문을 가질 수 있다.
GMT와 UTC는 실제로 동일한 현재 시간을 공유하지만 둘 사이에는 기본적인 차이점이 있다.
- GMT는 일부 유럽 및 아프리카 국가에서 공식적으로 사용되는 표준 시간대이다.
- UTC는 표준 시간대가 아니라 전 세계 표준시 및 표준 시간대의 기초가 되는 시간 표준이다. 즉, 공식적으로 UTC를 현지 시간으로 사용하는 국가나 지역이 없다.
The Difference Between GMT and UTC
docker-compose.yml에 환경설정하기
TZ=[timezone]
와 같이 환경설정을 해줌으로써 docker container의 시간대를 원하는 곳으로 지정할 수 있다.
TIMEZONE 변경 후
TZ 환경설정을 추가한 docker-compose.yml 파일로 다시 컨테이너를 올리니
위와 같이 KST로 timezone이 잘 설정된 것을 확인할 수 있었다.
dockerfile에서 설정하는 법
만약 여러분이 docker file을 사용하여 timezone을 설정하고 싶다면,
구글링하면 상단에 바로 뜨는 방법처럼
ln -snf /usr/share/zoneinfo/Asia/Seoul /etc/localtime
이렇게 /usr/share/zoneinfo 디렉토리 하위에 있는 세계 각 지역 및 도시에 대한 파일을 통해 timezone을 설정할 수 있다.
그러나 만약 alpine 버전을 베이스로 한 docker image를 빌드 중이라면,
아주 가벼운 친구이기 때문에 timezone 파일들 또한 존재하지 않는다.
그래서 alpine 버전에서 사용하는 package manager인 'apk'를 사용하여
FROM node:16.13.1-alpine3.15
...
# Timezone setting
## install tzdata package for timezone setting
RUN apk add tzdata && ln -snf /usr/share/zoneinfo/Asia/Seoul /etc/localtime
...
참고 포스트
https://stackoverflow.com/questions/57607381/how-do-i-change-timezone-in-a-docker-container