RHEL7 DockerRegistryレジストリ構築 Enterprise Edition ～構築編～

#やること
EC2にDockerレジストリを構築。
Docker Enterprise Edition 2.1を採用。
Dockerレジストリソフトは、DTRを採用。
サーバはAWSに構築。

#用語整理
・Dockerレジストリ・・・Dockerイメージを保存する場所
・DockerHub・・・公式のDockerレジストリ(https://hub.docker.com/)
・DTR(Docker Trusted Registry)・・・今回構築するプライベートなDockerレジストリ
・UCP(Universal Control Plane)・・・DTRを操作するUI等を含むもの

イメージ図
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/174900/e028ec9a-cd4f-f2b9-1860-18eb067bd419.png)

#バージョンマトリックス
|OS Distribution(x86_64) |Enterprise Engine |UCP|DTR|Storage Driver|Orchestration|DTR Storage Backend|
|:--:|:--:|:--:|:--:|:--:|:--:|:--:|
|RHEL 7.4 |18.09.x |3.1.x |2.6.x |overlay2, devicemapper |Swarm mode, Kubernetes |NFSv4, NFSv3, Amazon S3, S3 Compliant Alternatives, Azure Storage (Blob), Google Cloud Storage, OpenStack Swift, Local Filesystem| |
|RHEL 7.5|18.09.x|3.1.x|2.6.x|overlay2|Swarm mode, Kubernetes|NFSv4, NFSv3, Amazon S3, S3 Compliant Alternatives, Azure Storage (Blob), Google Cloud Storage, OpenStack Swift, Local Filesystem|
|RHEL 7.6|18.09.x|3.1.x starting with 3.1.3|2.6.x starting with 2.6.2|overlay2|Swarm mode, Kubernetes|NFSv4, NFSv3, Amazon S3, S3 Compliant Alternatives, Azure Storage (Blob), Google Cloud Storage, OpenStack Swift, Local Filesystem|


#構築手順
1.EC2構築
2.DockerEngineEEインストール
3.UCPインストール
4.DTRインストール

#1.EC2構築
AMI：RHEL-7.5_HVM_GA-20180322-x86_64-1-Hourly2-GP2 (ami-6b0d5f0d)
インスタンスタイプ：t2.2xlarge

※DTR要件(最低限/推奨)
メモリ：16GB/16GB
CPU：2CPU/4CPU
Disk：10GB/25-100GB
参考URL:https://docs.docker.com/ee/dtr/admin/install/system-requirements/

#2.DockerEngineEEインストール
DockerEEはDockerHubから取得できます。
EEは1ヶ月間だけ、試用版で使えますので、ダウンロードします。

https://hub.docker.com/search/?q=&type=edition&offering=enterprise
※アカウント必須

・上記URLアクセス後、
Docker Enterprise (Red Hat Enterprise Linux)を選択。
Start 1 Month Trialを選択。
License Keyを選択して、ダウンロードします。
Copy and paste this URL to download your EditonがDockerEEのリポジトリのため、コピーしておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/174900/7c73bf23-6acb-af56-d200-79d7ac871941.png)

ライセンスのダウンロードが終わったので、インストールを行っていきます。

