2 Oracle Container Runtime for Dockerのインストール

この章では、Oracle Linux 7ホストにOracle Container Runtime for Dockerをインストールするために必要なステップについて説明します。

Oracle Linux 7システムにDocker Engineをインストールおよび構成する前に、適切なリリースのUnbreakable Enterprise Kernelを実行していることを確認してください。UEKのインストール手順の詳細は、「Unbreakable Enterprise Kernelの設定」を参照してください。

すでにUEK R4またはUEK R5のいずれかを実行している場合は、「Oracle Container Runtime for Dockerのインストール」の手順に従ってインストールを完了できます。

Unbreakable Enterprise Kernelの設定

Unbreakable Enterprise Kernelリリース5 (UEK R5)以上を使用するようにシステムを構成し、このカーネルを使用してシステムを起動します。以前のUnbreakable Enterprise Kernel (UEK)リリースまたはRed Hat Compatible Kernel (RHCK)を使用している場合は、カーネルをアップグレードする必要があります。

UEKをインストールまたは更新するには:

  1. システムがULNに登録されている場合は、ol7_x86_64_UEKR3およびol7_x86_64_UEKR4チャネルへのアクセスを無効にし、ol7_x86_64_UEKR5チャネルへのアクセスを有効にします。

    ULNユーザー名とパスワードを使用してhttps://linux.oracle.comにログインし、「システム」タブをクリックして、Oracle Container Runtime for Dockerをインストールするシステムを選択します。「サブスクリプションの管理」ページに移動し、システムのチャネル・サブスクリプションを更新します。「サブスクリプションの保存」をクリックして変更を保存します。

  2. Oracle Linux yumサーバーを使用する場合は、ol7_UEKR3およびol7_UEKR4リポジトリを無効にし、ol7_UEKR5リポジトリを有効にします。これは、yum-config-managerを使用して簡単に実行できます。

    sudo yum-config-manager --disable ol7_UEKR3 ol7_UEKR4
    sudo yum-config-manager --enable ol7_UEKR5                     
  3. 次のコマンドを実行して、選択したUEKリリースにシステムをアップグレードします。

    sudo yum update                     
  4. UEKがデフォルトのブート・カーネルでない場合は、これを選択してシステムを再起動します。

    sudo systemctl reboot                     

Oracle Container Runtime for Dockerパッケージへのアクセスの有効化

Oracle Container Runtime for Dockerパッケージにアクセスするには、適切なULNチャネルまたはyumリポジトリを有効にする必要があります。

システムがULNで登録されている場合は、ol7_x86_64_addonsチャネルを有効にします。ULN Webインタフェースを使用して、システムで適切なチャネルをサブスクライブします。

  1. ULNユーザー名とパスワードを使用してhttps://linux.oracle.comにログインします。

  2. 「システム」タブの登録されたマシンのリストで、システムの名前が付いているリンクをクリックします。

  3. 「システム詳細」ページで、「サブスクリプションの管理」をクリックします。

  4. 「システム・サマリー」ページで、利用できるチャネルのリストから必要なチャネルを選択し、右矢印をクリックしてサブスクライブ済チャネルのリストに移動します。

    システムでol7_x86_64_addonsチャネルをサブスクライブします。

  5. 「サブスクリプションの保存」をクリックします。

Oracle Linux yumサーバーを使用する場合は、ol7_addonsチャネルを有効にします。システムでyumリポジトリを有効にするには、yum-config-managerコマンドを使用します。たとえば、次を実行します。

sudo yum-config-manager --enable ol7_addons               

dockerパッケージの削除

最新のDockerパッケージはdocker-engineで、古いdockerパッケージと競合しています。古いdockerパッケージがインストールされている場合は、それを削除してからDocker Engineをインストールする必要があります。古いdockerパッケージがインストールされているかどうかを確認するには、次を実行します。

sudo rpm -qi docker               

古いdockerパッケージがインストールされている場合は、dockerサービスを停止し、パッケージを削除します。dockerサービスを停止するには、次のようにします。

sudo systemctl stop docker               

dockerパッケージを削除します。

sudo yum remove docker               

これで、docker-engineパッケージをインストールできます。

Oracle Container Runtime for Dockerのインストール

docker-engineおよびdocker-cliパッケージをインストールするには、次のようにします。

sudo yum install docker-engine docker-cli               

dockerサービスを開始して、ブート時に起動するように構成します。

sudo systemctl enable --now docker               

dockerサービスが実行されていることを確認するには、次のコマンドを使用します。

sudo systemctl status docker               

docker infoコマンドを使用して、Docker Engineの構成およびバージョンに関する情報を表示することもできます。

sudo docker info               

詳細は、docker(1)マニュアル・ページを参照してください。

プロキシ・サーバーの構成

