Docker에서 Ubuntu 한글 locale 설정해서 빌드하기

2018. 8. 7. 00:37Programming/WebProgramming

요즘 파이썬으로 카카오톡 채팅 로그를 분석하는 프로그램으로 만들고 있는데, 필수 불가결하게 자연어 처리 패키지도 써야하고, 한글 인코딩도 신경을 써야합니다.

euc-kr보다는 utf-8이 훨씬 나으니 utf-8을 써야하고, 더 나아가서 한글을 쓸 수 있는 환경일 수록 좋은데요.

무엇보다 자연어 처리 패키지가 파이썬이 아니라 OS 자체에 설치가 되고, 파이썬과 바인딩 해주는 패키지만 별도로 설치하는 형태라서 아무래도 배포하는 형태로 돌리려면 Docker 컨테이너를 쓰는게 낫다고 판단했습니다. 그런데 Docker에서 쓰는 Ubuntu 파일은 로케일 설정이 전혀 되어있지 않아서 모든 프로그램 구동 환경이 UTF-8이 아니게 되어서, 파이썬이 UTF-8의 텍스트 파일을 읽어오지 못하는 사태가 발생했었습니다.

구글링을 좀 해보면 컨테이너에 직접 접속해서 locales 관련 패키지를 설치하고, dpkg-reconfigure locales를 실행해서 언어를 변경하는 형식이었는데, 어째서인지 제 경우엔 그렇게 언어를 바꿔도 컨테이너를 나갔다 들어오면 다시 POSIX로 초기화가 되어 있었습니다.

고민 끝에 직접 Dockerfile을 만들어서 이미지 자체로 새로 Build하니 아무 문제 없이 한글 입력이 되네요. 혹시라도 Docker상 Ubuntu(우분투)에서 한글이 입력이 안된다는 분들은 아래와 같은 방법으로 Docker 이미지를 직접 Build 해보시기 바랍니다.

$ vim Dockerfile

쉘 상에서 위 명령어처럼 vim으로 작성해줘도 좋고, 뭐든 상관 없습니다. 빌드하고 싶은 디렉토리에 "Dockerfile"이란 이름으로 파일을 생성해주시기만 하면 됩니다.

FROM ubuntu:16.04

#Set the locale
RUN apt-get update
RUN apt-get install locales
ENV LANG ko_KR.UTF-8
ENV LANGUAGE ko_KR.UTF-8
RUN update-locale LANG=ko_KR.UTF-8

이렇게 작성이 끝났으면 저장하고 빠져 나온 후, 아래의 명령어를 실행합니다

$ docker build -t nickname/ubuntu-ko:16.04 ./

위의 nickname/ubuntu-ko:16.04는 아무렇게나 적으셔도 됩니다. : 뒤가 태그이니 버전 명을 붙여주시는게 좋겠죠.

위 명령어를 실행하면 빌드가 수행되고, 아래와 같은 명령어로 빌드된 이미지를 확인할 수 있습니다.

$ docker image ls

아래는 제 쉘에서 나타나는 이미지 목록입니다.