```
$ sudo -s
# export DOCKERURL="リポジトリのURL"
# sh -c 'echo "$DOCKERURL/rhel" > /etc/yum/vars/dockerurl'
# sh -c 'echo "7.5" > /etc/yum/vars/dockerosversion'
# yum install -y yum-utils device-mapper-persistent-data lvm2
Loaded plugins: amazon-id, rhui-lb, search-disabled-repos
rhui-REGION-client-config-server-7                                                   | 2.9 kB  00:00:00
rhui-REGION-rhel-server-releases                                                     | 3.5 kB  00:00:00
rhui-REGION-rhel-server-rh-common                                                    | 3.8 kB  00:00:00
(1/7): rhui-REGION-client-config-server-7/x86_64/primary_db                          | 3.3 kB  00:00:00
(2/7): rhui-REGION-rhel-server-rh-common/7Server/x86_64/group                        |  124 B  00:00:00
(3/7): rhui-REGION-rhel-server-releases/7Server/x86_64/group                         | 774 kB  00:00:00
(4/7): rhui-REGION-rhel-server-rh-common/7Server/x86_64/primary_db                   | 117 kB  00:00:00
(5/7): rhui-REGION-rhel-server-rh-common/7Server/x86_64/updateinfo                   |  33 kB  00:00:00
(6/7): rhui-REGION-rhel-server-releases/7Server/x86_64/updateinfo                    | 3.2 MB  00:00:00
(7/7): rhui-REGION-rhel-server-releases/7Server/x86_64/primary_db                    |  57 MB  00:00:01
Resolving Dependencies
--> Running transaction check
---> Package device-mapper-persistent-data.x86_64 0:0.7.3-3.el7 will be installed
--> Processing Dependency: libaio.so.1(LIBAIO_0.1)(64bit) for package: device-mapper-persistent-data-0.7.3-3.el7.x86_64
--> Processing Dependency: libaio.so.1(LIBAIO_0.4)(64bit) for package: device-mapper-persistent-data-0.7.3-3.el7.x86_64
--> Processing Dependency: libaio.so.1()(64bit) for package: device-mapper-persistent-data-0.7.3-3.el7.x86_64
---> Package lvm2.x86_64 7:2.02.180-10.el7_6.8 will be installed
--> Processing Dependency: lvm2-libs = 7:2.02.180-10.el7_6.8 for package: 7:lvm2-2.02.180-10.el7_6.8.x86_64
--> Processing Dependency: libdevmapper-event.so.1.02(Base)(64bit) for package: 7:lvm2-2.02.180-10.el7_6.8.x86_64
--> Processing Dependency: liblvm2app.so.2.2(Base)(64bit) for package: 7:lvm2-2.02.180-10.el7_6.8.x86_64
--> Processing Dependency: libdevmapper-event.so.1.02()(64bit) for package: 7:lvm2-2.02.180-10.el7_6.8.x86_64
--> Processing Dependency: liblvm2app.so.2.2()(64bit) for package: 7:lvm2-2.02.180-10.el7_6.8.x86_64
---> Package yum-utils.noarch 0:1.1.31-45.el7 will be updated
---> Package yum-utils.noarch 0:1.1.31-50.el7 will be an update
--> Running transaction check
---> Package device-mapper-event-libs.x86_64 7:1.02.149-10.el7_6.8 will be installed
---> Package libaio.x86_64 0:0.3.109-13.el7 will be installed
---> Package lvm2-libs.x86_64 7:2.02.180-10.el7_6.8 will be installed
--> Processing Dependency: device-mapper-event = 7:1.02.149-10.el7_6.8 for package: 7:lvm2-libs-2.02.180-10.el7_6.8.x86_64
--> Running transaction check
---> Package device-mapper-event.x86_64 7:1.02.149-10.el7_6.8 will be installed
--> Processing Dependency: device-mapper = 7:1.02.149-10.el7_6.8 for package: 7:device-mapper-event-1.02.149-10.el7_6.8.x86_64
--> Running transaction check
---> Package device-mapper.x86_64 7:1.02.146-4.el7 will be updated
--> Processing Dependency: device-mapper = 7:1.02.146-4.el7 for package: 7:device-mapper-libs-1.02.146-4.el7.x86_64
---> Package device-mapper.x86_64 7:1.02.149-10.el7_6.8 will be an update
--> Running transaction check
---> Package device-mapper-libs.x86_64 7:1.02.146-4.el7 will be updated
---> Package device-mapper-libs.x86_64 7:1.02.149-10.el7_6.8 will be an update
--> Finished Dependency Resolution

Dependencies Resolved

============================================================================================================
 Package                         Arch     Version                  Repository                          Size
============================================================================================================
Installing:
 device-mapper-persistent-data   x86_64   0.7.3-3.el7              rhui-REGION-rhel-server-releases   405 k
 lvm2                            x86_64   7:2.02.180-10.el7_6.8    rhui-REGION-rhel-server-releases   1.3 M
Updating:
 yum-utils                       noarch   1.1.31-50.el7            rhui-REGION-rhel-server-releases   121 k
Installing for dependencies:
 device-mapper-event             x86_64   7:1.02.149-10.el7_6.8    rhui-REGION-rhel-server-releases   189 k
 device-mapper-event-libs        x86_64   7:1.02.149-10.el7_6.8    rhui-REGION-rhel-server-releases   188 k
 libaio                          x86_64   0.3.109-13.el7           rhui-REGION-rhel-server-releases    24 k
 lvm2-libs                       x86_64   7:2.02.180-10.el7_6.8    rhui-REGION-rhel-server-releases   1.1 M
Updating for dependencies:
 device-mapper                   x86_64   7:1.02.149-10.el7_6.8    rhui-REGION-rhel-server-releases   293 k
 device-mapper-libs              x86_64   7:1.02.149-10.el7_6.8    rhui-REGION-rhel-server-releases   321 k

Transaction Summary
============================================================================================================
Install  2 Packages (+4 Dependent packages)
Upgrade  1 Package  (+2 Dependent packages)

Total download size: 3.9 M
Downloading packages:
Delta RPMs disabled because /usr/bin/applydeltarpm not installed.
(1/9): device-mapper-1.02.149-10.el7_6.8.x86_64.rpm                                  | 293 kB  00:00:00
(2/9): device-mapper-event-1.02.149-10.el7_6.8.x86_64.rpm                            | 189 kB  00:00:00
(3/9): device-mapper-event-libs-1.02.149-10.el7_6.8.x86_64.rpm                       | 188 kB  00:00:00
(4/9): device-mapper-libs-1.02.149-10.el7_6.8.x86_64.rpm                             | 321 kB  00:00:00
(5/9): device-mapper-persistent-data-0.7.3-3.el7.x86_64.rpm                          | 405 kB  00:00:00
(6/9): libaio-0.3.109-13.el7.x86_64.rpm                                              |  24 kB  00:00:00
(7/9): lvm2-libs-2.02.180-10.el7_6.8.x86_64.rpm                                      | 1.1 MB  00:00:00
(8/9): lvm2-2.02.180-10.el7_6.8.x86_64.rpm                                           | 1.3 MB  00:00:00
(9/9): yum-utils-1.1.31-50.el7.noarch.rpm                                            | 121 kB  00:00:00
------------------------------------------------------------------------------------------------------------
Total                                                                       7.1 MB/s | 3.9 MB  00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Updating   : 7:device-mapper-1.02.149-10.el7_6.8.x86_64                                              1/12
  Updating   : 7:device-mapper-libs-1.02.149-10.el7_6.8.x86_64                                         2/12
  Installing : 7:device-mapper-event-libs-1.02.149-10.el7_6.8.x86_64                                   3/12
  Installing : libaio-0.3.109-13.el7.x86_64                                                            4/12
  Installing : device-mapper-persistent-data-0.7.3-3.el7.x86_64                                        5/12
  Installing : 7:device-mapper-event-1.02.149-10.el7_6.8.x86_64                                        6/12
  Installing : 7:lvm2-libs-2.02.180-10.el7_6.8.x86_64                                                  7/12
  Installing : 7:lvm2-2.02.180-10.el7_6.8.x86_64                                                       8/12
  Updating   : yum-utils-1.1.31-50.el7.noarch                                                          9/12
  Cleanup    : yum-utils-1.1.31-45.el7.noarch                                                         10/12
  Cleanup    : 7:device-mapper-1.02.146-4.el7.x86_64                                                  11/12
  Cleanup    : 7:device-mapper-libs-1.02.146-4.el7.x86_64                                             12/12
  Verifying  : device-mapper-persistent-data-0.7.3-3.el7.x86_64                                        1/12
  Verifying  : 7:device-mapper-event-libs-1.02.149-10.el7_6.8.x86_64                                   2/12
  Verifying  : 7:device-mapper-libs-1.02.149-10.el7_6.8.x86_64                                         3/12
  Verifying  : yum-utils-1.1.31-50.el7.noarch                                                          4/12
  Verifying  : 7:lvm2-2.02.180-10.el7_6.8.x86_64                                                       5/12
  Verifying  : 7:lvm2-libs-2.02.180-10.el7_6.8.x86_64                                                  6/12
  Verifying  : libaio-0.3.109-13.el7.x86_64                                                            7/12
  Verifying  : 7:device-mapper-1.02.149-10.el7_6.8.x86_64                                              8/12
  Verifying  : 7:device-mapper-event-1.02.149-10.el7_6.8.x86_64                                        9/12
  Verifying  : 7:device-mapper-1.02.146-4.el7.x86_64                                                  10/12
  Verifying  : yum-utils-1.1.31-45.el7.noarch                                                         11/12
  Verifying  : 7:device-mapper-libs-1.02.146-4.el7.x86_64                                             12/12

Installed:
  device-mapper-persistent-data.x86_64 0:0.7.3-3.el7            lvm2.x86_64 7:2.02.180-10.el7_6.8

Dependency Installed:
  device-mapper-event.x86_64 7:1.02.149-10.el7_6.8   device-mapper-event-libs.x86_64 7:1.02.149-10.el7_6.8
  libaio.x86_64 0:0.3.109-13.el7                     lvm2-libs.x86_64 7:2.02.180-10.el7_6.8

Updated:
  yum-utils.noarch 0:1.1.31-50.el7

Dependency Updated:
  device-mapper.x86_64 7:1.02.149-10.el7_6.8         device-mapper-libs.x86_64 7:1.02.149-10.el7_6.8

Complete!
#

```