Webプロキシ・ネットワーク・オプションを構成するには、次の行を含むドロップイン・ファイル/etc/systemd/system/docker.service.d/http-proxy.confを作成します。

[Service]
Environment="HTTP_PROXY=proxy_URL:port"
Environment="HTTPS_PROXY=proxy_URL:port"

proxy_URLportを、Webプロキシの適切なURLおよびポート番号に置き換えます。

dockerサービスの実行中にsystemdドロップイン・ファイルを追加または変更した後、systemdにサービスの構成をリロードするように指示する必要があります。

sudo systemctl daemon-reload               

構成変更を有効にするには、dockerサービスを再起動します。

sudo systemctl restart docker               

IPv6ネットワークの構成

IPv6が有効化されると、Dockerはブリッジdocker0にリンクローカルIPv6アドレスfe80::1を割り当てます。

Dockerネットワークの構成の詳細は、次を参照してください。

https://docs.docker.com/engine/userguide/networking/

IPv6ネットワークを構成するには:

  1. /etc/docker/daemon.jsonを作成または編集します。

    このファイルを最初から作成する場合、次のようになります。

    {
      "ipv6": true
    }

    このファイルがすでに存在し、他のエントリが含まれている場合は、一般的なJSONフォーマットに準拠してipv6構成変数の行を追加するようにしてください。

    DockerがグローバルIPv6アドレスをコンテナに割り当てる場合は、たとえば次のように、追加でIPv6サブネットをfixed-cidr-v6オプションに指定します。

    {
      "ipv6": true,
      "fixed-cidr-v6": "2001:db8:1::/64"
    }

    同様に、この構成ファイルにdefault-gateway-v6パラメータを使用して、Dockerで使用するデフォルトのIPv6ゲートウェイを構成することもできます。

    この構成ファイルの形式とオプションの詳細は、次を参照してください。

    https://docs.docker.com/engine/reference/commandline/dockerd/#daemon-configuration-file

  2. Docker Engineデーモンの起動時に、--ipv6--fixed-cidr-v6およびdefault-gateway-v6オプションがコマンドライン・スイッチとして起動されていないことを確認します。

    これらのオプションが/etc/sysconfig/docker/etc/sysconfig/docker-networkingのいずれのファイルにも記述されていないことを確認する必要があります。これらのファイルは非推奨であり、将来のリリースで削除される可能性があります。これらのファイルに他の構成パラメータが含まれている場合は、それらを/etc/docker/daemon.jsonに移動すれば現在の構成を将来も使用できるかどうかを検討します。

    また、これらのオプションが/etc/systemd/system/docker.service.d/のsystemdドロップイン・ファイルに記述されていないことも確認します。これはサポートされている構成オプションですが、可能な場合はすべてのDocker Engine構成を同じ場所に保持することをお薦めします。

Docker記憶域の構成

Docker Engineは、Dockerコンテナを管理するためのデフォルトのストレージ・ドライバとしてoverlay2を使用するように構成されています。これにより、デバイス・マッパーをデフォルトのストレージ・ドライバとして使用していた以前のリリースのパフォーマンスとスケーラビリティが向上しますが、新しいテクノロジであるため、本番環境で使用する前に適切にテストする必要があります。overlay2の詳細は、次を参照してください。

https://docs.docker.com/engine/userguide/storagedriver/overlayfs-driver/

オーバーレイ・ファイル・システムは、dtypeサポートが有効になっていないファイル・システムと組み合せて使用すると破損する可能性があります。

ノート:

Oracle Linux 7.4以前では、ルート・パーティションは-n ftype=0 (dtypeサポートの無効化)で自動的にフォーマットされ、XFSがファイル・システムとして選択されます。

Docker Engineインストーラは、ファイル・システムでdtypeがサポートされているかどうかをチェックし、これが有効になっていない場合にはdevicemapperを使用するようにデフォルトのストレージ・ドライバが設定されます。このチェックは、Docker Engineの新規インストールでのみ実行されます。アップグレード中、既存のDockerインストールの構成は影響を受けません。

これにより、Dockerはインストール直後に追加の構成を施すことなくデフォルトのOracle Linux 7システムで機能できます。ただし、本番環境にdevicemapperを使用することはお薦めしません。この構成により、パフォーマンスとスケーラビリティが損なわれる可能性があります。したがって、Docker専用の記憶域を使用することと、btrfsまたはoverlay2のいずれかを使用するようにストレージ・ドライバを変更することを検討することが重要です。

重要:

ストレージ・ドライバとしてdevicemapperを引き続き使用する場合は、Oracle Databaseのイメージなど一部のDockerイメージでは、ベース・デバイス・サイズを25GB以上に設定する必要があることに注意してください。devicemapperのデフォルトのベース・デバイス・サイズは25GBに更新されますが、コンテナによっては最小要件を満たしているにすぎません。追加の容量が必要な場合は、コンテナに対して、またはDocker Engineに対してグローバルに、dm.basesize開始オプションを設定することで、ベース・デバイス・サイズを変更できます。

