Docker(CentOS7)を日本語化してPython3環境構築するDockerfile

今更ながらDockerを使い始めたので、よく使うPython3.6の開発環境を作ってみます。
あまりPC汚したくないタイプの人にとってDockerはありがたいですね。

インストールなどは既にわかりやすい記事がたくさんあるので省略します。

環境
Mac HighSierra 10.13.4
Docker 18.03.1-ce

(2018/08/01 追記)
[Github](https://github.com/k0sukejin/develop-environment/tree/master/develop-conda)にanacnoda版入れたのでよければ使ってください。

### ディレクトリ準備とDockerfile作成
Dockerfileと同じ階層にファイルが置いてあるとビルドが遅くなるので、基本的にDockerfileは単体で置いてあるのがいいらしい。

```
# ディレクトリ名は全然関係ないのでお好みで
$ mkdir myenv && cd myenv

# Dockerfile作成
$ vim Dockerfile
```
```/path.../myenv/Dockerfile
# CentOS7
FROM centos:centos7

## install util
RUN yum -y update \
 && yum -y install \
	epel-release \
    gcc \
    git \
    vim \
    which \
 && yum clean all

# https://www.python.jp/install/centos/index.html
RUN yum install -y https://centos7.iuscommunity.org/ius-release.rpm
RUN yum install -y \
    python36u \
    python36u-devel \
    python36u-pip \
 && yum clean all \
 && ln -sf /usr/bin/python3.6 /usr/bin/python3 \
 && ln -sf /usr/bin/pip3.6 /usr/bin/pip3 \
 && pip3 install --upgrade pip

# locale & timezone 
RUN yum reinstall -y glibc-common \
 && yum clean all
ENV LANG ja_JP.UTF-8
ENV LANGUAGE ja_JP:ja
RUN localedef -f UTF-8 -i ja_JP ja_JP.UTF-8 \
 && echo 'ZONE="Asia/Tokyo"' > /etc/sysconfig/clock \
 && ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime \
 && echo 'KEYMAP="jp106"' > /etc/vconsole.conf

# setting
RUN echo 'alias ll="ls -laF --color=auto"' >> /root/.bashrc \
 && echo 'export PS1="[\u@\h \w]\$ "' >> /root/.bashrc
COPY ~/.vimrc /root/.vimrc
```

* ちょい解説
    * FROM centos:centos7
        * FROMでベースになるイメージを指定(イメージを持ってなければ勝手にpull)

    * RUN .....
        * /bin/sh -c {command}が実行される
        * yum clean allは(確か)リポジトリ系のエラー防止とイメージ軽量化の為に頻繁に行う
        * RUNのコマンドは一気に流せる場合 && とかで繋いで実行した方が速い

最後の# settingの部分は完全に自分の好みなのでいらなければ削除して下さい。



### ビルド
Dockerfileを保存して閉じたら、次のコマンドでビルドします。
インストールの時にGPGキーがないと怒られますが、yumさんが自動で解決してくれてるのでとりあえず無視します。

```
# タグ名myenvはお好みで
$ docker build --no-cache -t myenv:latest .
```

* ちょい解説
    * --no-cacheを指定しないとyum updateとかをキャッシュで飛ばされることがあるらしい
    * . はDockerfileがあるディレクトリを指定(./Dockerfileだとダメ)
    * -t でイメージのタグを指定、お好みでOK



### 確認と実行
ビルドが完了したらコンテナを立ち上げて中に入ってみます。

```
# イメージID確認
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
myenv               latest              f522857b6ded        2 days ago          628MB
centos              centos7             e934aafc2206        2 days ago         199MB

# 動作確認
$ docker run -it --rm myenv:latest /bin/bash
[root@0c1ce5310a2d /]$
[root@0c1ce5310a2d /]$ # python3シンボリックリンクの確認
[root@0c1ce5310a2d /]$ python3
Python 3.6.5 (default, Apr 10 2018, 17:08:37)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-16)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> exit()
[root@0c1ce5310a2d /]$ # 日本語の確認
[root@0c1ce5310a2d /]$ echo 'あいうえお'
あいうえお
[root@0c1ce5310a2d /]$ # タイムゾーンの確認
[root@0c1ce5310a2d /]$ date
2018年  6月 16日 土曜日 13:48:59 JST
[root@0c1ce5310a2d /]$ exit
```

比較の為に、```docker run -it --rm centos:centos7 /bin/bash```で立ち上げたコンテナでも```echo 'あいうえお'```してみて下さい。
結果は表示されますが、echoのコマンドの部分の表示が変な感じになってると思います。
COPYとかvolumesで日本語を含むファイルを入れておいてvimで開いてみてもいいです。

コンテナの中で作ったファイルはコンテナと共に闇に消えゆくので、```docker cp```かvolumesでホスト側に残すように注意しましょう。
※ --rmオプションをつけるとexitした時にコンテナが消されるので、普通に使うときは外します。



以上、お疲れ様でした。