Window10に日本語対応CentOS7のdockerコンテナを作ってみた


環境(2018/10/13 更新)
Windows 10 Pro 1709(16299.192)
Docker version 17.12.0-ce, build c97c6d6 ⇒ Version 18.06.1-ce-win73
CentOS Linux release 7.4.1708 (Core) ⇒ CentOS Linux release 7.5.1804 (Core)

1.「Docker for Windows」のインストール

ドキュメントURL

ダウンロードURL

インストール手順

-「Get Docker for Windows [Stable]」をクリック
-「Docker for Windows Installer.exe」を開く

追加の設定(yum installのTimeOut回避)

1.タスクバー上のDocker アイコンを右クリック

2.「Settings...」メニューを選択
3.「Settings」画面で「Network」メニューを選択
4.「DNS Server」Fixed:8.8.8.8を選択し、Applyボタンクリック

2.「CentOS7」の「Dockerイメージ」をダウンロード

ダウンロード手順

「PowerShell」を開く

docker pullでcentosのイメージをダウンロード

PS C:\Users\UserName> docker pull centos

※centosのminimalインストールのイメージがダウンロードできる

3.日本語環境をインストールした「Dockerイメージ」の作成

イメージ作成手順

「Dockerfile」を作成

Dockerfile
FROM centos
LABEL maintainer "michiru <[email protected]>"

# CentOS ProjectのGPG公開鍵をインストールする
RUN rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

# インストール済みのパッケージをアップデート&キャッシュのクリア
RUN yum -y update && yum clean all


# 言語を日本語に設定
RUN localedef -i ja_JP -f UTF-8 ja_JP.UTF-8
RUN echo 'LANG="ja_JP.UTF-8"' >  /etc/locale.conf
ENV LANG ja_JP.UTF-8


# 日付を日本語に設定
RUN echo 'ZONE="Asia/Tokyo"' > /etc/sysconfig/clock 
RUN rm -f /etc/localtime
RUN ln -fs /usr/share/zoneinfo/Asia/Tokyo /etc/localtime


# manをインストールする前に、manファイルをインストールするように設定変更
RUN sed -i -e"s/^tsflags=nodocs/\# tsflags=nodocs/" /etc/yum.conf


# manと、man-pagesをインストール
RUN yum -y install man
RUN yum -y install man-pages.noarch
RUN yum -y install man-pages-ja.noarch

4.イメージ作成

「Dockerイメージ」の作成

PS C:\Users\UserName> docker build ./ -t centosjp

5.確認

「Dockerコンテナ」の作成&起動

PS C:\Users\UserName> docker run -it centosjp

日本語化の確認

CentOSで実行
[root@bcffc13a8539 /]# date
2018年  2月  3日 土曜日 10:57:54 JST
[root@bcffc13a8539 /]#

日本語manの確認

CentOSで実行
[root@bcffc13a8539 /]# man ls

メモ

1) yum -y groupinstall "Japanese Support" で、日本語化するのは過去(CentOS6?)の話。yumグループに"Japanese Support"はありません。yum grouplistで確認できます。
Refer to CentOS7のyumグループを確認する

2) yum -y reinstall glibc-common等は、必要ありません。CentOSのminimalに日本語のファイルが入っています。

[root@7c49cec1ae6a locales]# ls -l /usr/share/i18n/locales/ja_JP
-rw-r--r-- 1 root root 222115 11月 30 18:23 /usr/share/i18n/locales/ja_JP
[root@7c49cec1ae6a locales]#

ただし、localedef コマンドで、日本語ロケールをコンパイルする必要があります。
localedef の引数がja_JP.UTF-8なのに、locale -aはja_JP.utf8となっているのは、locale-archive に書き込む際に,アルファベットは小文字に,アルファベットと数字以外は無視するようにしているから

日本語ロケールをコンパイル
[root@254298d02f70 /]# locale -a | grep ja_JP
[root@254298d02f70 /]# localedef -i ja_JP -f UTF-8 ja_JP.UTF-8
[root@254298d02f70 /]# locale -a | grep ja_JP
ja_JP.utf8
[root@254298d02f70 /]#

export LANG="ja_JP.UTF-8"すると、日本語ロケールに変更できる。

日本語ロケールに変更
[root@7ab3dc1e9b5a /]# locale
LANG=
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=
[root@7ab3dc1e9b5a /]# export LANG="ja_JP.UTF-8"
[root@7ab3dc1e9b5a /]# locale
LANG=ja_JP.UTF-8
LC_CTYPE="ja_JP.UTF-8"
LC_NUMERIC="ja_JP.UTF-8"
LC_TIME="ja_JP.UTF-8"
LC_COLLATE="ja_JP.UTF-8"
LC_MONETARY="ja_JP.UTF-8"
LC_MESSAGES="ja_JP.UTF-8"
LC_PAPER="ja_JP.UTF-8"
LC_NAME="ja_JP.UTF-8"
LC_ADDRESS="ja_JP.UTF-8"
LC_TELEPHONE="ja_JP.UTF-8"
LC_MEASUREMENT="ja_JP.UTF-8"
LC_IDENTIFICATION="ja_JP.UTF-8"
LC_ALL=
[root@7ab3dc1e9b5a /]#

3) ワーニング回避のため、CentOS ProjectのGPG公開鍵をインストールする手順を追加した。

発生したNOKEYワーニング
warning: /var/cache/yum/x86_64/7/base/packages/less-458-9.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
dockerfileに追加したGPG公開鍵をインストールする手順
# CentOS ProjectのGPG公開鍵をインストールする
RUN rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7