頑張らないために頑張る

ゆるく頑張ります

DockerのDebian環境に日本語フォントをインストールする

Posted at — Aug 7, 2020

概要

Dockerコンテナで構築したDebianの環境に、日本語フォントをインストールする方法についてメモします。基本的にはコンテナ上で日本語を使うことってあまりないような気もしますが、matplotlibで日本語項目や日本語のデータを表示する際には日本語フォントが必要になるので。

インストール

FROM python:3.8-buster

ENV ACCEPT_EULA=Y

RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
RUN curl https://packages.microsoft.com/config/debian/10/prod.list > /etc/apt/sources.list.d/mssql-release.list

RUN apt-get update \
    && apt-get install -y g++ \
    apt-utils \
    apt-transport-https \
    gcc \
    build-essential \
    unixodbc \
    unixodbc-dev \
    msodbcsql17 \
    mssql-tools \
    locales \
    fonts-takao-gothic \
    && apt-get upgrade -y \
    && apt-get clean \
    && sed -i -E 's/(CipherString\s*=\s*DEFAULT@SECLEVEL=)2/\11/' /etc/ssl/openssl.cnf \
    && pip install --upgrade pip \
    && pip install --no-cache-dir \
    autopep8 \
    flake8 \
    && rm -rf /var/lib/apt/lists/*

RUN echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
RUN /bin/bash -c "source ~/.bashrc"

RUN locale-gen ja_JP.UTF-8
RUN localedef -f UTF-8 -i ja_JP ja_JP
ENV LANG ja_JP.UTF-8
ENV LANGUAGE ja_JP:jp
ENV LC_ALL ja_JP.UTF-8

ADD . /home/workdir

WORKDIR /home/workdir

COPY ./requirements.txt ${PWD}

RUN pip install -r requirements.txt

WORKDIR /home/workdir/src

EXPOSE 8888

上記のDockerfileはpyodbc用の設定などがごちゃごちゃ書いてありますが、日本語フォントについて重要なのは「fonts-takao-gothic」の部分です。TakaoフォントというのはIPAフォントの派生版です。ゴシックだけでなく明朝体(fonts-takao-mincho)も存在します。上記Dockerfileではゴシックだけインストールしていましたが、ゴシックと一緒に明朝体をインストールしてももちろん問題ありません。

RUN locale-gen ja_JP.UTF-8
RUN localedef -f UTF-8 -i ja_JP ja_JP
ENV LANG ja_JP.UTF-8
ENV LANGUAGE ja_JP:jp
ENV LC_ALL ja_JP.UTF-8

部分のロケール設定は正直いらないかもしれません。どっちかっていうと、普段のコマンドラインで日本語が使えるようになる、くらいなので。matplotlibには直接関係しない・・・はず。

matplotlibでの日本語フォント指定

import matplotlib

font = {'family':'TakaoPGothic'}

matplotlib.rc('font', **font)

ちなみに、日本語を含むようなグラフの出力には、上記の設定で日本語フォントを設定する必要があります。

参考

armbianで起動したchromiumが文字化けする

DockerfileでDebianコンテナの日本語環境を整える

comments powered by Disqus