Dockerエンジンのインストールには、
標準リポジトリのみだと足りないため、
拡張リポジトリの有効化をします。

```
# yum-config-manager --enable rhel-7-server-extras-rpms
Loaded plugins: amazon-id, rhui-lb
#
```

以下はAWS独自の手順です。
拡張のリポジトリを有効化します。
クラウドベンダによって手順は違います。

```
# yum-config-manager --enable rhui-REGION-rhel-server-extras
Loaded plugins: amazon-id, rhui-lb
=================================== repo: rhui-REGION-rhel-server-extras =================================
[rhui-REGION-rhel-server-extras]
async = True
bandwidth = 0
base_persistdir = /var/lib/yum/repos/x86_64/7Server
baseurl =
cache = 0
cachedir = /var/cache/yum/x86_64/7Server/rhui-REGION-rhel-server-extras
check_config_file_age = True
compare_providers_priority = 80
cost = 1000
deltarpm_metadata_percentage = 100
deltarpm_percentage =
enabled = 1
enablegroups = True
exclude =
failovermethod = priority
ftp_disable_epsv = False
gpgcadir = /var/lib/yum/repos/x86_64/7Server/rhui-REGION-rhel-server-extras/gpgcadir
gpgcakey =
gpgcheck = True
gpgdir = /var/lib/yum/repos/x86_64/7Server/rhui-REGION-rhel-server-extras/gpgdir
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
hdrdir = /var/cache/yum/x86_64/7Server/rhui-REGION-rhel-server-extras/headers
http_caching = all
includepkgs =
ip_resolve =
keepalive = True
keepcache = False
mddownloadpolicy = sqlite
mdpolicy = group:small
mediaid =
metadata_expire = 21600
metadata_expire_filter = read-only:present
metalink =
minrate = 0
mirrorlist = https://rhui2-cds01.REGION.aws.ce.redhat.com/pulp/mirror/content/dist/rhel/rhui/server/7/7Ser  r/x86_64/extras/os
mirrorlist_expire = 86400
name = Red Hat Enterprise Linux Server 7 Extra(RPMs)
old_base_cache_dir =
password =
persistdir = /var/lib/yum/repos/x86_64/7Server/rhui-REGION-rhel-server-extras
pkgdir = /var/cache/yum/x86_64/7Server/rhui-REGION-rhel-server-extras/packages
proxy = False
proxy_dict =
proxy_password =
proxy_username =
repo_gpgcheck = False
retries = 10
skip_if_unavailable = False
ssl_check_cert_permissions = True
sslcacert = /etc/pki/rhui/cdn.redhat.com-chain.crt
sslclientcert = /etc/pki/rhui/product/content-rhel7.crt
sslclientkey = /etc/pki/rhui/content-rhel7.key
sslverify = True
throttle = 0
timeout = 30.0
ui_id = rhui-REGION-rhel-server-extras/7Server/x86_64
ui_repoid_vars = releasever,
   basearch
username =
```

DockerEngine用のリポジトリ有効化します。

```
# yum-config-manager --add-repo "$DOCKERURL/rhel/docker-ee.repo"
Loaded plugins: amazon-id, rhui-lb
adding repo from: https://storebits.docker.com/ee/rhel/sub-93c2d407-d67d-466a-b84f-0f4fe6d1a37f/rhel/docker-ee.repo
grabbing file https://storebits.docker.com/ee/rhel/sub-93c2d407-d67d-466a-b84f-0f4fe6d1a37f/rhel/docker-ee.repo to /etc/yum.repos.d/docker-ee.repo
repo saved to /etc/yum.repos.d/docker-ee.repo
#
```

リポジトリの準備が終わったので、インストールをします。

