2017年1月19日木曜日

Oracle Linux の Docker の雰囲気。

今まで Oracle Linux で Docker を使用していて、気づき感じたことなどを挙げておこうと思います。

マニュアルでは、下記のあたりです。
Dockerユーザーズ・ガイド
http://docs.oracle.com/cd/E39368_01/e67079/index.html

ちなみに今回のコマンド実行例などは、Oracle Linux 7 の環境ですが、
Oracle Linux 6 でも同様な感じです。
[root@ol7-docker01 ~]# cat /etc/oracle-release
Oracle Linux Server release 7.3

Docker のパッケージ。

Oracle Linux の標準的な (Public Yum サーバに含まれる)RPM に、Docker は含まれます。
ただし、デフォルトでは有効になっていない ol7_addons にあります。
Docker のバージョンは、RHEL、CentOS とだいたい同じです。
アップグレードは、RPM パッケージのアップグレードインストールとなります。
[root@ol7-docker01 ~]# yum --enablerepo=ol7_addons list docker-engine
読み込んだプラグイン:ulninfo
インストール済みパッケージ
docker-engine.x86_64                  1.12.2-1.0.1.el7                  @ol7_addons
利用可能なパッケージ
docker-engine.x86_64                  1.12.6-1.0.1.el7                  ol7_addons

最新の Docker の RPM は、UEK R4 と依存関係があります。
Oracle Linux 7 であれば Red Hat 互換カーネルでも Docker が
まったく使えないわけではないですが、RPM でインストールするには UEK R4 が必要です。
[root@ol7-docker01 ~]# yum --enablerepo=ol7_addons deplist docker-engine
読み込んだプラグイン:ulninfo
パッケージ    : docker-engine.x86_64 1.12.6-1.0.1.el7
  依存性      : /bin/sh
   provider: bash.x86_64 4.2.46-21.0.1.el7_3
  依存性      : config(docker-engine) = 1.12.6-1.0.1.el7
   provider: docker-engine.x86_64 1.12.6-1.0.1.el7
  依存性      : device-mapper >= 1.02.90-2
   provider: device-mapper.x86_64 7:1.02.135-1.el7_3.2
  依存性      : device-mapper-libs >= 1.02.90-1
   provider: device-mapper-libs.x86_64 7:1.02.135-1.el7_3.2
   provider: device-mapper-libs.i686 7:1.02.135-1.el7_3.2
  依存性      : docker-engine-selinux >= 1.12.6-1.0.1.el7
   provider: selinux-policy-targeted.noarch 3.13.1-102.0.2.el7_3.13
   provider: docker-engine-selinux.noarch 1.12.6-1.0.1.el7
  依存性      : iptables
   provider: iptables-services.x86_64 1.4.21-17.el7
   provider: iptables.x86_64 1.4.21-17.el7
   provider: iptables.i686 1.4.21-17.el7
  依存性      : kernel-uek >= 4.1
   provider: kernel-uek-debug.x86_64 4.1.12-61.1.25.el7uek
   provider: kernel-uek.x86_64 4.1.12-61.1.25.el7uek
  依存性      : libc.so.6()(64bit)
   provider: glibc.x86_64 2.17-157.el7_3.1
  依存性      : libc.so.6(GLIBC_2.14)(64bit)
   provider: glibc.x86_64 2.17-157.el7_3.1
  依存性      : libc.so.6(GLIBC_2.17)(64bit)
   provider: glibc.x86_64 2.17-157.el7_3.1
  依存性      : libc.so.6(GLIBC_2.2.5)(64bit)
   provider: glibc.x86_64 2.17-157.el7_3.1
  依存性      : libc.so.6(GLIBC_2.4)(64bit)
   provider: glibc.x86_64 2.17-157.el7_3.1
  依存性      : libc.so.6(GLIBC_2.9)(64bit)
   provider: glibc.x86_64 2.17-157.el7_3.1
  依存性      : libcgroup
   provider: libcgroup.x86_64 0.41-11.el7
   provider: libcgroup.i686 0.41-11.el7
  依存性      : libdevmapper.so.1.02()(64bit)
   provider: device-mapper-libs.x86_64 7:1.02.135-1.el7_3.2
  依存性      : libdevmapper.so.1.02(Base)(64bit)
   provider: device-mapper-libs.x86_64 7:1.02.135-1.el7_3.2
  依存性      : libdevmapper.so.1.02(DM_1_02_97)(64bit)
   provider: device-mapper-libs.x86_64 7:1.02.135-1.el7_3.2
  依存性      : libdl.so.2()(64bit)
   provider: glibc.x86_64 2.17-157.el7_3.1
  依存性      : libltdl.so.7()(64bit)
   provider: libtool-ltdl.x86_64 2.4.2-21.el7_2
  依存性      : libpthread.so.0()(64bit)
   provider: glibc.x86_64 2.17-157.el7_3.1
  依存性      : libpthread.so.0(GLIBC_2.2.5)(64bit)
   provider: glibc.x86_64 2.17-157.el7_3.1
  依存性      : libpthread.so.0(GLIBC_2.3.2)(64bit)
   provider: glibc.x86_64 2.17-157.el7_3.1
  依存性      : libseccomp.so.2()(64bit)
   provider: libseccomp.x86_64 2.3.1-2.el7
  依存性      : libsystemd.so.0()(64bit)
   provider: systemd-libs.x86_64 219-30.0.1.el7_3.6
  依存性      : libsystemd.so.0(LIBSYSTEMD_209)(64bit)
   provider: systemd-libs.x86_64 219-30.0.1.el7_3.6
  依存性      : rtld(GNU_HASH)
   provider: glibc.x86_64 2.17-157.el7_3.1
   provider: glibc.i686 2.17-157.el7_3.1
  依存性      : selinux-policy >= 3.13.1-23
   provider: selinux-policy.noarch 3.13.1-102.0.2.el7_3.13
  依存性      : systemd-units
   provider: systemd.x86_64 219-30.0.1.el7_3.6
  依存性      : tar
   provider: tar.x86_64 2:1.26-31.el7
  依存性      : xz
   provider: xz.x86_64 5.2.2-1.el7

