Dockerfile에 matplotlib로 일본어 표기를 할 수 있는 설정을 썼다

소개



docker 환경에서 web 앱 개발을 하고 있었습니다만, 거기에 그림을 표시해 보고 싶어지고 matplotlib를 넣었습니다. 그러나 왠지 일본어 표기를 할 수 없어서 손질했기 때문에, 그 기록으로서 남깁니다.
다른 기사를 여러가지 찾았지만, jupyter의 docker 이미지를 사용하고 있는 것이 많고, 우분투를 사용하고 있는 것이 발견되지 않았기 때문에, 누군가의 도움이 되면 기쁩니다.

참고로 한 기사 :
Docker 환경의 Python에서 일본어를 사용할 수 있도록

Dockerfile



dockerfile
FROM ubuntu:18.04
RUN apt-get -y update \
    && apt-get -y upgrade \
    && apt-get install -y locales curl python3-distutils \
    && apt-get install -y unzip\
    && curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py \
    && python3 get-pip.py \
    && pip install -U pip \
    && pip install psycopg2-binary \
    && mkdir /code\
    && rm -rf /var/lib/apt/lists/* \
    && localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8\
    && rm get-pip.py

WORKDIR /code
ADD requirements.txt /code
# requirements.txtからパッケージのインストール
RUN pip install -r requirements.txt

# matplotlibで日本語を使うための設定
WORKDIR /
RUN curl -L  "https://moji.or.jp/wp-content/ipafont/IPAexfont/IPAexfont00401.zip" > font.zip \
    && unzip font.zip\
    && touch /usr/local/lib/python3.6/dist-packages/matplotlib/mpl-data/fonts/ttf/ipaexg.ttf\
    && cp IPAexfont00401/ipaexg.ttf /usr/local/lib/python3.6/dist-packages/matplotlib/mpl-data/fonts/ttf/ipaexg.ttf \
    && echo "font.family : IPAexGothic" >>  /usr/local/lib/python3.6/dist-packages/matplotlib/mpl-data/matplotlibrc \
    && rm -r ./root/.cache 

CMD ["bash"]

matplotlib로 일본어 표기를 할 수 없는 원인은 일본어 표기를 가능하게 하는 폰트가 없기 때문입니다.
따라서 글꼴을 다운로드하여 적절한 위치에 넣습니다.
이번에 사용하는 파이썬 버전은 python3.6입니다. 버전에 따라 경로를 변경하는 것이 좋습니다.
또한 우분투 환경에서는 unzip 명령이 없었기 때문에 설치했습니다.
데이터 처리에 사용할 수 있는 라이브러리는 requirements.txt에 있습니다. (django를 사용하고 있기 때문에 그것도 넣고 있습니다)

requirements.txt
django
numpy
pandas
matplotlib
seaborn

그런 다음 docker-compose.yml에 적절한 코드를 작성하고 실행하면됩니다. docker-compose.yml은 특별히 변경되지 않았습니다.

결과




할 수 있었다!

요약



다른 사이트에서는 jupyter 이미지로 쓰고 있는 것이 많아, 도중에 그렇게 하는 것이 좋았을까라고 생각했습니다만, 우분투에서도 할 수 있었기 때문에 좋았습니다. 처음부터 데이터 분석 라이브러리를 넣는다고 알고 있으면 jupyter 쪽이 좋았을까요.... 아직 거기엔의 지식이 전혀 없기 때문에, 좀 더 심해지고 싶습니다.
만약 뭔가 잘못되었거나 가르쳐 주시면 고맙습니다!

좋은 웹페이지 즐겨찾기