```
# yum -y install docker-ee docker-ee-cli containerd.io
Loaded plugins: amazon-id, rhui-lb, search-disabled-repos
docker-ee-stable-18.09                                                               | 3.5 kB  00:00:00
rhui-REGION-rhel-server-extras                                                       | 3.4 kB  00:00:00
rhui-REGION-rhel-server-releases                                                     | 3.5 kB  00:00:00
rhui-REGION-rhel-server-rh-common                                                    | 3.8 kB  00:00:00
(1/5): rhui-REGION-rhel-server-extras/7Server/x86_64/group                           |  124 B  00:00:00
(2/5): rhui-REGION-rhel-server-extras/7Server/x86_64/updateinfo                      | 200 kB  00:00:00
(3/5): rhui-REGION-rhel-server-extras/7Server/x86_64/primary_db                      | 536 kB  00:00:00
(4/5): docker-ee-stable-18.09/x86_64/updateinfo                                      |   55 B  00:00:01
(5/5): docker-ee-stable-18.09/x86_64/primary_db                                      |  14 kB  00:00:01
Resolving Dependencies
--> Running transaction check
---> Package containerd.io.x86_64 0:1.2.6-3.3.el7 will be installed
--> Processing Dependency: container-selinux >= 2:2.74 for package: containerd.io-1.2.6-3.3.el7.x86_64
---> Package docker-ee.x86_64 3:18.09.7-3.el7 will be installed
---> Package docker-ee-cli.x86_64 1:18.09.7-3.el7 will be installed
--> Running transaction check
---> Package container-selinux.noarch 2:2.99-1.el7_6 will be installed
--> Processing Dependency: selinux-policy >= 3.13.1-216.el7 for package: 2:container-selinux-2.99-1.el7_6.noarch
--> Processing Dependency: selinux-policy-base >= 3.13.1-216.el7 for package: 2:container-selinux-2.99-1.el7_6.noarch
--> Processing Dependency: selinux-policy-targeted >= 3.13.1-216.el7 for package: 2:container-selinux-2.99-1.el7_6.noarch
--> Running transaction check
---> Package selinux-policy.noarch 0:3.13.1-192.el7 will be updated
---> Package selinux-policy.noarch 0:3.13.1-229.el7_6.12 will be an update
--> Processing Dependency: libsemanage >= 2.5-13 for package: selinux-policy-3.13.1-229.el7_6.12.noarch
--> Processing Dependency: policycoreutils >= 2.5-24 for package: selinux-policy-3.13.1-229.el7_6.12.noarch
---> Package selinux-policy-targeted.noarch 0:3.13.1-192.el7 will be updated
---> Package selinux-policy-targeted.noarch 0:3.13.1-229.el7_6.12 will be an update
--> Running transaction check
---> Package libsemanage.x86_64 0:2.5-11.el7 will be updated
--> Processing Dependency: libsemanage = 2.5-11.el7 for package: libsemanage-python-2.5-11.el7.x86_64
---> Package libsemanage.x86_64 0:2.5-14.el7 will be an update
--> Processing Dependency: libselinux >= 2.5-14 for package: libsemanage-2.5-14.el7.x86_64
--> Processing Dependency: libsepol >= 2.5-10 for package: libsemanage-2.5-14.el7.x86_64
---> Package policycoreutils.x86_64 0:2.5-22.el7 will be updated
--> Processing Dependency: policycoreutils = 2.5-22.el7 for package: policycoreutils-python-2.5-22.el7.x86_64
---> Package policycoreutils.x86_64 0:2.5-29.el7_6.1 will be an update
--> Processing Dependency: libselinux-utils >= 2.5-14 for package: policycoreutils-2.5-29.el7_6.1.x86_64
--> Running transaction check
---> Package libselinux.x86_64 0:2.5-12.el7 will be updated
--> Processing Dependency: libselinux(x86-64) = 2.5-12.el7 for package: libselinux-python-2.5-12.el7.x86_64
---> Package libselinux.x86_64 0:2.5-14.1.el7 will be an update
---> Package libselinux-utils.x86_64 0:2.5-12.el7 will be updated
---> Package libselinux-utils.x86_64 0:2.5-14.1.el7 will be an update
---> Package libsemanage-python.x86_64 0:2.5-11.el7 will be updated
---> Package libsemanage-python.x86_64 0:2.5-14.el7 will be an update
---> Package libsepol.x86_64 0:2.5-8.1.el7 will be updated
---> Package libsepol.x86_64 0:2.5-10.el7 will be an update
---> Package policycoreutils-python.x86_64 0:2.5-22.el7 will be updated
---> Package policycoreutils-python.x86_64 0:2.5-29.el7_6.1 will be an update
--> Processing Dependency: setools-libs >= 3.3.8-4 for package: policycoreutils-python-2.5-29.el7_6.1.x86_64
--> Running transaction check
---> Package libselinux-python.x86_64 0:2.5-12.el7 will be updated
---> Package libselinux-python.x86_64 0:2.5-14.1.el7 will be an update
---> Package setools-libs.x86_64 0:3.3.8-2.el7 will be updated
---> Package setools-libs.x86_64 0:3.3.8-4.el7 will be an update
--> Finished Dependency Resolution

Dependencies Resolved

============================================================================================================
 Package                     Arch       Version                  Repository                            Size
============================================================================================================
Installing:
 containerd.io               x86_64     1.2.6-3.3.el7            docker-ee-stable-18.09                26 M
 docker-ee                   x86_64     3:18.09.7-3.el7          docker-ee-stable-18.09                21 M
 docker-ee-cli               x86_64     1:18.09.7-3.el7          docker-ee-stable-18.09                15 M
Installing for dependencies:
 container-selinux           noarch     2:2.99-1.el7_6           rhui-REGION-rhel-server-extras        39 k
Updating for dependencies:
 libselinux                  x86_64     2.5-14.1.el7             rhui-REGION-rhel-server-releases     162 k
 libselinux-python           x86_64     2.5-14.1.el7             rhui-REGION-rhel-server-releases     236 k
 libselinux-utils            x86_64     2.5-14.1.el7             rhui-REGION-rhel-server-releases     152 k
 libsemanage                 x86_64     2.5-14.el7               rhui-REGION-rhel-server-releases     151 k
 libsemanage-python          x86_64     2.5-14.el7               rhui-REGION-rhel-server-releases     113 k
 libsepol                    x86_64     2.5-10.el7               rhui-REGION-rhel-server-releases     297 k
 policycoreutils             x86_64     2.5-29.el7_6.1           rhui-REGION-rhel-server-releases     916 k
 policycoreutils-python      x86_64     2.5-29.el7_6.1           rhui-REGION-rhel-server-releases     456 k
 selinux-policy              noarch     3.13.1-229.el7_6.12      rhui-REGION-rhel-server-releases     484 k
 selinux-policy-targeted     noarch     3.13.1-229.el7_6.12      rhui-REGION-rhel-server-releases     6.9 M
 setools-libs                x86_64     3.3.8-4.el7              rhui-REGION-rhel-server-releases     620 k

Transaction Summary
============================================================================================================
Install  3 Packages (+ 1 Dependent package)
Upgrade             ( 11 Dependent packages)

Total download size: 72 M
Downloading packages:
Delta RPMs disabled because /usr/bin/applydeltarpm not installed.
(1/15): container-selinux-2.99-1.el7_6.noarch.rpm                                    |  39 kB  00:00:00
warning: /var/cache/yum/x86_64/7Server/docker-ee-stable-18.09/packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm: Header V4 RSA/SHA512 Signature, key ID 76682bc9: NOKEY
Public key for containerd.io-1.2.6-3.3.el7.x86_64.rpm is not installed
(2/15): containerd.io-1.2.6-3.3.el7.x86_64.rpm                                       |  26 MB  00:00:03
(3/15): docker-ee-18.09.7-3.el7.x86_64.rpm                                           |  21 MB  00:00:03
(4/15): libselinux-2.5-14.1.el7.x86_64.rpm                                           | 162 kB  00:00:00
(5/15): libselinux-utils-2.5-14.1.el7.x86_64.rpm                                     | 152 kB  00:00:00
(6/15): libselinux-python-2.5-14.1.el7.x86_64.rpm                                    | 236 kB  00:00:00
(7/15): libsemanage-2.5-14.el7.x86_64.rpm                                            | 151 kB  00:00:00
(8/15): libsemanage-python-2.5-14.el7.x86_64.rpm                                     | 113 kB  00:00:00
(9/15): libsepol-2.5-10.el7.x86_64.rpm                                               | 297 kB  00:00:00
(10/15): policycoreutils-2.5-29.el7_6.1.x86_64.rpm                                   | 916 kB  00:00:00
(11/15): policycoreutils-python-2.5-29.el7_6.1.x86_64.rpm                            | 456 kB  00:00:00
(12/15): selinux-policy-3.13.1-229.el7_6.12.noarch.rpm                               | 484 kB  00:00:00
(13/15): setools-libs-3.3.8-4.el7.x86_64.rpm                                         | 620 kB  00:00:00
(14/15): selinux-policy-targeted-3.13.1-229.el7_6.12.noarch.rpm                      | 6.9 MB  00:00:00
(15/15): docker-ee-cli-18.09.7-3.el7.x86_64.rpm                                      |  15 MB  00:00:02
------------------------------------------------------------------------------------------------------------
Total                                                                        11 MB/s |  72 MB  00:00:06
Retrieving key from https://storebits.docker.com/ee/rhel/sub-93c2d407-d67d-466a-b84f-0f4fe6d1a37f/rhel/gpg
Importing GPG key 0x76682BC9:
 Userid     : "Docker Release (EE rpm) <docker@docker.com>"
 Fingerprint: 77fe da13 1a83 1d29 a418 d3e8 99e5 ff2e 7668 2bc9
 From       : https://storebits.docker.com/ee/rhel/sub-93c2d407-d67d-466a-b84f-0f4fe6d1a37f/rhel/gpg
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Updating   : libsepol-2.5-10.el7.x86_64                                                              1/26
  Updating   : libselinux-2.5-14.1.el7.x86_64                                                          2/26
  Updating   : libsemanage-2.5-14.el7.x86_64                                                           3/26
  Updating   : libselinux-utils-2.5-14.1.el7.x86_64                                                    4/26
  Updating   : policycoreutils-2.5-29.el7_6.1.x86_64                                                   5/26
  Updating   : selinux-policy-3.13.1-229.el7_6.12.noarch                                               6/26
  Updating   : selinux-policy-targeted-3.13.1-229.el7_6.12.noarch                                      7/26
  Updating   : libsemanage-python-2.5-14.el7.x86_64                                                    8/26
  Updating   : setools-libs-3.3.8-4.el7.x86_64                                                         9/26
  Updating   : libselinux-python-2.5-14.1.el7.x86_64                                                  10/26
  Updating   : policycoreutils-python-2.5-29.el7_6.1.x86_64                                           11/26
  Installing : 2:container-selinux-2.99-1.el7_6.noarch                                                12/26
  Installing : containerd.io-1.2.6-3.3.el7.x86_64                                                     13/26
  Installing : 1:docker-ee-cli-18.09.7-3.el7.x86_64                                                   14/26
  Installing : 3:docker-ee-18.09.7-3.el7.x86_64                                                       15/26
  Cleanup    : selinux-policy-targeted-3.13.1-192.el7.noarch                                          16/26
  Cleanup    : policycoreutils-python-2.5-22.el7.x86_64                                               17/26
  Cleanup    : selinux-policy-3.13.1-192.el7.noarch                                                   18/26
  Cleanup    : policycoreutils-2.5-22.el7.x86_64                                                      19/26
  Cleanup    : libselinux-utils-2.5-12.el7.x86_64                                                     20/26
  Cleanup    : setools-libs-3.3.8-2.el7.x86_64                                                        21/26
  Cleanup    : libselinux-python-2.5-12.el7.x86_64                                                    22/26
  Cleanup    : libsemanage-python-2.5-11.el7.x86_64                                                   23/26
  Cleanup    : libsemanage-2.5-11.el7.x86_64                                                          24/26
  Cleanup    : libselinux-2.5-12.el7.x86_64                                                           25/26
  Cleanup    : libsepol-2.5-8.1.el7.x86_64                                                            26/26
  Verifying  : policycoreutils-2.5-29.el7_6.1.x86_64                                                   1/26
  Verifying  : 1:docker-ee-cli-18.09.7-3.el7.x86_64                                                    2/26
  Verifying  : setools-libs-3.3.8-4.el7.x86_64                                                         3/26
  Verifying  : selinux-policy-targeted-3.13.1-229.el7_6.12.noarch                                      4/26
  Verifying  : selinux-policy-3.13.1-229.el7_6.12.noarch                                               5/26
  Verifying  : policycoreutils-python-2.5-29.el7_6.1.x86_64                                            6/26
  Verifying  : libsemanage-python-2.5-14.el7.x86_64                                                    7/26
  Verifying  : libsemanage-2.5-14.el7.x86_64                                                           8/26
  Verifying  : libsepol-2.5-10.el7.x86_64                                                              9/26
  Verifying  : containerd.io-1.2.6-3.3.el7.x86_64                                                     10/26
  Verifying  : libselinux-python-2.5-14.1.el7.x86_64                                                  11/26
  Verifying  : libselinux-utils-2.5-14.1.el7.x86_64                                                   12/26
  Verifying  : 2:container-selinux-2.99-1.el7_6.noarch                                                13/26
  Verifying  : libselinux-2.5-14.1.el7.x86_64                                                         14/26
  Verifying  : 3:docker-ee-18.09.7-3.el7.x86_64                                                       15/26
  Verifying  : libsemanage-python-2.5-11.el7.x86_64                                                   16/26
  Verifying  : libsemanage-2.5-11.el7.x86_64                                                          17/26
  Verifying  : libselinux-python-2.5-12.el7.x86_64                                                    18/26
  Verifying  : setools-libs-3.3.8-2.el7.x86_64                                                        19/26
  Verifying  : policycoreutils-2.5-22.el7.x86_64                                                      20/26
  Verifying  : policycoreutils-python-2.5-22.el7.x86_64                                               21/26
  Verifying  : selinux-policy-targeted-3.13.1-192.el7.noarch                                          22/26
  Verifying  : libsepol-2.5-8.1.el7.x86_64                                                            23/26
  Verifying  : selinux-policy-3.13.1-192.el7.noarch                                                   24/26
  Verifying  : libselinux-2.5-12.el7.x86_64                                                           25/26
  Verifying  : libselinux-utils-2.5-12.el7.x86_64                                                     26/26

Installed:
  containerd.io.x86_64 0:1.2.6-3.3.el7                   docker-ee.x86_64 3:18.09.7-3.el7
  docker-ee-cli.x86_64 1:18.09.7-3.el7

Dependency Installed:
  container-selinux.noarch 2:2.99-1.el7_6

Dependency Updated:
  libselinux.x86_64 0:2.5-14.1.el7                 libselinux-python.x86_64 0:2.5-14.1.el7
  libselinux-utils.x86_64 0:2.5-14.1.el7           libsemanage.x86_64 0:2.5-14.el7
  libsemanage-python.x86_64 0:2.5-14.el7           libsepol.x86_64 0:2.5-10.el7
  policycoreutils.x86_64 0:2.5-29.el7_6.1          policycoreutils-python.x86_64 0:2.5-29.el7_6.1
  selinux-policy.noarch 0:3.13.1-229.el7_6.12      selinux-policy-targeted.noarch 0:3.13.1-229.el7_6.12
  setools-libs.x86_64 0:3.3.8-4.el7

Complete!
#
```