UEK R4 の Oracle Linux です。
[root@ol7-docker01 ~]# uname -r
4.1.12-61.1.25.el7uek.x86_64

エラータ、RPM リリース情報について。

Oracle Linux のエラータ メーリングリストを購読しておくと、
そこに docker-engine などの RPM 更新の情報も含まれています。

El-errata -- Errata Announcements for Oracle Linux
https://oss.oracle.com/mailman/listinfo/el-errata

たとえば、こんなメールが来るので、Docker の RPM の更新もわかります。
https://oss.oracle.com/pipermail/el-errata/2017-January/006647.html


コンテナ イメージを格納するストレージについて。

RHEL や CentOS と同様、デフォルトの Storage Driver は、devicemapper です。
[root@ol7-docker03 ~]# docker info
Containers: 0
 Running: 0
 Paused: 0
 Stopped: 0
Images: 0
Server Version: 1.12.2
Storage Driver: devicemapper
 Pool Name: docker-251:0-136-pool
 Pool Blocksize: 65.54 kB
 Base Device Size: 10.74 GB
 Backing Filesystem: xfs
 Data file: /dev/loop0
 Metadata file: /dev/loop1
 Data Space Used: 11.8 MB
 Data Space Total: 107.4 GB
 Data Space Available: 8.434 GB
 Metadata Space Used: 581.6 kB
 Metadata Space Total: 2.147 GB
 Metadata Space Available: 2.147 GB
 Thin Pool Minimum Free Space: 10.74 GB
 Udev Sync Supported: true
 Deferred Removal Enabled: false
 Deferred Deletion Enabled: false
 Deferred Deleted Device Count: 0
 Data loop file: /var/lib/docker/devicemapper/devicemapper/data
 WARNING: Usage of loopback devices is strongly discouraged for production use. Use `--storage-opt dm.thinpooldev` to specify a custom block storage device.
 Metadata loop file: /var/lib/docker/devicemapper/devicemapper/metadata
 Library Version: 1.02.135-RHEL7 (2016-09-28)
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: null host bridge overlay
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Security Options: seccomp
Kernel Version: 4.1.12-61.1.23.el7uek.x86_64
Operating System: Oracle Linux Server 7.3
OSType: linux
Architecture: x86_64
CPUs: 1
Total Memory: 670.9 MiB
Name: ol7-docker03
ID: LCA3:CRNY:ALP7:JC6K:TQVQ:PBJL:VQ3J:C4FM:3ZVA:BKQM:RDO4:TQHR
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Insecure Registries:
 127.0.0.0/8

