프로젝트를 진행하면서 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
'Dev' 카테고리의 다른 글
where 대신 join을 사용하는 경우 (0) | 2023.04.15 |
---|---|
HA(고가용성)와 DR(재해 복구) (0) | 2022.11.19 |
github action을 통한 ci cd 자동화(feat. shell script) (0) | 2022.10.17 |
Intellij 단축키 정복하기 (0) | 2022.05.22 |
Singleton Pattern(싱글톤 패턴) (2) | 2022.05.10 |