Dockerfile에서 데비안(Debian) locale 및 timezone 설정

Docker로 데비안OS를 기반으로 Docker 이미지를 만들어서 실행해 접속해보면, 커멘드창에서 한글이 타이핑자체가 안되는 걸 알 수 있다. 주로 나는 Docker 이미지를 다운받을때, Debian 계열만 받아 사용하고 있는데, 항상 하는 시간설정과 언어셋팅 부문을 정리해본다.

준비해야할 사항이 있는데, locales, tzdata 패키지를 미리 설치한다.

> apt-get install -y locales tzdata

locale

locale 형식은 POSIX 포맷을 따른다. xx_YY.CHARSET 와 같은 포맷인데, xxISO-639 Language code이고, YYISO-3166 Country code이다. 예를 들면, en_US, ko_KR 와 같고, 데비안 메뉴얼에도 설명되있으니 참고한다.

최초 데비안 설치를 하고나서 locale 을 조회한다. 아직 설정이 안되어 있다.

> locale
LANG=
LANGUAGE=
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=

Dockerfile 에서는 아래와 같이 en_US.UTF-8 로 설정했다. 콘솔창에서 한글보다는 영어로 나오게 하려고 이렇게 셋팅했다.

# Dockerfile
RUN localedef -i en_US -c -f UTF-8 en_US.UTF-8
ENV LANG en_US.UTF-8

잘 반영되었다.

> locale
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

만약 한글로 하려면, 아래 같이 하면 된다.

# Dockerfile
RUN localedef -i ko_KR -c -f UTF-8 ko_KR.UTF-8
ENV LANG ko_KR.UTF-8

Dockerfile 이 아닌 터미널에서 실행하는 건 아래처럼 하면 된다.

> localedef -i ko_KR -c -f UTF-8 ko_KR.UTF-8
> export LANG=ko_KR.UTF-8

timezone

한국 표준시(KST, Korea Standard Time)는 대한민국에서 사용하는 표준 시간대로, 협정 세계시(UTC)보다 9시간 빠르다. 하지만, 최초 데비안OS 설치시 date 를 확인해보면, UTC로 되있는걸 볼 수 있다.

> date
Sun Aug 25 08:13:14 UTC 2024

KST로 변경하기 위해, 아래와 같이 명령어를 실행할 Dockerfile 스크립트를 추가한다.

# localtime 에 링크할 시간대를 링크.
RUN ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime

# 원하는 시간대 링크후 아래 수행시, /etc/timezone 파일변경됨.
RUN dpkg-reconfigure -f noninteractive tzdata

잘 바뀌어 나오는 것을 확인할 수 있다.

> date
Sun Aug 25 05:25:22 PM KST 2024

더 보면 좋을 글들