これで完了。
Dockerサービスを起動させましょう。

```
# systemctl start docker
# systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
   Active: active (running) since Sat 2019-07-06 04:49:42 UTC; 4s ago
     Docs: https://docs.docker.com
 Main PID: 2341 (dockerd)
    Tasks: 8
   Memory: 31.7M
   CGroup: /system.slice/docker.service
           mq2341 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

Jul 06 04:49:42 ip-10-0-0-51.ap-northeast-1.compute.internal dockerd[2341]: time="2019-07-06T04:49:42.52..."
Jul 06 04:49:42 ip-10-0-0-51.ap-northeast-1.compute.internal dockerd[2341]: time="2019-07-06T04:49:42.52..."
Jul 06 04:49:42 ip-10-0-0-51.ap-northeast-1.compute.internal dockerd[2341]: time="2019-07-06T04:49:42.68..."
Jul 06 04:49:42 ip-10-0-0-51.ap-northeast-1.compute.internal dockerd[2341]: time="2019-07-06T04:49:42.76..."
Jul 06 04:49:42 ip-10-0-0-51.ap-northeast-1.compute.internal dockerd[2341]: time="2019-07-06T04:49:42.81..."
Jul 06 04:49:42 ip-10-0-0-51.ap-northeast-1.compute.internal dockerd[2341]: time="2019-07-06T04:49:42.82...7
Jul 06 04:49:42 ip-10-0-0-51.ap-northeast-1.compute.internal dockerd[2341]: time="2019-07-06T04:49:42.82..."
Jul 06 04:49:42 ip-10-0-0-51.ap-northeast-1.compute.internal dockerd[2341]: time="2019-07-06T04:49:42.82..."
Jul 06 04:49:42 ip-10-0-0-51.ap-northeast-1.compute.internal dockerd[2341]: time="2019-07-06T04:49:42.86..."
Jul 06 04:49:42 ip-10-0-0-51.ap-northeast-1.compute.internal systemd[1]: Started Docker Application Cont....
Hint: Some lines were ellipsized, use -l to show in full.
#
```

