AmazonLinux2のDockerイメージに日本語ローケルを設定してみました。

## はじめに

AmazonLinux2のDockerイメージに日本語設定をしていみました。
中身の日本語は問題ないと思いますが、ローケル設定後のコマンド系`ls`, `vi`に表示される
日本語が文字化けするため、調べながら設定してみました。

結論から言うと言語バックである`glibc-langpack-ja`をインストールが必要のことです。

## 前提条件

* Dockerインストールされていること

##　DockerHubからAmazonLinuxのイメージを取得する

```bash:取得
$ docker pull amazonlinux:2
```

```bash:確認
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
amazonlinux         2                   ed7831dfe956        4 days ago          208MB
```

## 現状の確認

```bash:bash
$ docker run -it --rm amazonlinux:2
bash-4.2# touch テスト.txt
bash-4.2# ls
bin  boot  dev	etc  home  lib	lib64  local  media  mnt  opt  proc  root  run	sbin  srv  sys	tmp  usr  var  ?????????.txt
```

テスト.txtが`?????????.txt`になっている。

```bash:ローケル確認
bash-4.2# locale -a
C
C.utf8
POSIX
en_AG
en_AU
en_AU.utf8
en_BW
en_BW.utf8
en_CA
en_CA.utf8
en_DK
en_DK.utf8
en_GB
en_GB.iso885915
en_GB.utf8
en_HK
en_HK.utf8
en_IE
en_IE.utf8
en_IE@euro
en_IL
en_IN
en_NG
en_NZ
en_NZ.utf8
en_PH
en_PH.utf8
en_SG
en_SG.utf8
en_US
en_US.iso885915
en_US.utf8
en_ZA
en_ZA.utf8
en_ZM
en_ZW
en_ZW.utf8
```

日本語がないです。

## 言語パックをインストールする

### yumから日本語の言語パックを検索してみる

```bash:yum検索
bash-4.2# yum search langpack-ja
Loaded plugins: ovl, priorities
amzn2-core                                                                                                                                                                           | 2.0 kB  00:00:00     
(1/2): amzn2-core/2017.12/x86_64/group_gz                                                                                                                                            | 2.3 kB  00:00:00     
(2/2): amzn2-core/2017.12/x86_64/primary_db                                                                                                                                          |  10 MB  00:00:17     
========================================================================================= N/S matched: langpack-ja =========================================================================================
glibc-langpack-ja.x86_64 : Locale data for ja

  Name and summary matches only, use "search all" for everything.
```

`glibc-langpack-ja`でした。早速インストール

```bash:インストール
$ yum install -y glibc-langpack-ja
Loaded plugins: ovl, priorities
Resolving Dependencies
--> Running transaction check
---> Package glibc-langpack-ja.x86_64 0:2.26-27.amzn2.0.4 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

============================================================================================================================================================================================================
 Package                                              Arch                                      Version                                                 Repository                                     Size
============================================================================================================================================================================================================
Installing:
 glibc-langpack-ja                                    x86_64                                    2.26-27.amzn2.0.4                                       amzn2-core                                    301 k

Transaction Summary
============================================================================================================================================================================================================
Install  1 Package

Total download size: 301 k
Installed size: 2.1 M
Downloading packages:
glibc-langpack-ja-2.26-27.amzn2.0.4.x86_64.rpm                                                                                                                                       | 301 kB  00:00:02     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : glibc-langpack-ja-2.26-27.amzn2.0.4.x86_64                                                                                                                                               1/1 
  Verifying  : glibc-langpack-ja-2.26-27.amzn2.0.4.x86_64                                                                                                                                               1/1 

Installed:
  glibc-langpack-ja.x86_64 0:2.26-27.amzn2.0.4                                                                                                                                                              

Complete!
```

## 確認と設定

### インストールの確認

```bash:
bash-4.2# locale -a | grep ja
ja_JP.eucjp
ja_JP.utf8

bash-4.2# 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=
```

### ローケルの設定

```bash:ローケル設定
bash-4.2# export LANG='ja_JP.utf8'
bash-4.2# locale
LANG=ja_JP.utf8
LC_CTYPE="ja_JP.utf8"
LC_NUMERIC="ja_JP.utf8"
LC_TIME="ja_JP.utf8"
LC_COLLATE="ja_JP.utf8"
LC_MONETARY="ja_JP.utf8"
LC_MESSAGES="ja_JP.utf8"
LC_PAPER="ja_JP.utf8"
LC_NAME="ja_JP.utf8"
LC_ADDRESS="ja_JP.utf8"
LC_TELEPHONE="ja_JP.utf8"
LC_MEASUREMENT="ja_JP.utf8"
LC_IDENTIFICATION="ja_JP.utf8"
LC_ALL=
```

### 確認

```bash:確認
bash-4.2# ls
bin  boot  dev	etc  home  lib	lib64  local  media  mnt  opt  proc  root  run	sbin  srv  sys	tmp  usr  var  テスト.txt
```

日本語が表示される。

## まとめてDockerイメージ作成

### Dockerfile

```Dockerfile:Dockerfile
FROM amazonlinux:2

RUN yum install -y glibc-langpack-ja && yum clean all
ENV LANG ja_JP.utf8
ENV LC_ALL ja_JP.utf8

RUN unlink /etc/localtime
RUN ln -s /usr/share/zoneinfo/Japan /etc/localtime

CMD ["/bin/bash"]
```

### イメージをビルドする

```bash:ビルドする
$ docker build -t amzn2ja .
```

### 確認

```bash:確認
$ docker run -it --rm amzn2ja
bash-4.2# ls -al
合計 60
drwxr-xr-x   1 root root 4096  4月 14 22:44 .
drwxr-xr-x   1 root root 4096  4月 14 22:44 ..
-rwxr-xr-x   1 root root    0  4月 14 22:44 .dockerenv
lrwxrwxrwx   1 root root    7  3月 31 08:54 bin -> usr/bin
dr-xr-xr-x   2 root root 4096 10月 20 08:42 boot
drwxr-xr-x   5 root root  360  4月 14 22:44 dev
drwxr-xr-x   1 root root 4096  4月 14 22:44 etc
drwxr-xr-x   2 root root 4096 10月 20 08:42 home
lrwxrwxrwx   1 root root    7  3月 31 08:54 lib -> usr/lib
lrwxrwxrwx   1 root root    9  3月 31 08:54 lib64 -> usr/lib64
drwxr-xr-x   2 root root 4096  3月 31 08:54 local
drwxr-xr-x   2 root root 4096 10月 20 08:42 media
drwxr-xr-x   2 root root 4096 10月 20 08:42 mnt
drwxr-xr-x   2 root root 4096 10月 20 08:42 opt
dr-xr-xr-x 231 root root    0  4月 14 22:44 proc
dr-xr-x---   2 root root 4096 10月 20 08:42 root
drwxr-xr-x   1 root root 4096  4月 14 22:42 run
lrwxrwxrwx   1 root root    8  3月 31 08:54 sbin -> usr/sbin
drwxr-xr-x   2 root root 4096 10月 20 08:42 srv
dr-xr-xr-x  13 root root    0  4月 14 16:21 sys
drwxrwxrwt   1 root root 4096  4月 14 22:42 tmp
drwxr-xr-x   1 root root 4096  3月 31 08:54 usr
drwxr-xr-x   1 root root 4096  3月 31 08:54 var
bash-4.2# date
2018年  4月 14日 土曜日 22:44:51 JST
```

表示OK


以上。