この値をグローバルに変更する場合は、/etc/docker/daemon.jsonstorage-opts構成パラメータにこの値を追加します。次に例を示します。

{
...
"storage-opts" : [ "dm.basesize=50G" ],
...
}

ベース・デバイス・サイズは疎に割り当てられるため、当初イメージがこの領域をすべて使用することはできません。docker infoコマンドを実行して、Base Device Sizeに割り当てられる領域量を確認できます。

ストレージ・ドライバのオプションの詳細は、次を参照してください。

https://docs.docker.com/engine/reference/commandline/dockerd/#storage-driver-options

overlayfsよりも安定で成熟したテクノロジとしてbtrfsを使用することをお薦めします。

ほとんどの場合、Dockerコンテナを管理するための専用のファイル・システムを作成することをお薦めします。このファイル・システムは、Dockerサービスが開始される前に、起動時に/var/lib/dockerにマウントできます。

複数のコンテナの格納に十分なサイズの未使用のブロック・デバイスが適しています。推奨の最小サイズは1GBですが、複合Dockerアプリケーションを実装するには、さらに領域が必要になります。システムが仮想マシンの場合は、新しい仮想ディスクを作成、パーティショニング、およびフォーマットすることを推奨します。あるいは、既存のext3またはext4ファイル・システムをbtrfsに変換します。ファイル・システムの変換の詳細は、Oracle® Linux 7: 管理者ガイドを参照してください。

LVMボリューム・グループに使用可能な領域がある場合は、新しい論理ボリュームを作成し、それをbtrfsファイル・システムとしてフォーマットできます。

重要:

XFSファイル・システムをオーバーレイとして使用するには、-n ftype=1オプションを有効にしてXFSファイル・システムを作成する必要があります。Oracle Linux 7のルート・パーティションは、XFSがファイル・システムとして選択される場合に-n ftype=0で自動的にフォーマットされます。したがって、この環境でoverlay2ストレージ・ドライバを使用する場合、この目的のために個別のデバイスをフォーマットする必要があります。

Docker記憶域の自動構成

docker-engineパッケージには、新しいDockerデプロイメント用に記憶域を正しく構成するのに役立つユーティリティが含まれています。docker-storage-configユーティリティは、新しいブロック・デバイスをフォーマットし、マウント・ポイントを設定する他、適切なストレージ・ドライバで実行されるようにDocker Engineを正しく構成して、記憶域構成をOracleのガイドラインに準拠させることができます。

使用方法については、-hオプションを指定してdocker-storage-configを実行してください。

sudo docker-storage-config -h                  

docker-storage-configユーティリティでは、Docker記憶域に使用する有効なブロック・デバイスへのパスを指定する必要があります。このスクリプトは、デバイスを新しいファイル・システムでフォーマットします。これは破壊的な操作になる可能性があります。デバイス上の既存のデータがすべて失われる可能性があります。lsblkコマンドを使用すると、システムに現在接続されているブロック・デバイスを正しく識別できます。

Docker記憶域を自動的に設定するには、インストールする前に、rootとしてdocker-storage-configを実行します。

sudo docker-storage-config -s btrfs -d /dev/sdb1

/dev/sdb1を専用の記憶域としてアタッチしたブロック・デバイスへのパスに置き換えます。

このストレージ・ドライバを使用する場合は、btrfsoverlay2に置き換えることができます。これを行うと、ブロック・デバイスはXFSでフォーマットされ、dtypeサポートが有効になります。

既存の構成を上書きするには、-fフラグを使用します。インストール済のDockerを使用してすでにイメージとコンテナを設定している場合、このオプションは破壊的であり、これらのイメージとコンテナにアクセスできなくなる可能性があるため、このオプションは注意して使用してください。

Docker記憶域の手動構成

この項では、Dockerコンテナ用のファイル・システムの手動設定について説明します。