せっかくなので、コンテナ立ち上げテスト。
ubuntuを立ち上げます。

```
# docker run -it ubuntu bash
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
5b7339215d1d: Pull complete
14ca88e9f672: Pull complete
a31c3b1caad4: Pull complete
b054a26005b7: Pull complete
Digest: sha256:9b1702dcfe32c873a770a32cfd306dd7fc1c4fd134adfb783db68defc8894b3c
Status: Downloaded newer image for ubuntu:latest
root@13841ed1810a:/#
root@13841ed1810a:/# exit
exit
#
```

これでDockerEEは終了です。

#3.UCPインストール
まずは、UCPのコンテナイメージをDockerHubからpullします。

```
# docker image pull docker/ucp:3.1.8
3.1.8: Pulling from docker/ucp
c87736221ed0: Pull complete
831158f6c3f0: Pull complete
7eaca31ce090: Pull complete
Digest: sha256:048414d9d3fd5cc93b3a762582c2cea73b94ef5449072b16231f13b9e355c1e4
Status: Downloaded newer image for docker/ucp:3.1.8
#
```

イメージをpullしたので、コンテナを立ち上げます。

```
# docker container run --rm -it --name ucp \
>   -v /var/run/docker.sock:/var/run/docker.sock \
>   docker/ucp:3.1.8 install \
>   --host-address ＜自分のIPアドレス＞ \
>   --interactive
INFO[0000] Your engine version 18.09.7, build b81f474 (3.10.0-862.el7.x86_64) is compatible with UCP 3.1.8 (b22346c)
Admin Username: ＜ユーザー名＞
Admin Password: ＜パスワード＞
Confirm Admin Password: ＜パスワード＞
INFO[0031] Pulling required images... (this may take a while)
INFO[0031] Pulling docker/ucp-etcd:3.1.8
INFO[0036] Pulling docker/ucp-agent:3.1.8
INFO[0040] Pulling docker/ucp-kube-compose:3.1.8
INFO[0044] Pulling docker/ucp-hyperkube:3.1.8
INFO[0059] Pulling docker/ucp-kube-dns:3.1.8
INFO[0063] Pulling docker/ucp-metrics:3.1.8
INFO[0068] Pulling docker/ucp-auth:3.1.8
INFO[0072] Pulling docker/ucp-azure-ip-allocator:3.1.8
INFO[0075] Pulling docker/ucp-interlock-extension:3.1.8
INFO[0079] Pulling docker/ucp-interlock-proxy:3.1.8
INFO[0083] Pulling docker/ucp-calico-kube-controllers:3.1.8
INFO[0091] Pulling docker/ucp-calico-node:3.1.8
INFO[0097] Pulling docker/ucp-dsinfo:3.1.8
INFO[0113] Pulling docker/ucp-swarm:3.1.8
INFO[0116] Pulling docker/ucp-auth-store:3.1.8
INFO[0121] Pulling docker/ucp-kube-dns-sidecar:3.1.8
INFO[0125] Pulling docker/ucp-interlock:3.1.8
INFO[0128] Pulling docker/ucp-calico-cni:3.1.8
INFO[0133] Pulling docker/ucp-kube-dns-dnsmasq-nanny:3.1.8
INFO[0138] Pulling docker/ucp-pause:3.1.8
INFO[0141] Pulling docker/ucp-kube-compose-api:3.1.8
INFO[0146] Pulling docker/ucp-cfssl:3.1.8
INFO[0149] Pulling docker/ucp-controller:3.1.8
INFO[0157] Pulling docker/ucp-compose:3.1.8
We detected the following hostnames/IP addresses for this system [ip-10-0-0-51.ap-northeast-1.compute.internal 127.0.0.1 172.17.0.1 10.0.0.51]

You may enter additional aliases (SANs) now or press enter to proceed with the above list.
Additional aliases:
INFO[0000] Initializing a new swarm at 10.0.0.51
INFO[0007] Installing UCP with host address 10.0.0.51 - If this is incorrect, please specify an alternative address with the '--host-address' flag
INFO[0007] Deploying UCP Service...
INFO[0077] Installation completed on ip-10-0-0-51.ap-northeast-1.compute.internal (node gfr42419cmfwz2xt57wgf8wmh)
INFO[0077] UCP Instance ID: izfuh7vqgm5z9v76473dckqvi
INFO[0077] UCP Server SSL: SHA-256 Fingerprint=54:84:37:11:3A:64:A4:33:73:03:21:E7:C4:BE:9E:97:8B:3B:09:C1:FC:99:5C:06:08:BC:E7:0B:4E:FD:B1:FC
INFO[0077] Login to UCP at https://10.0.0.51:443
INFO[0077] Username: 
INFO[0077] Password: (your admin password)
#
```

