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をインストールまたは更新するには:
-
システムがULNに登録されている場合は、
ol7_x86_64_UEKR3
およびol7_x86_64_UEKR4
チャネルへのアクセスを無効にし、ol7_x86_64_UEKR5
チャネルへのアクセスを有効にします。ULNユーザー名とパスワードを使用してhttps://linux.oracle.comにログインし、「システム」タブをクリックして、Oracle Container Runtime for Dockerをインストールするシステムを選択します。「サブスクリプションの管理」ページに移動し、システムのチャネル・サブスクリプションを更新します。「サブスクリプションの保存」をクリックして変更を保存します。
-
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
-
次のコマンドを実行して、選択したUEKリリースにシステムをアップグレードします。
sudo yum update
-
UEKがデフォルトのブート・カーネルでない場合は、これを選択してシステムを再起動します。
sudo systemctl reboot
Oracle Container Runtime for Dockerパッケージへのアクセスの有効化
Oracle Container Runtime for Dockerパッケージにアクセスするには、適切なULNチャネルまたはyumリポジトリを有効にする必要があります。
システムがULNで登録されている場合は、ol7_x86_64_addons
チャネルを有効にします。ULN Webインタフェースを使用して、システムで適切なチャネルをサブスクライブします。
-
ULNユーザー名とパスワードを使用してhttps://linux.oracle.comにログインします。
-
「システム」タブの登録されたマシンのリストで、システムの名前が付いているリンクをクリックします。
-
「システム詳細」ページで、「サブスクリプションの管理」をクリックします。
-
「システム・サマリー」ページで、利用できるチャネルのリストから必要なチャネルを選択し、右矢印をクリックしてサブスクライブ済チャネルのリストに移動します。
システムで
ol7_x86_64_addons
チャネルをサブスクライブします。 -
「サブスクリプションの保存」をクリックします。
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_URLとportを、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ネットワークを構成するには:
-
/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
-
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.json
のstorage-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を専用の記憶域としてアタッチしたブロック・デバイスへのパスに置き換えます。
このストレージ・ドライバを使用する場合は、btrfsをoverlay2
に置き換えることができます。これを行うと、ブロック・デバイスはXFSでフォーマットされ、dtypeサポートが有効になります。
既存の構成を上書きするには、-f
フラグを使用します。インストール済のDockerを使用してすでにイメージとコンテナを設定している場合、このオプションは破壊的であり、これらのイメージとコンテナにアクセスできなくなる可能性があるため、このオプションは注意して使用してください。
Docker記憶域の手動構成
この項では、Dockerコンテナ用のファイル・システムの手動設定について説明します。
Dockerコンテナを管理するための専用のファイル・システムを手動で準備するには:
-
コンテナを管理するためのストレージ・ドライバとしてbtrfsを使用するようにDocker Engineを構成します。yumを使用して
btrfs-progs
パッケージをインストールします。sudo yum install btrfs-progs
ルート・ファイル・システムがbtrfsファイル・システムとして構成されていない場合、この例では、
/dev/sdb1
などの適切なデバイスまたはパーティション上でbtrfsファイル・システムを作成します。sudo mkfs.btrfs /dev/sdb1
-
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
-
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はUUID
値26fece06-e3e6-4cc9-bf54-3a353fdc5f82
です。PARTUUID
値は基礎となるパーティションのUUIDであり、無視してもかまいません。この例のファイル・システムのTYPEは、TYPE
値xfs
です。 -
起動時にファイル・システムがマウントされるように
/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ストレージ・ドライバを構成するには:
-
/etc/docker/daemon.json
を作成または編集します。このファイルを最初から作成する場合、次のようになります。
{ "storage-driver": "btrfs" }
btrfsを優先ストレージ・ドライバに置き換えます。XFS、ext3またはext4ファイル・システムを使用している場合は、btrfsを
overlay2
に置き換えることができます。このファイルがすでに存在し、他のエントリが含まれている場合は、一般的なJSONフォーマットに準拠して
storage-driver
構成変数の行を追加するようにしてください。この構成ファイルの形式とオプションの詳細は、次を参照してください。
https://docs.docker.com/engine/reference/commandline/dockerd/#daemon-configuration-file
-
Docker Engineデーモンの起動時に、
--storage-driver
オプションがコマンドライン・スイッチとして起動されていないことを確認します。このオプションが
/etc/sysconfig/docker
と/etc/sysconfig/docker-storage
のいずれのファイルにも記述されていないことを確認する必要があります。これらのファイルは非推奨であり、将来のリリースで削除される可能性があります。これらのファイルに他の構成パラメータが含まれている場合は、それらを/etc/docker/daemon.json
に移動して現在の構成を将来も使用できるようにします。また、このオプションが
/etc/systemd/system/docker.service.d/
のsystemdドロップイン・ファイルに記述されていないことも確認します。これはサポートされている構成オプションですが、可能な場合はすべてのDocker Engine構成を同じ場所にまとめておくことをお薦めします。 -
Docker Engineを起動して現在実行中である場合は、構成したストレージ・ドライバが使用されていることを確認します。
sudo docker info | grep Storage
docker infoコマンドを単独で実行して、構成のより詳細なビューを取得できます。