Dockerコンテナを管理するための専用のファイル・システムを手動で準備するには:

  1. コンテナを管理するためのストレージ・ドライバとしてbtrfsを使用するようにDocker Engineを構成します。yumを使用してbtrfs-progsパッケージをインストールします。

    sudo yum install btrfs-progs                        

    ルート・ファイル・システムがbtrfsファイル・システムとして構成されていない場合、この例では、/dev/sdb1などの適切なデバイスまたはパーティション上でbtrfsファイル・システムを作成します。

    sudo mkfs.btrfs /dev/sdb1                        
  2. XFSでフォーマットされたブロック・デバイスをoverlay2ストレージ・ドライバとともに使用してコンテナを管理するようにDocker Engineを構成します。たとえば、パーティション/dev/sdb1をフォーマットするには、XFSファイル・システムでブロック・デバイスをフォーマットします。

    sudo mkfs -t xfs -n ftype=1 /dev/sdb1                        

    ファイル・システムを作成する場合やoverlayfsを使用できない場合には、-n ftype=1オプションを使用する必要があります。マウントしたXFSパーティションが正しくフォーマットされているかどうかを確認するには、次のコマンドを実行し、その出力を調べてftype=1であることを確認します。

    xfs_info /dev/sdb1 | grep ftype                        
  3. blkidコマンドを使用して、新しいファイル・システムのUUIDおよびTYPEを表示し、この値をメモします。次に例を示します。

    blkid /dev/sdb1
    /dev/sdb1: UUID="26fece06-e3e6-4cc9-bf54-3a353fdc5f82" TYPE="xfs" \
      PARTUUID="ee0d0d72-dc97-40d8-8cd9-39e29fbc660e" 

    この例では、デバイス/dev/sdb1上のファイル・システムのUUIDはUUID26fece06-e3e6-4cc9-bf54-3a353fdc5f82です。PARTUUID値は基礎となるパーティションのUUIDであり、無視してもかまいません。この例のファイル・システムのTYPEは、TYPExfsです。

  4. 起動時にファイル・システムがマウントされるように/etc/fstabファイルにエントリを作成します。エディタで/etc/fstabを開き、次のような行を追加します。

    UUID=UUID_value /var/lib/docker   fstype     defaults        0 0

    UUID_valueをUUID値に置き換えます。fstypeをファイル・システムのTYPEに置き換えます。

    ノート:

    以前のバージョンのDockerでは、Systemdマウント・ターゲットとDockerサービス用のSystemdドロップイン・ファイルを使用して、Docker専用の記憶域をマウントする必要がありました。この要件は、Dockerサービスが停止したときに記憶域が自動的にアンマウントされる問題に関連するものでした。この問題は発生しなくなりました。現在これらの方法を使用して記憶域をマウントしている場合は、Systemdドロップインおよびマウント・ターゲットを削除し、これをfstabエントリに置き換えることで、環境を簡素化することを検討してください。

    このエントリでは、/var/lib/docker上のファイル・システムに対するマウントを定義します。新規インストールを実行する場合には、このディレクトリの作成が必要になることがあります。

    sudo mkdir /var/lib/docker                        

    使用を開始するには、ファイル・システムをマウントする必要があります。

    sudo mount /var/lib/docker                        

Docker記憶域ドライバの構成

この項では、Dockerのストレージ・ドライバの設定について説明します。

Dockerストレージ・ドライバを構成するには:

  1. /etc/docker/daemon.jsonを作成または編集します。

    このファイルを最初から作成する場合、次のようになります。

    {
      "storage-driver": "btrfs"
    }

    btrfsを優先ストレージ・ドライバに置き換えます。XFS、ext3またはext4ファイル・システムを使用している場合は、btrfsoverlay2に置き換えることができます。

    このファイルがすでに存在し、他のエントリが含まれている場合は、一般的なJSONフォーマットに準拠してstorage-driver構成変数の行を追加するようにしてください。

    この構成ファイルの形式とオプションの詳細は、次を参照してください。

    https://docs.docker.com/engine/reference/commandline/dockerd/#daemon-configuration-file

  2. Docker Engineデーモンの起動時に、--storage-driverオプションがコマンドライン・スイッチとして起動されていないことを確認します。

    このオプションが/etc/sysconfig/docker/etc/sysconfig/docker-storageのいずれのファイルにも記述されていないことを確認する必要があります。これらのファイルは非推奨であり、将来のリリースで削除される可能性があります。これらのファイルに他の構成パラメータが含まれている場合は、それらを/etc/docker/daemon.jsonに移動して現在の構成を将来も使用できるようにします。

    また、このオプションが/etc/systemd/system/docker.service.d/のsystemdドロップイン・ファイルに記述されていないことも確認します。これはサポートされている構成オプションですが、可能な場合はすべてのDocker Engine構成を同じ場所にまとめておくことをお薦めします。

  3. Docker Engineを起動して現在実行中である場合は、構成したストレージ・ドライバが使用されていることを確認します。

    sudo docker info | grep Storage                        

    docker infoコマンドを単独で実行して、構成のより詳細なビューを取得できます。

locate出力からのDockerコンテナ・ファイルの除外

mlocateパッケージがインストールされている場合は、次のように、/etc/updatedb.confPRUNEPATHSエントリを変更して、updatedb/var/lib/docker下のディレクトリの索引付けを行わないようにすることをお薦めします。

PRUNEPATHS="/media /tmp /var/lib/docker /var/spool /var/tmp"

このエントリは、locateがDockerコンテナに属するファイルをレポートするのを防ぎます。