コンテナが立ち上がったので、ログインしましょう。
・https://＜自分のIPアドレス＞:443
EC2の場合、ローカルのIPではなく、ElasticIPでのログインになります。
証明書のエラーが出ますが、スルーしましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/174900/96ad62b0-58ac-479e-7bf3-cc8cf73a0101.png)

ログイン後ライセンスキーの投入画面が出ます。
2.DockerEngineEEインストールでダウンロードしたライセンスキーを投入します。

これでUCPのインストールは終了です。

#4.DTRインストール
UCP操作をしていきます。
・Admin Settingを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/174900/d8848056-19e1-00a8-55ac-9e65bce963c7.png)

・Docker Trusted Registryを選択
UCP NODEをプルダウンから選択。
Disable TLS verification for UCPのチェックを外す。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/174900/e1f4ec13-0aaf-8045-5010-7c0401300e5f.png)

そうして出てきたコマンドを、RHELに打ち込みますが
残念ながらエラーになるはずです。
DTRはデフォルトで443のポートを使用します。
UCPが既に443を使用しているので、競合が発生します。

UCPを別ポートにする対処を行いましょう。
・Cluster Configurationを選択
Controller Portを443から8443に変更します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/174900/4da3fce9-a3ea-4cfa-21e1-df21f22d4261.png)