マニュアルには Btrfs に変更する方法も紹介されています。
Btrfs が出てくるあたりが、なんとなく ORACLE っぽい気もします。
ちなみに、割と新しい docker 1.12系 が提供されているので、
下記は Swarm Mode にしてみてあります。
[root@ol7-docker01 ~]# docker info
Containers: 2
 Running: 0
 Paused: 0
 Stopped: 2
Images: 42
Server Version: 1.12.2
Storage Driver: btrfs
 Build Version: Btrfs v3.19.1
 Library Version: 101
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: overlay host null bridge
Swarm: active
 NodeID: 1749y0pd4qk41d7xnlfa4yvql
 Is Manager: true
 ClusterID: dcmdslo8tzjf7rbcx54jxl6nx
 Managers: 1
 Nodes: 3
 Orchestration:
  Task History Retention Limit: 5
 Raft:
  Snapshot Interval: 10000
  Heartbeat Tick: 1
  Election Tick: 3
 Dispatcher:
  Heartbeat Period: 5 seconds
 CA Configuration:
  Expiry Duration: 3 months
 Node Address: 192.168.56.108
Runtimes: runc
Default Runtime: runc
Security Options: seccomp
Kernel Version: 4.1.12-61.1.25.el7uek.x86_64
Operating System: Oracle Linux Server 7.3
OSType: linux
Architecture: x86_64
CPUs: 1
Total Memory: 990.9 MiB
Name: ol7-docker01
ID: 37N4:PEH6:AKA3:PEKX:6MPX:ACFY:F3NO:OE6O:TE7E:M7ZH:IFW4:FMYO
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Insecure Registries:
 127.0.0.0/8

Docker Engine のサービス管理など。

Oracle Linux 6 であれば chkconfig / service コマンドあたりを使用します。
Oracle Linux 7 であれば systemd で管理されるので、
systemctl コマンドを使用します。

Unit ファイルも、RPM に含まれています。
[root@ol7-docker01 ~]# rpm -qf /usr/lib/systemd/system/docker.service
docker-engine-1.12.2-1.0.1.el7.x86_64
[root@ol7-docker01 ~]# rpm -qf /etc/systemd/system/docker.service.d/docker-sysconfig.conf
docker-engine-1.12.2-1.0.1.el7.x86_64

Docker へのオプションは、Drop In として
/etc/systemd/system/docker.service.d/docker-sysconfig.conf
あたりに指定します。
[root@ol7-docker01 ~]# systemctl cat docker
# /usr/lib/systemd/system/docker.service
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network.target

[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
#TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process

[Install]
WantedBy=multi-user.target

# /etc/systemd/system/docker.service.d/docker-sysconfig.conf
[Service]
ExecStart=
EnvironmentFile=-/etc/sysconfig/docker
EnvironmentFile=-/etc/sysconfig/docker-storage
EnvironmentFile=-/etc/sysconfig/docker-network
ExecStart=/usr/bin/docker daemon \
          $OPTIONS \
          $DOCKER_STORAGE_OPTIONS \
          $DOCKER_NETWORK_OPTIONS \
          $INSECURE_REGISTRY

以上、Oracle Linux の Docker の雰囲気でした。

2 件のコメント:

  1. 過去遺産
    http://gowatana.blogspot.jp/2016/01/ol7-docker19.html

    返信削除
  2. 過去遺産 その2
    http://gowatana.blogspot.jp/2015/08/ol6-docker-btrfs.html

    返信削除