RHEL7にDocker EEをインストールする

仕事の関係で近くRHELにDocker EEのインストール方法を整理しておく必要に迫られる予感がしたので、以下まとめます。
インターネット非接続環境＆RHNに接続しなくてもまあまあ簡単に導入できるのでそれは便利。


■RHEL7用Dockerの入手
https://www.docker.com/docker-red-hat-enterprise-linux-rhel

まあ、購入して使うのなら（日本で買えるのか知らないですけど）月$150とかを支払って製品版を購入します。
「Try It for Free」をクリックすると1ヶ月間有効なトライアル版を入手できます。営業さんとメールのやり取りを行うといった事も無く、連絡先等を入力すればDocker EEのオフラインインストール用rpmパッケージが入手できます。

1. Trial版評価を申し込む。
![q1.png](https://qiita-image-store.s3.amazonaws.com/0/146381/c1f698f1-a45d-345a-f5a5-5f24285c7378.png)
<br/>
<br/>
2. 「Start your evaluation!」ボタンクリック後に遷移する画面の右下のURLをコピーする。多分、このURLが有効な期間が1ヶ月？<br/>
![q2.png](https://qiita-image-store.s3.amazonaws.com/0/146381/e0954782-2537-f3be-5481-caa568cac1af.png)
<br/>
<br/>
3. WebブラウザでURLにアクセスする。
![q3.png](https://qiita-image-store.s3.amazonaws.com/0/146381/466c3f44-2d7b-78ab-1394-5cfdf1193672.png)
<br/>
<br/>
4. 「導入先RHELのバージョン」→「x86_64」→「stable」→「Packages」の順にリンクを辿って、導入する docker-ee と docker-ee-selinux の rpm ファイルをダウンロードする。<br/>
今回訳有って RHEL7.2 用 docker-ee-17.03 の最新版をダウンロード（docker-ee-17.03.2.ee.6-1.el7.centos.x86_64.rpm と docker-ee-selinux-17.03.2.ee.6-1.el7.centos.noarch.rpm）。
![q4.png](https://qiita-image-store.s3.amazonaws.com/0/146381/15ca28e7-40fb-50a1-5715-24a37fa60751.png)
<br/>

■RHEL7にDockerをインストールする

RHEL上のDockerがサポートされるためにはStorageドライバがdevicemapperでdirect-lvmモードにしなきゃいけないとか知ってました？
そんなわけでDockerインストールの前にOSにlvm領域をこしらえなければいけなかったりします。

Get Docker for Red Hat Enterprise Linux
https://docs.docker.com/v17.03/engine/installation/linux/rhel/

Configure direct-lvm mode for production
https://docs.docker.com/v17.03/engine/userguide/storagedriver/device-mapper-driver/#configure-direct-lvm-mode-for-production


1. 仮想マシンに新しいディスクを追加する。<br/>
まあ、物理的に追加しても良いでしょう。
<br/>
<br/>
2. lvmを作る。追加したディスクがOSから/dev/sdbと認識されるとして、以下のコマンドを実行します。RHEL7.2には device-mapper-persistent-data、lvm2 パッケージはインストール済みではないかと思います。

```bash:(以下のコマンドを実行)
# fdisk /dev/sdb
    n↓↓↓↓↓t↓8e↓w↓
# pvcreate /dev/sdb1
# vgcreate docker /dev/sdb1
# lvcreate --wipesignatures y -n thinpool docker -l 95%VG
# lvcreate --wipesignatures y -n thinpoolmeta docker -l 1%VG
# lvconvert -y --zero n -c 512K --thinpool docker/thinpool --poolmetadata docker/thinpoolmeta
# cat > /etc/lvm/profile/docker-thinpool.profile << EOF
activation {
  thin_pool_autoextend_threshold=80
  thin_pool_autoextend_percent=20
}
EOF
# lvchange --metadataprofile docker-thinpool docker/thinpool
```
<br/>
3. docker-ee rpmファイル2つをRHEL7に送りつける。
docker-ee-17.03.2.ee.6-1.el7.centos.x86_64.rpm
docker-ee-selinux-17.03.2.ee.6-1.el7.centos.noarch.rpm
<br/>
4. docker-eeをインストールする。

```bash:(以下のコマンドを実行)
# yum install docker-ee-selinux-17.03.2.ee.6-1.el7.centos.noarch.rpm
# yum install docker-ee-17.03.2.ee.6-1.el7.centos.x86_64.rpm
# mkdir /etc/docker
```

依存パッケージとして以下が一緒にインストールされるので要準備（すべてRHEL OSのインストールディスクに含まれています）。
> audit-libs-python
> checkpolicy
> libcgroup
> libsemanage-python
> policycoreutils-python
> python-IPy
> setools-libs
> libseccomp
> libtool-ltdl

また、docker-ee-selinuxのインストール中に以下の警告が表示されますが無視できます。

```
restorecon:  lstat(/var/lib/docker) failed:  No such file or directory
warning: %post(docker-ee-selinux-17.03.2.ee.6-1.el7.centos.noarch) scriptlet failed, exit status 255
Non-fatal POSTIN scriptlet failure in rpm package docker-ee-selinux-17.03.2.ee.6-1.el7.centos.noarch
```
<br/>
5. devicemapperを設定する。

```bash:(以下のコマンドを実行)
# cat > /etc/docker/daemon.json << EOF
{
    "storage-driver": "devicemapper",
    "storage-opts": [
    "dm.thinpooldev=/dev/mapper/docker-thinpool",
    "dm.use_deferred_removal=true"
    ]
}
EOF
```
<br/>
5. dockerのサービスを有効にする。

```bash:(以下のコマンドを実行)
# systemctl enable docker
# systemctl start docker
```

<br/>
docker info とコマンドを実行してそれらしい情報が出力されればdocker-eeの導入完了。

```
# docker info
Containers: 0
 Running: 0
 Paused: 0
 Stopped: 0
Images: 0
Server Version: 17.03.2-ee-6
Storage Driver: devicemapper
 Pool Name: docker-thinpool
 Pool Blocksize: 524.3 kB
 Base Device Size: 10.74 GB
...
```
<br/>

で、まあ、試用期間1ヶ月という認識では有りますが、何かdocker infoの出力結果を見ても、docker-engine部分については一ヵ月後に突然使えなくなるという感じも無く・・まあ、一ヶ月後も環境が残っていてdocker起動しないとかいう事があったら本記事を更新します。