変更が終わったら、UCPには8443でアクセスが出来ることを確認しましょう。
・https://＜自分のIPアドレス＞:8443

```
# docker run -it --rm docker/dtr install --ucp-node ip-10-0-0-51.ap-northeast-1.compute.internal  --ucp-username ＜ユーザ名＞  --ucp-url https://10.0.0.51:8443  --ucp-insecure-tls
INFO[0000] Beginning Docker Trusted Registry installation
ucp-password:＜パスワード＞
INFO[0003] Validating UCP cert
INFO[0003] Connecting to UCP
INFO[0003] health checking ucp
INFO[0003] Only one available UCP node detected. Picking UCP node 'ip-10-0-0-51.ap-northeast-1.compute.internal'
INFO[0003] Searching containers in UCP for DTR replicas
INFO[0003] Searching containers in UCP for DTR replicas
INFO[0004] verifying [80 443] ports on ip-10-0-0-51.ap-northeast-1.compute.internal
INFO[0009] Waiting for running dtr-phase2 container to finish
INFO[0009] starting phase 2
INFO[0000] Validating UCP cert
INFO[0000] Connecting to UCP
INFO[0000] health checking ucp
INFO[0000] Verifying your system is compatible with DTR
INFO[0000] Checking if the node is okay to install on
WARN[0000] Node: ip-10-0-0-51.ap-northeast-1.compute.internal is a manager, it is **not** recommended for DTR to reside on a UCP manager node, see: https://docs.docker.com/ee/dtr/admin/install/system-requirements/ for more info.
WARN[0000] Installation will continue in 10 seconds...
INFO[0010] Using default overlay subnet: 10.1.0.0/24
INFO[0010] Creating network: dtr-ol
INFO[0010] Connecting to network: dtr-ol
INFO[0010] Waiting for phase2 container to be known to the Docker daemon
INFO[0011] Setting up replica volumes...
INFO[0011] Creating initial CA certificates
INFO[0011] Bootstrapping rethink...
INFO[0011] Creating dtr-rethinkdb-4bd224354f6a...
INFO[0020] Establishing connection with Rethinkdb
INFO[0021] Waiting for database dtr2 to exist
INFO[0021] Establishing connection with Rethinkdb
INFO[0021] Generated TLS certificate.                    dnsNames="[*.com *.*.com example.com *.dtr *.*.dtr]" domains="[*.com *.*.com 172.17.0.1 example.com *.dtr *.*.dtr]" ipAddresses="[172.17.0.1]"
INFO[0022] License config copied from UCP.
INFO[0022] Migrating db...
INFO[0000] Establishing connection with Rethinkdb
INFO[0000] Migrating database schema                     fromVersion=0 toVersion=10
INFO[0001] Waiting for database notaryserver to exist
INFO[0001] Waiting for database notarysigner to exist
INFO[0002] Waiting for database jobrunner to exist
INFO[0002] Migrated database from version 0 to 10
INFO[0025] Starting all containers...
INFO[0025] Getting container configuration and starting containers...
INFO[0025] Automatically configuring rethinkdb cache size to 14245 mb
INFO[0025] Recreating dtr-rethinkdb-4bd224354f6a...
INFO[0030] Creating dtr-registry-4bd224354f6a...
INFO[0038] Creating dtr-garant-4bd224354f6a...
INFO[0045] Creating dtr-api-4bd224354f6a...
INFO[0053] Creating dtr-notary-server-4bd224354f6a...
INFO[0060] Recreating dtr-nginx-4bd224354f6a...
INFO[0068] Creating dtr-jobrunner-4bd224354f6a...
INFO[0100] Creating dtr-notary-signer-4bd224354f6a...
INFO[0107] Creating dtr-scanningstore-4bd224354f6a...
INFO[0115] Trying to get the kv store connection back after reconfigure
INFO[0115] Establishing connection with Rethinkdb
INFO[0115] Verifying auth settings...
INFO[0115] Successfully registered dtr with UCP
INFO[0115] Installation is complete
INFO[0115] Replica ID is set to: 4bd224354f6a
INFO[0115] You can use flag '--existing-replica-id 4bd224354f6a' when joining other replicas to your Docker Trusted Registry Cluster
#
```

それでは、DTRにアクセスします。
・https://＜自分のIPアドレス＞:443
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/174900/fe0e4507-47e9-87e2-510f-34d81035dcb3.png)

DTRの構築が無事終わりました。
レジストリとクライアント間の通信は、tlsのためCAの証明書が必要です。
下記コマンドでダウンロード配置を行います。

```
# curl -k https://＜IPアドレス＞/ca -o /etc/pki/ca-trust/source/anchors/hoge.crt
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   774  100   774    0     0  23399      0 --:--:-- --:--:-- --:--:-- 24187
#
# update-ca-trust
#
# systemctl restart docker
#
```

これでプライベートなDockerレジストリの構築が完了しました。
あとは、docker push/pullで素敵なdockerライフを送りましょう。

Dockerレジストリ設定の記事はまた、別に書こうと思います。

#参考URL
https://docs.docker.com/install/linux/docker-ee/rhel/#find-your-docker-ee-repo-url
https://docs.docker.com/ee/ucp/admin/install/
https://docs.docker.com/ee/dtr/admin/install/

#以下、個人的なメモ
メモ
・dockerイメージは下記にする必要があります。
[ホスト名]:[ポート番号]/[リポジトリ名/リポジトリ名]:[イメージ名]

```
# docker login 172.17.0.1:443
# docker tag registry.access.redhat.com/rhel7 [ホスト名]:[ポート番号]/[リポジトリ名/リポジトリ名]:[イメージ名]
# docker push [ホスト名]:[ポート番号]/[リポジトリ名/リポジトリ名]:[イメージ名]
```